Added golden ages!

This commit is contained in:
Yair Morgenstern 2017-12-13 21:24:51 +02:00
parent 3381cf84d4
commit 2d12f1fa80
6 changed files with 49 additions and 11 deletions

View file

@ -82,6 +82,7 @@ public class CityBuildings
if (gameBuilding.providesFreeBuilding != null && !builtBuildings.contains(gameBuilding.providesFreeBuilding)) if (gameBuilding.providesFreeBuilding != null && !builtBuildings.contains(gameBuilding.providesFreeBuilding))
builtBuildings.add(gameBuilding.providesFreeBuilding); builtBuildings.add(gameBuilding.providesFreeBuilding);
if (gameBuilding.freeTechs != 0) UnCivGame.Current.civInfo.tech.freeTechs += gameBuilding.freeTechs; if (gameBuilding.freeTechs != 0) UnCivGame.Current.civInfo.tech.freeTechs += gameBuilding.freeTechs;
if("EmpireEntersGoldenAge".equals(gameBuilding.unique)) CivilizationInfo.current().enterGoldenAge();
} }
inProgressBuildings.remove(currentBuilding); inProgressBuildings.remove(currentBuilding);
@ -168,7 +169,7 @@ public class CityBuildings
@Override @Override
public boolean evaluate(Building arg0) { return canBuild(arg0); } public boolean evaluate(Building arg0) { return canBuild(arg0); }
}) })
.select(new com.unciv.models.LinqCollection.Func<Building, String>() { .select(new LinqCollection.Func<Building, String>() {
@Override @Override
public String GetBy(Building arg0) { public String GetBy(Building arg0) {
return arg0.name; return arg0.name;

View file

@ -133,6 +133,7 @@ public class CityInfo {
FullStats statPercentBonuses = cityBuildings.getStatPercentBonuses(); FullStats statPercentBonuses = cityBuildings.getStatPercentBonuses();
if(isCapital() || isConnectedToCapital(RoadStatus.Railroad)) statPercentBonuses.production += 25; if(isCapital() || isConnectedToCapital(RoadStatus.Railroad)) statPercentBonuses.production += 25;
if(CivilizationInfo.current().isGoldenAge()) statPercentBonuses.production+=20;
stats.food*=1+statPercentBonuses.food/100; stats.food*=1+statPercentBonuses.food/100;
stats.gold*=1+statPercentBonuses.gold/100; stats.gold*=1+statPercentBonuses.gold/100;
stats.production*=1+statPercentBonuses.production/100; stats.production*=1+statPercentBonuses.production/100;
@ -145,9 +146,9 @@ public class CityInfo {
this.cityStats = stats; this.cityStats = stats;
} }
public float getCityHappiness(){ // needs to be a separate function because we need to know the global happiness state public int getCityHappiness(){ // needs to be a separate function because we need to know the global happiness state
// in order to determine how much food is produced in a city! // in order to determine how much food is produced in a city!
float happiness = -3 - population; // -3 happiness per city and -1 per population int happiness = -3 - population; // -3 happiness per city and -1 per population
return happiness + (int)cityBuildings.getStats().happiness; return happiness + (int)cityBuildings.getStats().happiness;
} }

View file

@ -22,6 +22,8 @@ public class CivilizationInfo {
public CivStats civStats = new CivStats(); public CivStats civStats = new CivStats();
public int baseHappiness = 15; public int baseHappiness = 15;
public int numberOfGoldenAges=0;
public int turnsLeftForCurrentGoldenAge=0;
public String civName = "Babylon"; public String civName = "Babylon";
public CivilizationTech tech = new CivilizationTech(); public CivilizationTech tech = new CivilizationTech();
@ -58,12 +60,20 @@ public class CivilizationInfo {
}); });
} }
public boolean isGoldenAge(){return turnsLeftForCurrentGoldenAge>0;}
public int happinessRequiredForNextGoldenAge(){
return (int) ((500+numberOfGoldenAges*250)*(1+cities.size()/100.0)); //https://forums.civfanatics.com/resources/complete-guide-to-happiness-vanilla.25584/
}
public void nextTurn() public void nextTurn()
{ {
notifications.clear(); notifications.clear();
CivStats nextTurnStats = getStatsForNextTurn(); CivStats nextTurnStats = getStatsForNextTurn();
civStats.add(nextTurnStats); civStats.add(nextTurnStats);
if(!isGoldenAge())
civStats.happiness += getHappinessForNextTurn();
if(cities.size() > 0) tech.nextTurn((int)nextTurnStats.science); if(cities.size() > 0) tech.nextTurn((int)nextTurnStats.science);
for (CityInfo city : cities) city.nextTurn(); for (CityInfo city : cities) city.nextTurn();
@ -71,7 +81,19 @@ public class CivilizationInfo {
for(TileInfo tile : tileMap.values()) tile.nextTurn(); for(TileInfo tile : tileMap.values()) tile.nextTurn();
for (CityInfo city : cities) city.updateCityStats(); for (CityInfo city : cities) city.updateCityStats();
turns += 1; turns++;
if(isGoldenAge()) turnsLeftForCurrentGoldenAge--;
if(civStats.happiness > happinessRequiredForNextGoldenAge()){
enterGoldenAge();
numberOfGoldenAges++;
}
}
public void enterGoldenAge(){
civStats.happiness-=happinessRequiredForNextGoldenAge();
turnsLeftForCurrentGoldenAge = 10;
if(getBuildingUniques().contains("GoldenAgeLengthIncrease")) turnsLeftForCurrentGoldenAge*=1.5;
} }
public CivStats getStatsForNextTurn() { public CivStats getStatsForNextTurn() {
@ -79,7 +101,7 @@ public class CivilizationInfo {
for (CityInfo city : cities) { for (CityInfo city : cities) {
statsForTurn.add(city.cityStats); statsForTurn.add(city.cityStats);
} }
statsForTurn.happiness = getHappinessForNextTurn(); statsForTurn.happiness=0;
return statsForTurn; return statsForTurn;
} }

View file

@ -41,9 +41,7 @@ public class CivilizationTech{
public void nextTurn(int scienceForNewTurn){ public void nextTurn(int scienceForNewTurn){
String CurrentTechnology = currentTechnology(); String CurrentTechnology = currentTechnology();
if (!techsInProgress.containsKey(CurrentTechnology)) techsInProgress.put(CurrentTechnology, researchOfTech(CurrentTechnology) + scienceForNewTurn);
techsInProgress.put(CurrentTechnology, 0);
techsInProgress.put(CurrentTechnology, techsInProgress.get(CurrentTechnology) + scienceForNewTurn);
if (techsInProgress.get(CurrentTechnology) >= getCurrentTechnology().cost) // We finished it! if (techsInProgress.get(CurrentTechnology) >= getCurrentTechnology().cost) // We finished it!
{ {
techsInProgress.remove(CurrentTechnology); techsInProgress.remove(CurrentTechnology);
@ -53,4 +51,9 @@ public class CivilizationTech{
} }
} }
public String getAmountResearchedText(){
if(currentTechnology()==null) return "";
return "("+researchOfTech(currentTechnology())+"/"+getCurrentTechnology().cost+")";
}
} }

View file

@ -86,9 +86,12 @@ public class TileInfo
if (stats.food < 2) stats.food = 2; if (stats.food < 2) stats.food = 2;
if (stats.production < 1) stats.production = 1; if (stats.production < 1) stats.production = 1;
} }
if (stats.production < 0) stats.production = 0; if (stats.production < 0) stats.production = 0;
if("Jungle".equals(terrainFeature) && city.getBuildingUniques().contains("JunglesProvideScience")) stats.science+=2; if("Jungle".equals(terrainFeature) && city.getBuildingUniques().contains("JunglesProvideScience")) stats.science+=2;
if(stats.gold!=0 && CivilizationInfo.current().isGoldenAge())
stats.gold++;
return stats; return stats;
} }

View file

@ -171,7 +171,7 @@ public class WorldScreen extends com.unciv.game.utils.CameraStageBaseScreen {
private void updateCivTable() { private void updateCivTable() {
CivTable.clear(); CivTable.clear();
CivTable.row().pad(20); CivTable.row().pad(15);
CivStats currentStats = game.civInfo.civStats; CivStats currentStats = game.civInfo.civStats;
TextButton CivilopediaButton = new TextButton("Menu",skin); TextButton CivilopediaButton = new TextButton("Menu",skin);
@ -193,8 +193,16 @@ public class WorldScreen extends com.unciv.game.utils.CameraStageBaseScreen {
CivTable.add(new Label("Gold: " + Math.round(currentStats.gold) CivTable.add(new Label("Gold: " + Math.round(currentStats.gold)
+ "(" +(nextTurnStats.gold >0?"+":"") + Math.round(nextTurnStats.gold) +")", skin)); + "(" +(nextTurnStats.gold >0?"+":"") + Math.round(nextTurnStats.gold) +")", skin));
CivTable.add(new Label("Science: +" + Math.round(nextTurnStats.science), skin)); Label scienceLabel = new Label("Science: +" + Math.round(nextTurnStats.science)
CivTable.add(new Label("Happiness: " + Math.round(nextTurnStats.happiness), skin)); +"\r\n"+game.civInfo.tech.getAmountResearchedText(), skin);
scienceLabel.setAlignment(Align.center);
CivTable.add(scienceLabel);
String happinessText = "Happiness: " + Math.round(game.civInfo.getHappinessForNextTurn());
if(game.civInfo.isGoldenAge()) happinessText+="\r\n GOLDEN AGE ("+game.civInfo.turnsLeftForCurrentGoldenAge+")";
else happinessText+= "\r\n ("+(int)game.civInfo.civStats.happiness+"/"+game.civInfo.happinessRequiredForNextGoldenAge()+")";
Label happinessLabel = new Label(happinessText, skin);
happinessLabel.setAlignment(Align.center);
CivTable.add(happinessLabel);
CivTable.add(new Label("Culture: " + Math.round(currentStats.culture) + "(+" + Math.round(nextTurnStats.culture) +")", skin)); CivTable.add(new Label("Culture: " + Math.round(currentStats.culture) + "(+" + Math.round(nextTurnStats.culture) +")", skin));
CivTable.pack(); CivTable.pack();