/// <summary>Updates stuck detector.</summary> private void UpdateStuckDetector(ActionSet actionSet) { if (!TrackTimeSinceLastNode) { return; // Do nothing if TrackTimeSinceLastNode is set to false. } actionSet.AddAction(TimeSinceLastNode.SetVariable(new V_TotalTimeElapsed())); actionSet.AddAction(DistanceToNextNode.SetVariable(Element.Part <V_DistanceBetween>(Element.Part <V_PositionOf>(new V_EventPlayer()), CurrentPositionWithDestination()))); }
/// <summary>Updates stuck detector.</summary> private void UpdateStuckDetector(ActionSet actionSet, Element player) { if (!TrackTimeSinceLastNode) { return; // Do nothing if TrackTimeSinceLastNode is set to false. } actionSet.AddAction(TimeSinceLastNode.SetVariable(Part("Total Time Elapsed"), targetPlayer: player)); actionSet.AddAction(DistanceToNextNode.SetVariable(DistanceBetween(PositionOf(player), CurrentPositionWithDestination(player)), targetPlayer: player)); }
/// <summary>Returns true if the player takes longer than expected to reach the next node.</summary> public Element IsPathfindingStuck(Element player, Element scalar) { Element leniency = 2; Element defaultSpeed = 5.5; Element nodeDistance = DistanceToNextNode.Get(player); Element timeSinceLastNode = new V_TotalTimeElapsed() - TimeSinceLastNode.Get(player); Element isStuck = new V_Compare( nodeDistance - ((defaultSpeed * scalar * timeSinceLastNode) / leniency), Operators.LessThanOrEqual, new V_Number(0) ); return(Element.Part <V_And>(IsPathfinding(player), isStuck)); }