diff --git a/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs b/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs index 3bb9530e8f57182a04d9ee10c2bda9ea6c400dd2..c6cf22fbd5eb6486021c5e2b2368d08dbe4037b3 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs @@ -131,9 +131,7 @@ namespace Controller // updates the unit's position to each node in the path (node by node) foreach (Node node in path) { - unit.setPosition(node.getPositionX(), node.getPositionY()); - Game.Instance.Tick(); - Thread.Sleep(200); + animateUnitPosition(unit, node); GameState.setMenuOpen(true); } @@ -141,6 +139,46 @@ namespace Controller GameState.setBeforeMove(false); } + // TODO: move this function to animation class + // animates unit to move to node + private static void animateUnitPosition(Unit unit, Node node) + { + int nodePixelX = node.getPositionX() * 32; + int nodePixelY = node.getPositionY() * 32; + + while (unit.getPixelCoordinates().X != nodePixelX) + { + if (unit.getPixelCoordinates().X < nodePixelX) + { + unit.setPixelCoordinates(new Vector2(unit.getPixelCoordinates().X + 4, unit.getPixelCoordinates().Y)); + Game.Instance.Tick(); + Thread.Sleep(40); + } + else + { + unit.setPixelCoordinates(new Vector2(unit.getPixelCoordinates().X - 4, unit.getPixelCoordinates().Y)); + Game.Instance.Tick(); + Thread.Sleep(40); + } + } + + while (unit.getPixelCoordinates().Y != nodePixelY) + { + if (unit.getPixelCoordinates().Y < nodePixelY) + { + unit.setPixelCoordinates(new Vector2(unit.getPixelCoordinates().X, unit.getPixelCoordinates().Y + 4)); + Game.Instance.Tick(); + Thread.Sleep(40); + } + else + { + unit.setPixelCoordinates(new Vector2(unit.getPixelCoordinates().X, unit.getPixelCoordinates().Y - 4)); + Game.Instance.Tick(); + Thread.Sleep(40); + } + } + } + // returns a menu button that was clicked; if no menu button was clicked, returns null private static MenuButton getMenuButtonClicked(Vector2 mouseCoordinates) {