Exemplo n.º 1
0
        public override void Update(GameTime time)
        {
            // Don't run until player is created
            if (Player == null)
            {
                return;
            }

            // Don't do anything while transitioning
            if (transitionMs > 0)
            {
                transitionMs -= time.ElapsedGameTime.Milliseconds;
                return;
            }

            // ### Movement input
            if (ScreenManager.kbState.IsKeyDown(Keys.Right) && !ScreenManager.kbState.IsKeyDown(Keys.Left))
            {
                Player.doMove(Direction.Right);
            }
            else if (!ScreenManager.kbState.IsKeyDown(Keys.Right) && ScreenManager.kbState.IsKeyDown(Keys.Left))
            {
                Player.doMove(Direction.Left);
            }
            else
            {
                Player.doMove(Direction.Stopped);
            }

            // ### Jump/Duck input
            if (ScreenManager.kbState.IsKeyDown(Keys.Space))
            {
                Player.doJump();
            }
            else if (!ScreenManager.kbState.IsKeyDown(Keys.Space) && ScreenManager.kbState.IsKeyDown(Keys.Down) && !ScreenManager.kbState.IsKeyDown(Keys.Up))
            {
                Player.doDuck();
            }
            else if (!ScreenManager.kbState.IsKeyDown(Keys.Space) && !ScreenManager.kbState.IsKeyDown(Keys.Down) && ScreenManager.kbState.IsKeyDown(Keys.Up))
            {
                Player.doBlock();
            }
            else if (Player.State == EntityState.Crouching || Player.State == EntityState.Blocking)
            {
                Player.stand();
            }

            // ### Attack input
            if (ScreenManager.kbState.IsKeyDown(Keys.Q))
            {
                Player.doAttack(TileMap, EntityPart.Head);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.W))
            {
                Player.doAttack(TileMap, EntityPart.Body);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.E))
            {
                Player.doAttack(TileMap, EntityPart.Legs);
            }

            // ### Hotbat input
            if (ScreenManager.kbState.IsKeyDown(Keys.D1))
            {
                HotBar.select(0);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D2))
            {
                HotBar.select(1);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D3))
            {
                HotBar.select(2);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D4))
            {
                HotBar.select(3);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D5))
            {
                HotBar.select(4);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D6))
            {
                HotBar.select(5);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D7))
            {
                HotBar.select(6);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D8))
            {
                HotBar.select(7);
            }
            else if (ScreenManager.kbState.IsKeyDown(Keys.D9))
            {
                HotBar.select(8);
            }
            HotBar.update(time.ElapsedGameTime);

            // Interact with tile block
            if (ScreenManager.kbState.IsKeyDown(Keys.Enter) && ScreenManager.oldKBState.IsKeyUp(Keys.Enter))
            {
                Rectangle rect = Player.EBounds.Rect;
                TileMap.getPixel(rect.Center.X, rect.Center.Y).interact(this);
            }

            // Update tilemap
            TileMap.update(time.ElapsedGameTime);

            // ### Offset
            offset.X = (int)(Player.Location.X - getScreenManager().Width / 2);
            if (offset.X < 0)
            {
                offset.X = 0;
            }
            else if (offset.X + getScreenManager().Width > TileMap.getPixelWidth())
            {
                offset.X = (int)(TileMap.getPixelWidth() - getScreenManager().Width);
            }
            offset.X *= -1; // Invert

            offset.Y = (int)(Player.Location.Y - getScreenManager().Height / 2);
            if (offset.Y < 0)
            {
                offset.Y = 0;
            }
            else if (offset.Y + getScreenManager().Height > TileMap.getPixelHeight())
            {
                offset.Y = (int)(TileMap.getPixelHeight() - getScreenManager().Height);
            }
            offset.Y *= -1; // Invert

            oldKb = ScreenManager.kbState;
        }