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.
        }
Beispiel #2
0
        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.
        }