From f2e10d3fb148c44ced020877804ca9f69d6ec7a0 Mon Sep 17 00:00:00 2001 From: Tuomo Untinen Date: Wed, 27 Mar 2024 20:04:55 +0200 Subject: [PATCH] #737 Fixes issues when randomizing AI realms. --- .../java/org/openRealmOfStars/game/Game.java | 5 +- .../game/state/AiRealmSetupView.java | 48 +++++++++++++++++-- .../player/race/SpaceRace.java | 5 ++ .../player/race/SpaceRaceFactory.java | 15 ++++++ 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openRealmOfStars/game/Game.java b/src/main/java/org/openRealmOfStars/game/Game.java index 1ac7626d8..88de03625 100644 --- a/src/main/java/org/openRealmOfStars/game/Game.java +++ b/src/main/java/org/openRealmOfStars/game/Game.java @@ -2914,7 +2914,7 @@ private void actionPerformedMenus(final ActionEvent arg0) { changeGameState(GameState.SAVE_GAME_NAME_VIEW); return; } - //TODO: Handle actions + aiRealmSetupView.handleActions(arg0); } if (gameState == GameState.REALM_SETUP_VIEW && realmSetupView != null) { if (arg0.getActionCommand() @@ -3019,7 +3019,7 @@ private void actionPerformedMenus(final ActionEvent arg0) { .equalsIgnoreCase(GameCommands.COMMAND_NEXT)) { SoundPlayer.playMenuSound(); if (!saveGameView.isContinueGame()) { - playerSetupView.getNamesToConfig(); + //playerSetupView.getNamesToConfig(); saveFilename = saveGameView.getFilename(); changeGameState(GameState.NEW_GAME); } else { @@ -3964,6 +3964,7 @@ public void actionPerformed(final ActionEvent arg0) { || gameState == GameState.GAME_END_VIEW || gameState == GameState.STORY_VIEW || gameState == GameState.REALM_SETUP_VIEW + || gameState == GameState.AI_REALM_SETUP_VIEW || gameState == GameState.END_STORY_VIEW) { actionPerformedMenus(arg0); } diff --git a/src/main/java/org/openRealmOfStars/game/state/AiRealmSetupView.java b/src/main/java/org/openRealmOfStars/game/state/AiRealmSetupView.java index eda7ba457..725d18b7d 100644 --- a/src/main/java/org/openRealmOfStars/game/state/AiRealmSetupView.java +++ b/src/main/java/org/openRealmOfStars/game/state/AiRealmSetupView.java @@ -46,6 +46,9 @@ import org.openRealmOfStars.player.government.GovernmentType; import org.openRealmOfStars.player.race.SpaceRace; import org.openRealmOfStars.player.race.SpaceRaceFactory; +import org.openRealmOfStars.player.scenario.StartingScenario; +import org.openRealmOfStars.player.scenario.StartingScenarioFactory; +import org.openRealmOfStars.player.scenario.StartingScenarioType; import org.openRealmOfStars.player.ship.generator.ShipGenerator; import org.openRealmOfStars.starMap.Coordinate; import org.openRealmOfStars.starMap.GalaxyConfig; @@ -97,6 +100,10 @@ public class AiRealmSetupView extends BlackPanel { */ private SpaceComboBox comboMaximumElderRace; + /** + * Generated realms based on settings. + */ + private boolean generated; /** * Constructor for AI Realm setup View * @param config Galaxy Configuration @@ -109,6 +116,7 @@ public AiRealmSetupView(final GalaxyConfig config, } else { this.config = config; } + generated = false; Planet planet = new Planet(new Coordinate(1, 1), "AI Realm Setup Planet", 1, false); planet.setPlanetType(PlanetTypes.getRandomPlanetType(true, true, true)); @@ -287,11 +295,13 @@ private InfoPanel createRealmSetupPanel(final ActionListener listener) { utopiaStart.setSelected(true); info.add(utopiaStart); info.add(Box.createRigidArea(new Dimension(5, 5))); - SpaceButton btn = new SpaceButton("Edit details", + // TODO: Add this when GalaxyConfig allows adding random spacerace, + // governments and so on. + /*SpaceButton btn = new SpaceButton("Edit details", GameCommands.COMMAND_REALM_DETAILS); btn.setAlignmentX(CENTER_ALIGNMENT); btn.addActionListener(listener); - info.add(btn); + info.add(btn);*/ info.add(Box.createRigidArea(new Dimension(5, 5))); return info; } @@ -312,7 +322,7 @@ public void generateRealms() { } int countElder = 0; ArrayList availableRaces = new ArrayList<>(); - for (String name : SpaceRaceFactory.getNames()) { + for (String name : SpaceRaceFactory.getIds()) { availableRaces.add(SpaceRaceFactory.createOne(name)); } availableRaces.remove(config.getRace(0)); @@ -320,12 +330,36 @@ public void generateRealms() { for (GovernmentType government : GovernmentType.values()) { availableGovs.add(government); } - availableGovs.remove(config.getPlayerGovernment(0)); + if (uniqueGovernment.isSelected()) { + availableGovs.remove(config.getPlayerGovernment(0)); + } ArrayList availableColors = new ArrayList<>(); for (PlayerColor color : PlayerColor.values()) { availableColors.add(color); } availableColors.remove(config.getPlayerColor(0)); + ArrayList availableScenario = new ArrayList<>(); + for (StartingScenario scenario : StartingScenarioFactory.getValues()) { + if (scenario.getType() == StartingScenarioType.REGULAR) { + if (scenario.getId().equals("EARTH") && startEarth.isSelected()) { + availableScenario.add(scenario); + continue; + } + if (!scenario.getId().equals("EARTH")) { + availableScenario.add(scenario); + continue; + } + } + if (scenario.getType() == StartingScenarioType.NO_HOME + && noHomeStart.isSelected()) { + availableScenario.add(scenario); + } + if (scenario.getType() == StartingScenarioType.UTOPIA_WORLD + && utopiaStart.isSelected()) { + availableScenario.add(scenario); + } + } + for (int i = 1; i < config.getMaxPlayers(); i++) { if (countElder < elders) { countElder++; @@ -360,8 +394,14 @@ public void generateRealms() { * @param arg0 The event */ public void handleActions(final ActionEvent arg0) { + if (arg0.getActionCommand().equals(GameCommands.COMMAND_ANIMATION_TIMER) + && !generated) { + generateRealms(); + generated = true; + } if (arg0.getActionCommand().equals(GameCommands.COMMAND_GALAXY_SETUP)) { SoundPlayer.playMenuSound(); + generateRealms(); } } } diff --git a/src/main/java/org/openRealmOfStars/player/race/SpaceRace.java b/src/main/java/org/openRealmOfStars/player/race/SpaceRace.java index 656acee59..5ce772f59 100644 --- a/src/main/java/org/openRealmOfStars/player/race/SpaceRace.java +++ b/src/main/java/org/openRealmOfStars/player/race/SpaceRace.java @@ -892,4 +892,9 @@ public boolean isMonster() { public boolean isPirate() { return this.spaceRaceType == SpaceRaceType.SPACE_PIRATE; } + + @Override + public String toString() { + return getName(); + } } diff --git a/src/main/java/org/openRealmOfStars/player/race/SpaceRaceFactory.java b/src/main/java/org/openRealmOfStars/player/race/SpaceRaceFactory.java index 1df134ec4..bf54dcacb 100644 --- a/src/main/java/org/openRealmOfStars/player/race/SpaceRaceFactory.java +++ b/src/main/java/org/openRealmOfStars/player/race/SpaceRaceFactory.java @@ -87,6 +87,21 @@ public static String[] getNames() { return names.toArray(new String[names.size()]); } + /** + * Get All Space race ids in array. This will filter out pseudo races. + * @return Space race ids array + */ + public static String[] getIds() { + SpaceRace[] races = SINGLETON.getAll(); + ArrayList names = new ArrayList<>(); + for (SpaceRace race : races) { + if (race.getSpaceRaceType() == SpaceRaceType.REGULAR) { + names.add(race.getId()); + } + } + return names.toArray(new String[names.size()]); + } + /** * Get random living race. * @return Living SpaceRace