public override void OnFrame(Entity entity) { pathfindingState.SetNewTarget(targetWaypoint.GetState <PositionState>().Position); if (Vector3.Distance(entity.GetState <PositionState>().Position, pathfindingState.GetTargetPosition().GetValueOrDefault()) < pathfindingState.GetStoppingDistance() + PositionTolerance) { pathfindingState = entity.GetState <PathfindingState>(); pathfindingState.ClearTarget(); ActionStatus = ActionStatus.Succeeded; } //TODO: Add timeout => Failure. }
public override void OnFrame(Entity entity) { if (!destinationReached && Vector3.Distance(entity.GetState <PositionState>().Position, pathfindingState.GetTargetPosition().GetValueOrDefault()) <= PositionTolerance) { pathfindingState = entity.GetState <PathfindingState>(); destinationReached = true; } if (destinationReached && !rotationStarted) { rotationStarted = true; if (!pathfindingState.GetTargetRotation().HasValue) { RotationFinished(); } else { pathfindingState.ClearPosition(); var rotationTime = GetRotationTime(entity.GameObject.transform.rotation.eulerAngles.y, pathfindingState.GetTargetRotation().Value); entity.GameObject.transform.DORotate(new Vector3(0, pathfindingState.GetTargetRotation().Value, 0), rotationTime).OnComplete(RotationFinished); } } //TODO: Add timeout => Failure. }