public void Update(float elapsed, ComFigureController controller) { if (Finished) { return; } _timer.Update(elapsed); }
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)); } }
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); }