示例#1
0
 public void Update(float elapsed, ComFigureController controller)
 {
     if (Finished)
     {
         return;
     }
     _timer.Update(elapsed);
 }
示例#2
0
        public void Update(float elapsed, ComFigureController controller)
        {
            if (Finished)
            {
                return;
            }

            var current = controller.GetTilePosition();

            if (_wayPoints == null)
            {
                _wayPoints          = new Queue <PlaceNode>(controller.NodeMap.FindWayTo(current, _toReachNode));
                _currentNodeToReach = _wayPoints.Dequeue();
            }

            var toReachVector = controller.Level.GetWorldFromTilePositionCentered(_currentNodeToReach.TilePosition);
            var distance      = toReachVector - controller.Figure.Position;
            var moveStep      = controller.Figure.Speed * elapsed;

            if (current == _currentNodeToReach.TilePosition && distance.LengthSquared() < moveStep * moveStep)
            {
                ((FigureImp)controller.Figure).Position = toReachVector;
                controller.SetMoveDirectionTo(Vector2.Zero);

                if (_wayPoints.Count == 0)
                {
                    controller.SetMoveDirectionTo(Vector2.Zero);
                    Finished = true;
                }
                else
                {
                    _currentNodeToReach = _wayPoints.Dequeue();
                }
            }

            if (_currentNodeToReach.TilePosition.X < current.X)
            {
                controller.SetMoveDirectionTo(-Vector2.UnitX);
            }
            else if (_currentNodeToReach.TilePosition.X > current.X)
            {
                controller.SetMoveDirectionTo(Vector2.UnitX);
            }
            else if (_currentNodeToReach.TilePosition.Y < current.Y)
            {
                controller.SetMoveDirectionTo(-Vector2.UnitY);
            }
            else if (_currentNodeToReach.TilePosition.Y > current.Y)
            {
                controller.SetMoveDirectionTo(Vector2.UnitY);
            }
            else if (distance.LengthSquared() > moveStep * moveStep)
            {
                controller.SetMoveDirectionTo(Vector2.Normalize(distance));
            }
        }
示例#3
0
        public void Update(float elapsed, ComFigureController controller)
        {
            if (Finished)
            {
                return;
            }

            controller.ActionDone = true;
            Finished = true;
        }
        private FigureImp CreateComputerFigure(LevelImp level)
        {
            var comFigureController = new ComFigureController(level);
            var figure = new FigureImp(Id)
            {
                FigureController = comFigureController
            };

            comFigureController.Figure = figure;
            return(figure);
        }