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; } }
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; } }