diff --git a/Extensions/PathfindingBehavior/pathfindingruntimebehavior.ts b/Extensions/PathfindingBehavior/pathfindingruntimebehavior.ts index ecddfbcf72..f971e2603b 100644 --- a/Extensions/PathfindingBehavior/pathfindingruntimebehavior.ts +++ b/Extensions/PathfindingBehavior/pathfindingruntimebehavior.ts @@ -179,9 +179,8 @@ namespace gdjs { movementAngleIsAround(degreeAngle: float, tolerance: float) { return ( - gdjs.evtTools.common.angleDifference( - this._movementAngle, - degreeAngle + Math.abs( + gdjs.evtTools.common.angleDifference(this._movementAngle, degreeAngle) ) <= tolerance ); } diff --git a/Extensions/TopDownMovementBehavior/Extension.cpp b/Extensions/TopDownMovementBehavior/Extension.cpp index 14737f96e2..171cdf8dc9 100644 --- a/Extensions/TopDownMovementBehavior/Extension.cpp +++ b/Extensions/TopDownMovementBehavior/Extension.cpp @@ -358,7 +358,22 @@ void DeclareTopDownMovementBehaviorExtension(gd::PlatformExtension& extension) { gd::ParameterOptions::MakeNewOptions().SetDescription( _("Angle to compare to (in degrees)"))) .MarkAsAdvanced() + .SetHidden() .SetFunctionName("GetAngle"); + + aut.AddScopedCondition( + "IsMovementAngleAround", + _("Angle of movement"), + _("Compare the angle of the top-down movement of the object."), + _("Angle of movement of _PARAM0_ is _PARAM2_ (tolerance" + ": _PARAM3_ degrees)"), + _("Movement"), + "CppPlatform/Extensions/topdownmovementicon24.png", + "CppPlatform/Extensions/topdownmovementicon16.png") + .AddParameter("object", _("Object")) + .AddParameter("behavior", _("Behavior"), "TopDownMovementBehavior") + .AddParameter("expression", _("Angle (in degrees)")) + .AddParameter("expression", _("Tolerance (in degrees)")); aut.AddCondition("XVelocity", _("Speed on X axis"), diff --git a/Extensions/TopDownMovementBehavior/JsExtension.cpp b/Extensions/TopDownMovementBehavior/JsExtension.cpp index 19521dc455..cbf67f134f 100644 --- a/Extensions/TopDownMovementBehavior/JsExtension.cpp +++ b/Extensions/TopDownMovementBehavior/JsExtension.cpp @@ -68,7 +68,10 @@ class TopDownMovementBehaviorJsExtension : public gd::PlatformExtension { .SetGetter("getAngleOffset"); autConditions["TopDownMovementBehavior::AngleOffset"].SetFunctionName( "getAngleOffset"); + // Deprecated, prefer IsMovementAngleAround instead. autConditions["TopDownMovementBehavior::Angle"].SetFunctionName("getAngle"); + autConditions["TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround"] + .SetFunctionName("isMovementAngleAround"); autConditions["TopDownMovementBehavior::XVelocity"].SetFunctionName( "getXVelocity"); autConditions["TopDownMovementBehavior::YVelocity"].SetFunctionName( diff --git a/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.ts b/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.ts index bc1c9b89bc..1ca00cc4d7 100644 --- a/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.ts +++ b/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.ts @@ -217,6 +217,14 @@ namespace gdjs { return this._angle; } + isMovementAngleAround(degreeAngle: float, tolerance: float) { + return ( + Math.abs( + gdjs.evtTools.common.angleDifference(this._angle, degreeAngle) + ) <= tolerance + ); + } + setMovementAngleOffset(movementAngleOffset: float): void { this._movementAngleOffset = movementAngleOffset; }