/// <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())));
 }
Beispiel #2
0
 /// <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));
        }