Пример #1
0
        public override void Update(GameTime gameTime)
        {
            if (SelectedRoom != null && (_oldSelectedRoom == null || SelectedRoom.RoomID != _oldSelectedRoom.RoomID))
            {
                _oldSelectedRoom = SelectedRoom;
                _roomInfo.Text   = SelectedRoom.GetInfo();
                _roomOutline.SetPosition(SelectedRoom.GetInteriorArea());
                _roomOutline.Color = new Color(SelectedRoom.GetColor(), ControlConstants.ROOM_INFO_BOX_ALPHA);
            }

            foreach (UI_Component ui_component in UI_Components)
            {
                ui_component.Update(gameTime);
            }
        }
Пример #2
0
        public override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                _game.ChangeState(new PauseState(_game, _graphicsDevice, _content, this));
            }

            int   x              = Mouse.GetState().X;
            int   y              = Mouse.GetState().Y;
            bool  mousePressed   = (Mouse.GetState().LeftButton == ButtonState.Pressed);
            bool  mouseOnTile    = Ship.Grid.PixelToTile(x, y, out int tileX, out int tileY);
            Point tileUnderMouse = new Point(tileX, tileY);

            _playerPowerBar.Value = ((float)Ship.Power / (float)Ship.maxPower);
            _playerPowerBar.SetText("Power: " + (int)Ship.Power + " / " + (int)Ship.maxPower);

            _tooltip.Show = false;
            switch (clicked_State)
            {
            case (Clicked_State.None):
            {
                break;
            }

            case (Clicked_State.SetAttack):
            {
                if (mouseOnTile)
                {
                    foreach (Room room in Ship.Rooms)
                    {
                        if (room.RoomType == Room.Room_Type.Weapon && room.InteriorContains(tileUnderMouse))
                        {
                            _tooltip.Show = true;
                            _tooltip.SetText("DPS: " + room.DamagePerSecond());
                        }
                    }
                }
                if (mousePressed & mouseOnTile)
                {
                    foreach (Room room in Ship.Rooms)
                    {
                        if (room.Contains(tileUnderMouse) & room.RoomType == Room.Room_Type.Weapon && !room.isBroken)
                        {
                            attackingRoom = room;
                            clicked_State = Clicked_State.Attacking;
                            _selectedRoomBox.SetPosition(room.GetInteriorArea());
                            _selectedRoomBox.Show = true;
                        }
                    }
                }
                break;
            }

            case (Clicked_State.Repair):
            {
                if (mousePressed & mouseOnTile)
                {
                    foreach (Room room in Ship.Rooms)
                    {
                        if (room.Contains(tileUnderMouse))
                        {
                            room.Repair();
                        }
                    }
                }
                break;
            }
            }

            _canvas.SetProgressButtonValue(ControlConstants.COMBATMODE_TARGETENEMYSHIP.Text, ((float)enemyAI.shipHealth / (float)enemyAI.maxShipHealth));
            _canvas.SetProgressButtonValue(ControlConstants.COMBATMODE_TARGETWEAPONS.Text, ((float)enemyAI.weaponHealth / (float)enemyAI.weaponMaxHealth));
            _canvas.SetProgressButtonValue(ControlConstants.COMBATMODE_TARGETSTORAGES.Text, ((float)enemyAI.materialStorageHealth / (float)enemyAI.materialMaxHealth));
            _canvas.SetProgressButtonValue(ControlConstants.COMBATMODE_TARGETPOWERGEN.Text, ((float)enemyAI.powerGeneratorHealth / (float)enemyAI.generatorMaxHealth));
            _canvas.SetProgressButtonValue(ControlConstants.COMBATMODE_TARGETPOWERSTORAGE.Text, ((float)enemyAI.powerStorageHealth / (float)enemyAI.powerStorageMaxHealth));


            foreach (var component in _uicomponents)
            {
                component.Update(gameTime);
            }

            enemyAI.Update(gameTime);

            foreach (var projectile in projectiles)
            {
                projectile.Update(gameTime);
                if (projectile.AtTarget == true)
                {
                    deadProjectiles.Add(projectile);
                }
            }
            foreach (var projectile in deadProjectiles)
            {
                projectiles.Remove(projectile);
            }
            foreach (Room room in Ship.Rooms)
            {
                if (_roomHealthBoxes.ContainsKey(room.RoomID))
                {
                    _roomHealthBoxes[room.RoomID].Color = new Color(ControlConstants.COMBATMODE_ROOMHEALTHCOLOR, room.GetHealthAlpha());
                }
                else
                {
                    UIBox toAdd = new UIBox(_pixelTexture);
                    toAdd.SetPosition(room.GetInteriorArea());
                    toAdd.Color = new Color(ControlConstants.COMBATMODE_ROOMHEALTHCOLOR, room.GetHealthAlpha());
                    _roomHealthBoxes.Add(room.RoomID, toAdd);
                }
            }

            Ship.Update(gameTime);
            if (Ship.CurrentHealth < 0)
            {
                LoseGame();
            }
            _playerHealthBar.Value = ((float)Ship.CurrentHealth / (float)Ship.MaxHealth);

            if (enemyAI.shipHealth <= 0)
            {
                BuildModeButton_Click(this, null);
            }
        }