feat: Implement setFacingPoint script routine
This commit is contained in:
parent
380943dca6
commit
779ad773d5
6 changed files with 21 additions and 4 deletions
|
@ -97,9 +97,13 @@ bool SpatialObject::contains(const glm::vec3 &point) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpatialObject::face(const SpatialObject &other) {
|
void SpatialObject::face(const SpatialObject &other) {
|
||||||
if (_id == other._id) return;
|
if (_id != other._id) {
|
||||||
|
face(other._position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
glm::vec2 dir(glm::normalize(other._position - _position));
|
void SpatialObject::face(const glm::vec3 &point) {
|
||||||
|
glm::vec2 dir(glm::normalize(point - _position));
|
||||||
_facing = -glm::atan(dir.x, dir.y);
|
_facing = -glm::atan(dir.x, dir.y);
|
||||||
updateTransform();
|
updateTransform();
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
void update(float dt) override;
|
void update(float dt) override;
|
||||||
|
|
||||||
void face(const SpatialObject &other);
|
void face(const SpatialObject &other);
|
||||||
|
void face(const glm::vec3 &point);
|
||||||
|
|
||||||
void applyEffect(const std::shared_ptr<Effect> &eff);
|
void applyEffect(const std::shared_ptr<Effect> &eff);
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,7 @@ private:
|
||||||
script::Variable getTag(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable getTag(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
script::Variable getWaypointByTag(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable getWaypointByTag(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
script::Variable setFacing(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable setFacing(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
|
script::Variable setFacingPoint(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
script::Variable setItemStackSize(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable setItemStackSize(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
script::Variable setLocked(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable setLocked(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
script::Variable soundObjectPlay(const VariablesList &args, script::ExecutionContext &ctx);
|
script::Variable soundObjectPlay(const VariablesList &args, script::ExecutionContext &ctx);
|
||||||
|
|
|
@ -181,7 +181,7 @@ void Routines::addKotorRoutines() {
|
||||||
add("GetIsDead", Int, { Object }, &Routines::getIsDead);
|
add("GetIsDead", Int, { Object }, &Routines::getIsDead);
|
||||||
add("PrintVector", Void, { TVector, Int }, &Routines::printVector);
|
add("PrintVector", Void, { TVector, Int }, &Routines::printVector);
|
||||||
add("Vector", TVector, { Float, Float, Float }, &Routines::vectorCreate);
|
add("Vector", TVector, { Float, Float, Float }, &Routines::vectorCreate);
|
||||||
add("SetFacingPoint", Void, { TVector });
|
add("SetFacingPoint", Void, { TVector }, &Routines::setFacingPoint);
|
||||||
add("AngleToVector", TVector, { Float });
|
add("AngleToVector", TVector, { Float });
|
||||||
add("VectorToAngle", Float, { TVector });
|
add("VectorToAngle", Float, { TVector });
|
||||||
add("TouchAttackMelee", Int, { Object, Int });
|
add("TouchAttackMelee", Int, { Object, Int });
|
||||||
|
|
|
@ -342,6 +342,17 @@ Variable Routines::setFacing(const VariablesList &args, ExecutionContext &ctx) {
|
||||||
return Variable();
|
return Variable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Variable Routines::setFacingPoint(const VariablesList &args, ExecutionContext &ctx) {
|
||||||
|
auto caller = getCallerAsSpatial(ctx);
|
||||||
|
if (caller) {
|
||||||
|
glm::vec3 target(getVector(args, 0));
|
||||||
|
caller->face(target);
|
||||||
|
} else {
|
||||||
|
warn("Routines: setFacingPoint: invalid caller");
|
||||||
|
}
|
||||||
|
return Variable();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace game
|
} // namespace game
|
||||||
|
|
||||||
} // namespace reone
|
} // namespace reone
|
||||||
|
|
|
@ -181,7 +181,7 @@ void Routines::addTslRoutines() {
|
||||||
add("GetIsDead", Int, { Object }, &Routines::getIsDead);
|
add("GetIsDead", Int, { Object }, &Routines::getIsDead);
|
||||||
add("PrintVector", Void, { TVector, Int }, &Routines::printVector);
|
add("PrintVector", Void, { TVector, Int }, &Routines::printVector);
|
||||||
add("Vector", TVector, { Float, Float, Float }, &Routines::vectorCreate);
|
add("Vector", TVector, { Float, Float, Float }, &Routines::vectorCreate);
|
||||||
add("SetFacingPoint", Void, { TVector });
|
add("SetFacingPoint", Void, { TVector }, &Routines::setFacingPoint);
|
||||||
add("AngleToVector", TVector, { Float });
|
add("AngleToVector", TVector, { Float });
|
||||||
add("VectorToAngle", Float, { TVector });
|
add("VectorToAngle", Float, { TVector });
|
||||||
add("TouchAttackMelee", Int, { Object, Int });
|
add("TouchAttackMelee", Int, { Object, Int });
|
||||||
|
|
Loading…
Reference in a new issue