Skip to content

Commit

Permalink
#700 Adds starting scenario for arid planet but extra technology.
Browse files Browse the repository at this point in the history
  • Loading branch information
tuomount committed Feb 2, 2024
1 parent 162f8b9 commit 0747352
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 24 deletions.
53 changes: 43 additions & 10 deletions src/main/java/org/openRealmOfStars/player/PlayerInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -290,17 +290,19 @@ public class PlayerInfo {
*/
public PlayerInfo(final SpaceRace race, final int maxPlayers,
final int index) {
this(race, maxPlayers, index, -1);
this(race, maxPlayers, index, -1, StartingScenario.TEMPERATE_HUMID_SIZE12);
}
/**
* Constructor player info. This can be used for game playing.
* @param race Space Race for player
* @param maxPlayers Maximum number of players when game is created
* @param index Player's index in list when creating the player
* @param boardPlayerIndex Board player index
* @param scenario Starting scenario
*/
public PlayerInfo(final SpaceRace race, final int maxPlayers,
final int index, final int boardPlayerIndex) {
final int index, final int boardPlayerIndex,
final StartingScenario scenario) {
setBackgroundStory("");
setTechList(new TechList(race));
strategy = WinningStrategy.GENERIC;
Expand All @@ -316,39 +318,61 @@ public PlayerInfo(final SpaceRace race, final int maxPlayers,
color = PlayerColor.getByIndex(index);
aiDifficulty = AiDifficulty.NORMAL;
setRandomEventOccured(null);
setStartingScenario(StartingScenario.TEMPERATE_HUMID_SIZE12);
setStartingScenario(scenario);
setHuman(false);
setBoard(false);
missions = new MissionList();
setRace(race);
diplomacy = new Diplomacy(maxPlayers, index, boardPlayerIndex);
espionage = new Espionage(maxPlayers);
attitude = Attitude.getRandom();
String[] extraTech = null;
if (getStartingScenario() == StartingScenario.TEMPERATE_ARID_SIZE12) {
extraTech = new String[2];
extraTech[0] = "randomElectronics";
extraTech[1] = "randomPropulsion";
}
setFakeMilitarySize(100);
// This is the old way of government
setGovernment(GovernmentType.AI);
setWarFatigue(0);
if (getRace().hasTrait(TraitIds.ZERO_GRAVITY_BEING)) {
addZeroGravityTechs();
addZeroGravityTechs(extraTech);
} else {
if (getRace() == SpaceRace.SPACE_MONSTERS) {
addSpaceMonsterTechs();
} else if (getRace() == SpaceRace.SPACE_PIRATE) {
addSpacePirateTechs();
} else {
addDefaultTechs();
addDefaultTechs(extraTech);
}
}
}

/**
* Add techs by their names
* Special names are randomCombat, randomDefense, randomHull,
* randomImprovement, randomPropulsion, randomElectronics
* @param techNames Tech names
*/
private void addTechs(final String... techNames) {
for (var techName : techNames) {
var tech = TechFactory.findTech(techName);
techList.addTech(tech);
if (techName.equals("randomCombat")) {
addRandomTechs(1, TechType.Combat, 1);
} else if (techName.equals("randomDefense")) {
addRandomTechs(1, TechType.Defense, 1);
} else if (techName.equals("randomHull")) {
addRandomTechs(1, TechType.Hulls, 1);
} else if (techName.equals("randomImprovement")) {
addRandomTechs(1, TechType.Improvements, 1);
} else if (techName.equals("randomPropulsion")) {
addRandomTechs(1, TechType.Propulsion, 1);
} else if (techName.equals("randomElectronics")) {
addRandomTechs(1, TechType.Electrics, 1);
} else {
var tech = TechFactory.findTech(techName);
techList.addTech(tech);
}
}
}

Expand Down Expand Up @@ -395,8 +419,9 @@ private void designInitialShips() {

/**
* Default techs and ship design.
* @param extraTech Extra tech based on starting scenario.
*/
private void addDefaultTechs() {
private void addDefaultTechs(final String[] extraTech) {
final String[] techs1 = {
"Colony", "Scout Mk1", "Ion drive Mk1", "Fission source Mk1",
};
Expand All @@ -408,20 +433,28 @@ private void addDefaultTechs() {
} else {
addTechs(techs2);
}
if (extraTech != null) {
addTechs(extraTech);
}

addRandomTechs(1, TechType.Combat, 1);
addRandomTechs(1, TechType.Defense, 1);

designInitialShips();
}

/** Add Zero Gravity techs and ship designs. */
private void addZeroGravityTechs() {
/** Add Zero Gravity techs and ship designs.
* @param extraTech Extra tech based on starting scenario.
*/
private void addZeroGravityTechs(final String[] extraTech) {
final String[] techs = {
"Railgun Mk1", "Shield Mk1", "Colony", "Scout Mk1", "Minor orbital",
"Nuclear drive Mk1", "Fission source Mk1",
};
addTechs(techs);
if (extraTech != null) {
addTechs(extraTech);
}

designInitialShips();
}
Expand Down
15 changes: 7 additions & 8 deletions src/main/java/org/openRealmOfStars/player/PlayerList.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,18 +102,17 @@ public static PlayerList createPlayerList(final GalaxyConfig galaxyConfig) {
randomListOfColors.add(color);
}
for (int i = 0; i < galaxyConfig.getMaxPlayers(); i++) {
StartingScenario scenario = galaxyConfig.getStartingScenario(i);
if (scenario == StartingScenario.RANDOM) {
scenario = StartingScenario.pickRandom();
}
PlayerInfo info = new PlayerInfo(galaxyConfig.getRace(i),
maxPlayers, i, boardIndex);
maxPlayers, i, boardIndex, scenario);
info.setGovernment(galaxyConfig.getPlayerGovernment(i));
info.setEmpireName(galaxyConfig.getPlayerName(i));
info.setElderRealm(galaxyConfig.getPlayerElderRealm(i));
info.setAiDifficulty(galaxyConfig.getDifficulty(i));
info.setColor(galaxyConfig.getPlayerColor(i));
StartingScenario scenario = galaxyConfig.getStartingScenario(i);
if (scenario == StartingScenario.RANDOM) {
scenario = StartingScenario.pickRandom();
}
info.setStartingScenario(scenario);
randomListOfColors.remove(galaxyConfig.getPlayerColor(i));
if (i == 0 && !galaxyConfig.isAiOnly()) {
info.setHuman(true);
Expand All @@ -126,7 +125,7 @@ public static PlayerList createPlayerList(final GalaxyConfig galaxyConfig) {
if (galaxyConfig.getSpacePiratesLevel() > 0) {
int index = galaxyConfig.getMaxPlayers();
PlayerInfo info = new PlayerInfo(SpaceRace.SPACE_PIRATE, maxPlayers,
index, boardIndex);
index, boardIndex, StartingScenario.TEMPERATE_HUMID_SIZE12);
info.setBoard(true);
info.setGovernment(GovernmentType.SPACE_PIRATES);
info.setEmpireName("Space pirates");
Expand All @@ -153,7 +152,7 @@ public static PlayerList createPlayerList(final GalaxyConfig galaxyConfig) {
index++;
}
PlayerInfo info = new PlayerInfo(SpaceRace.SPACE_MONSTERS, maxPlayers,
index, boardIndex);
index, boardIndex, StartingScenario.TEMPERATE_HUMID_SIZE12);
info.setBoard(true);
info.setGovernment(GovernmentType.SPACE_PIRATES);
info.setEmpireName("Space monsters");
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/org/openRealmOfStars/player/StartingScenario.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ public enum StartingScenario {
/**
* Starting system is sol.
*/
EARTH;
EARTH,
/**
* Arid planet size 12, single extra technology for starters.
*/
TEMPERATE_ARID_SIZE12;

/**
* Get starting scenarion as an integer value.
Expand All @@ -50,6 +54,7 @@ public int getIndex() {
case RANDOM: return 0;
case TEMPERATE_HUMID_SIZE12: return 1;
case EARTH: return 2;
case TEMPERATE_ARID_SIZE12: return 3;
default: throw new IllegalArgumentException("Unknown starting scenario.");
}
}
Expand All @@ -64,6 +69,7 @@ public static StartingScenario getByIndex(final int index) {
case 0: return RANDOM;
case 1: return TEMPERATE_HUMID_SIZE12;
case 2: return EARTH;
case 3: return TEMPERATE_ARID_SIZE12;
default: throw new IllegalArgumentException("Unknown starting scenario.");
}
}
Expand All @@ -75,6 +81,7 @@ public String toString() {
case RANDOM: return "Random starting scenario";
case TEMPERATE_HUMID_SIZE12: return "Temperate and humid planet";
case EARTH: return "Start from Earth";
case TEMPERATE_ARID_SIZE12: return "Temperate and arid, with extra tech";
}
}

Expand All @@ -89,6 +96,8 @@ public String getDescription() {
case TEMPERATE_HUMID_SIZE12: return "Temperate and humid planet with"
+ " ground size 12. World type is either Swamp or water planet.";
case EARTH: return "Realm starts at Earth and solar system is Sol.";
case TEMPERATE_ARID_SIZE12: return "Temperate and arid planet with"
+ " ground size 12. World type is desert. Start extra technology.";
}
}

Expand Down
16 changes: 11 additions & 5 deletions src/main/java/org/openRealmOfStars/starMap/StarMapGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
import org.openRealmOfStars.starMap.planet.Planet;
import org.openRealmOfStars.starMap.planet.construction.BuildingFactory;
import org.openRealmOfStars.starMap.planet.construction.ConstructionFactory;
import org.openRealmOfStars.starMap.planet.enums.GravityType;
import org.openRealmOfStars.starMap.planet.enums.PlanetTypes;
import org.openRealmOfStars.starMap.planet.enums.PlanetaryEvent;
import org.openRealmOfStars.starMap.planet.enums.RadiationType;
Expand Down Expand Up @@ -806,10 +805,17 @@ private void createSolarSystem(final int sunx, final int suny,
.getPlayerInfoByIndex(playerIndex);
playerInfo.setElderRealm(config.getPlayerElderRealm(playerIndex));
planet.setRadiationLevel(RadiationType.NO_RADIATION);
planet.setGravityType(GravityType.NORMAL_GRAVITY);
planet.setTemperatureType(TemperatureType.TEMPERATE);
planet.setWaterLevel(WaterLevelType.HUMID);
planet.setGroundSize(12);
if (playerInfo.getStartingScenario()
== StartingScenario.TEMPERATE_ARID_SIZE12) {
planet.setTemperatureType(TemperatureType.TEMPERATE);
planet.setWaterLevel(WaterLevelType.ARID);
planet.setGroundSize(12);
} else {
planet.setTemperatureType(TemperatureType.TEMPERATE);
planet.setWaterLevel(WaterLevelType.HUMID);
planet.setGroundSize(12);
}
planet.generateGravityBasedOnSize();
planet.generateWorldType();
planet.setAmountMetalInGround(HOMEWORLD_METAL);
planet.setHomeWorldIndex(playerInfo.getRace().getIndex());
Expand Down

0 comments on commit 0747352

Please sign in to comment.