Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
                }
            }
        }