示例#1
0
 public void Repair()
 {
     if (isBroken && room_State != Room_State.Repairing)
     {
         room_State = Room_State.Repairing;
     }
 }
        private void ShipBuildButton_Click(object sender, EventArgs e)
        {
            BuildStateShipUI componentCanvas = new BuildStateShipUI(_content);

            _activeCanvas           = componentCanvas;
            _placementType          = Placement_Type.None;
            _temporaryRoom          = null;
            _temporaryComponent     = null;
            _drawTemporaryComponent = false;
            _tabState = Tab_State.Ship;
            roomState = Room_State.None;
            SetActiveButton(ControlConstants.BUILDMODE_SHIP.Text);
        }
        private void RoomButton_Click(object sender, EventArgs e)
        {
            BuildStateRoomsUI componentCanvas = new BuildStateRoomsUI(_content);

            componentCanvas.InitializeButton(DeleteRoomButton_Click, ControlConstants.DELETE_ROOM.Text);
            componentCanvas.InitializeButton(CreateRoomButton_Click, ControlConstants.CREATE_ROOM.Text);
            _activeCanvas           = componentCanvas;
            _placementType          = Placement_Type.None;
            _temporaryRoom          = null;
            _temporaryComponent     = null;
            _drawTemporaryComponent = false;
            _tabState = Tab_State.Room;
            roomState = Room_State.None;
            SetActiveButton(ControlConstants.BUILDMODE_ROOM.Text);
        }
 private void CreateRoomButton_Click(object sender, EventArgs e)
 {
     roomState = Room_State.Room;
 }
        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);

            Ship.Update(gameTime);
            _metalAmount.Text = Ship.Material.ToString();

            switch (_tabState)
            {
            case Tab_State.None:
            {
                break;
            }

            case Tab_State.Component:
            {
                switch (_placementType)
                {
                case Placement_Type.None:
                {
                    break;
                }

                case Placement_Type.Battery:
                case Placement_Type.Storage:
                case Placement_Type.Generator:
                // Drops through to Weapon
                case Placement_Type.Weapon:
                {
                    _tooltip.Show = false;
                    if (mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.InteriorContains(tileUnderMouse))
                            {
                                if (Component.RoomTypeMatches(_placementType, room.RoomType) || room.RoomType == Room.Room_Type.None)
                                {
                                    _tooltip.Show = true;
                                    _tooltip.SetText("Cost: " + Component.GetBaseValue(_placementType));
                                }
                            }
                        }
                    }
                    if (mousePressed && mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.Contains(tileUnderMouse))
                            {
                                Component found = null;
                                foreach (Component c in room.GetComponents())
                                {
                                    if (c.X == tileX && c.Y == tileY)
                                    {
                                        found = c;
                                        break;
                                    }
                                }
                                if (found == null)
                                {
                                    if (Component.RoomTypeMatches(_placementType, room.RoomType) || room.RoomType == Room.Room_Type.None)
                                    {
                                        switch (_placementType)
                                        {
                                        case Placement_Type.Storage:
                                        {
                                            _temporaryComponent = new MaterialStorageComponent(tileUnderMouse.X, tileUnderMouse.Y, ComponentConstants.COMPONENT_MATERIALSTORAGE_COLOR);
                                            Ship.LoadComponentTexture(_temporaryComponent);
                                            _drawTemporaryComponent = true;
                                            _placementType++;
                                            break;
                                        }

                                        case Placement_Type.Generator:
                                        {
                                            _temporaryComponent = new PowerGenerationComponent(tileUnderMouse.X, tileUnderMouse.Y, ComponentConstants.COMPONENT_POWERGENERATOR_COLOR);
                                            Ship.LoadComponentTexture(_temporaryComponent);
                                            _drawTemporaryComponent = true;
                                            _placementType++;
                                            break;
                                        }

                                        case Placement_Type.Weapon:
                                        {
                                            _temporaryComponent = new WeaponComponent(tileUnderMouse.X, tileUnderMouse.Y, ComponentConstants.COMPONENT_WEAPON_COLOR);
                                            Ship.LoadComponentTexture(_temporaryComponent);
                                            _drawTemporaryComponent = true;
                                            _placementType++;
                                            break;
                                        }

                                        case Placement_Type.Battery:
                                        {
                                            _temporaryComponent = new PowerStorageComponent(tileUnderMouse.X, tileUnderMouse.Y, ComponentConstants.COMPONENT_POWERSTORAGE_COLOR);
                                            Ship.LoadComponentTexture(_temporaryComponent);
                                            _drawTemporaryComponent = true;
                                            _placementType++;
                                            break;
                                        }

                                        default:
                                        {
                                            throw new NotImplementedException("That component type doesn't exist!");
                                        }
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }
                    break;
                }

                case Placement_Type.DeleteComponent:
                {
                    _tooltip.Show = false;
                    if (mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.InteriorContains(tileUnderMouse))
                            {
                                foreach (Component c in room.GetComponents())
                                {
                                    if (c.X == tileX && c.Y == tileY && c.ComponentType != Component.Component_Type.Structure)
                                    {
                                        _tooltip.Show = true;
                                        _tooltip.SetText("Refund: " + Component.GetBaseValue(c.ComponentType) / 2);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (mousePressed && mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.Contains(tileUnderMouse))
                            {
                                foreach (Component c in room.GetComponents())
                                {
                                    if (c.X == tileX && c.Y == tileY && c.ComponentType != Component.Component_Type.Structure)
                                    {
                                        Ship.Material += Component.GetBaseValue(c.ComponentType) / 2;
                                        room.RemoveComponent(c);
                                        _tooltip.Show = false;
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                    }
                    break;
                }

                case Placement_Type.PlacingBattery:
                case Placement_Type.PlacingStorage:
                case Placement_Type.PlacingGenerator:
                // Drops through to PlacingWeapon
                case Placement_Type.PlacingWeapon:
                {
                    if (mousePressed && mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.Contains(_temporaryComponent.TilePosition) && !room.InteriorContains(tileUnderMouse))
                            {
                                _drawTemporaryComponent = false;
                                _tooltip.Show           = false;
                            }
                            if (room.Contains(tileUnderMouse) && room.Contains(_temporaryComponent.TilePosition))
                            {
                                Component found = null;
                                foreach (Component c in room.GetComponents())
                                {
                                    if (c.TilePosition == tileUnderMouse)
                                    {
                                        found = c;
                                        break;
                                    }
                                }
                                // Another component isn't under the mouse already
                                if (found == null)
                                {
                                    _temporaryComponent.TilePosition = tileUnderMouse;
                                    if (Ship.Material - Component.GetBaseValue(_placementType) >= 0)
                                    {
                                        Ship.Material -= Component.GetBaseValue(_placementType);
                                        Ship.AddComponent(_temporaryComponent);
                                        _temporaryComponent     = null;
                                        _drawTemporaryComponent = false;
                                        _tooltip.Show           = false;
                                        _placementType--;
                                    }
                                }
                                break;
                            }
                        }
                    }
                    else if (mousePressed && !mouseOnTile)
                    {
                        _drawTemporaryComponent = false;
                        _tooltip.Show           = false;
                    }
                    else if (!mousePressed)
                    {
                        if (Ship.Material - Component.GetBaseValue(_placementType) >= 0)
                        {
                            if (mouseOnTile && (tileUnderMouse == _temporaryComponent.TilePosition))
                            {
                                Ship.Material -= Component.GetBaseValue(_placementType);
                                Ship.AddComponent(_temporaryComponent);
                            }
                            else
                            {
                                foreach (Room room in Ship.Rooms)
                                {
                                    if (room.InteriorContains(tileUnderMouse) && room.InteriorContains(_temporaryComponent.TilePosition))
                                    {
                                        Ship.Material -= Component.GetBaseValue(_placementType);
                                        Ship.AddComponent(_temporaryComponent);
                                    }
                                }
                            }
                        }
                        _temporaryComponent     = null;
                        _drawTemporaryComponent = false;
                        _tooltip.Show           = false;

                        _placementType--;
                    }
                    break;
                }
                }
                break;
            }

            case Tab_State.Room:
            {
                switch (roomState)
                {
                case Room_State.None:
                    break;

                case Room_State.Room:
                {
                    if (mousePressed)
                    {
                        bool beginPlacement = false;
                        bool foundRoom      = false;
                        if (mouseOnTile)
                        {
                            foreach (Room room in Ship.Rooms)
                            {
                                if (room.Contains(tileUnderMouse))
                                {
                                    foundRoom = true;
                                    Component found = null;
                                    foreach (Component c in room.GetComponents())
                                    {
                                        if (c.TilePosition == tileUnderMouse)
                                        {
                                            found = c;
                                            break;
                                        }
                                    }
                                    if (found != null && found.ComponentType == Component.Component_Type.Structure)
                                    {
                                        beginPlacement = true;
                                    }
                                }
                            }
                            if (foundRoom == false)
                            {
                                beginPlacement = true;
                            }
                            if (beginPlacement)
                            {
                                _temporaryRoomStart = tileUnderMouse;
                                _temporaryRoom      = new Room(Ship, Ship.Grid, tileUnderMouse, tileUnderMouse, Room.Room_Type.None);
                                foreach (Component component in _temporaryRoom.GetComponents())
                                {
                                    Ship.LoadComponentTexture(component);
                                }
                                roomState = Room_State.PlacingRoom;
                            }
                        }
                    }
                    break;
                }

                case Room_State.PlacingRoom:
                {
                    if (mousePressed && mouseOnTile)
                    {
                        var   minX = Math.Min(tileX, _temporaryRoomStart.X);
                        var   minY = Math.Min(tileY, _temporaryRoomStart.Y);
                        var   maxX = Math.Max(tileX, _temporaryRoomStart.X);
                        var   maxY = Math.Max(tileY, _temporaryRoomStart.Y);
                        Point p1   = new Point(minX, minY);
                        Point p2   = new Point(maxX, maxY);

                        _temporaryRoom = new Room(Ship, Ship.Grid, p1, p2, Room.Room_Type.None);
                        foreach (Component component in _temporaryRoom.GetComponents())
                        {
                            Ship.LoadComponentTexture(component);
                        }
                        _tooltip.Show = true;
                        _tooltip.SetText("Cost: " + _temporaryRoom.GetCost().ToString());
                    }
                    else if (!mousePressed && mouseOnTile)
                    {
                        if (Ship.Material - _temporaryRoom.GetCost() >= 0)
                        {
                            // Released mouse, finalize room
                            Ship.Material -= _temporaryRoom.GetCost();
                            Ship.AddRoom(_temporaryRoom);
                        }
                        roomState      = Room_State.Room;
                        _temporaryRoom = null;
                        _tooltip.Show  = false;
                    }
                    break;
                }

                case Room_State.DeleteRoom:
                {
                    _tooltip.Show = false;
                    if (mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.InteriorContains(tileUnderMouse))
                            {
                                _tooltip.Show = true;
                                _tooltip.SetText("Refund: " + room.GetCost() / 2);
                                break;
                            }
                        }
                    }
                    if (mousePressed && mouseOnTile)
                    {
                        foreach (Room room in Ship.Rooms)
                        {
                            if (room.InteriorContains(tileUnderMouse))
                            {
                                Ship.Material += room.GetCost() / 2;
                                Ship.RemoveRoom(room);
                                _tooltip.Show = false;
                                break;
                            }
                        }
                    }
                    break;
                }

                default:
                    break;
                }
                break;
            }

            case Tab_State.Ship:
            {
                if (mousePressed && mouseOnTile)
                {
                    Room room = Ship.GetRoom(tileUnderMouse, true);
                    ((BuildStateShipUI)_activeCanvas).SelectedRoom = room;
                }
                break;
            }

            default:
            {
                throw new NotImplementedException();
            }
            }


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

            if (_activeCanvas != null)
            {
                _activeCanvas.Update(gameTime);
            }

            if (Ship.IsValidShip())
            {
                _combatModeButton.IsActive = true;
            }
            else
            {
                _combatModeButton.IsActive = false;
            }
        }
示例#6
0
        public void Update(GameTime gameTime)
        {
            _millisPassed  += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            _timeSinceShot += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            if (_timeSinceShot > (1000f / ShotsPerSecond()))
            {
                CanShoot = true;
            }

            if (roomFlashingFrames <= 0)
            {
                roomFlashingFrames = ControlConstants.COMBATMODE_ROOMFLASHINGFRAMES;
                if (roomFlashingState == Room_Flashing_State.Bright)
                {
                    roomFlashingState = Room_Flashing_State.Dim;
                }
                else if (roomFlashingState == Room_Flashing_State.Dim)
                {
                    roomFlashingState = Room_Flashing_State.Bright;
                }
            }
            roomFlashingFrames--;
            switch (room_State)
            {
            case (Room_State.None):
            {
                break;
            }

            case (Room_State.Charging):
            {
                break;
            }

            case (Room_State.Repairing):
            {
                roomHealth += 1;
                if (roomHealth >= maxRoomHealth)
                {
                    isBroken   = false;
                    room_State = Room_State.None;
                }
                break;
            }
            }

            switch (RoomType)
            {
            case (Room_Type.None):
            {
                break;
            }

            case (Room_Type.Weapon):
            {
                break;
            }

            case (Room_Type.Power_Generation):
            {
                if (_millisPassed > ShipConstants.TICK_INTERVAL && !isBroken)
                {
                    Ship.Power += PowerGenerationPerSecond() * (ShipConstants.TICK_INTERVAL / 1000f);
                }
                break;
            }

            case (Room_Type.Power_Storage):
            {
                break;
            }

            case (Room_Type.Material_Storage):
            {
                break;
            }
            }
            if (_millisPassed > ShipConstants.TICK_INTERVAL)
            {
                _millisPassed -= ShipConstants.TICK_INTERVAL;
            }
        }