public void push(Robot.Direction dir) { Dir = dir; switch (dir) { case Robot.Direction.Down: vel.Y = speed; vel.X = 0; break; case Robot.Direction.Up: vel.Y = -speed; vel.X = 0; break; case Robot.Direction.Right: vel.X = speed; vel.Y = 0; break; case Robot.Direction.Left: vel.X = -speed; vel.Y = 0; break; } Point tileToCheck = Robot.Adjacent(Center, dir); if (game.GameScreen.stage.PassableLayer[tileToCheck.X, tileToCheck.Y]) { moving = true; game.GameScreen.stage.PassableLayer[Stage.PosToTile(Center).X, Stage.PosToTile(Center).Y] = true; } }
public override void Update(GameTime t) { if (moving) { var p = Robot.Adjacent(Center, Dir); if (game.GameScreen.stage.PassableLayer[p.X, p.Y]) { pos += vel; } else { moving = false; stopping = true; } } else if (stopping) { stopDist += Math.Abs(vel.X) + Math.Abs(vel.Y); if (stopDist > Stage.TileSize / 2) { vel = Vector2.Zero; pos = Stage.TileToPos(Stage.PosToTile(Center)); stopping = false; moving = false; game.GameScreen.stage.PassableLayer[Stage.PosToTile(Center).X, Stage.PosToTile(Center).Y] = false; } else { pos += vel; } } }