Unhappiness now cuts excess food

This commit is contained in:
Yair Morgenstern 2017-12-09 20:36:33 +02:00
parent 48f56e2e85
commit b6f31af5a4
2 changed files with 30 additions and 7 deletions

View File

@ -6,6 +6,7 @@ import com.unciv.game.UnCivGame;
import com.unciv.models.LinqCollection;
import com.unciv.models.LinqHashMap;
import com.unciv.models.gamebasics.Building;
import com.unciv.models.gamebasics.GameBasics;
import com.unciv.models.gamebasics.ResourceType;
import com.unciv.models.gamebasics.TileResource;
import com.unciv.models.stats.FullStats;
@ -80,6 +81,14 @@ public class CityInfo {
else cityResources.put(resource,1);
}
}
// Remove resources required by buildings
for(Building building : cityBuildings.getBuiltBuildings()){
if(building.requiredResource!=null){
TileResource resource = GameBasics.TileResources.get(building.requiredResource);
if(cityResources.containsKey(resource)) cityResources.put(resource,cityResources.get(resource)-1);
else cityResources.put(resource,-1);
}
}
return cityResources;
}
@ -102,7 +111,6 @@ public class CityInfo {
public FullStats getCityStats() {
FullStats stats = new FullStats();
stats.happiness = -3 - population; // -3 happiness per city and -3 per population
stats.science += population;
// Working ppl
@ -131,10 +139,18 @@ public class CityInfo {
stats.culture*=1+statPercentBonuses.culture/100;
stats.gold-=cityBuildings.getMaintainanceCosts(); // this is AFTER the bonus calculation!
if(CivilizationInfo.current().getHappinessForNextTurn() < 0)
stats.food /= 4; // Reduce excess food to 1/4
return stats;
}
public float 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!
float happiness = -3 - population; // -3 happiness per city and -1 per population
return happiness + (int)cityBuildings.getStats().happiness;
}
void nextTurn() {
FullStats stats = getCityStats();

View File

@ -64,6 +64,7 @@ public class CivilizationInfo {
notifications.clear();
CivStats nextTurnStats = getStatsForNextTurn();
civStats.add(nextTurnStats);
if(cities.size() > 0) tech.nextTurn((int)nextTurnStats.science);
for (CityInfo city : cities) city.nextTurn();
@ -74,20 +75,26 @@ public class CivilizationInfo {
}
public CivStats getStatsForNextTurn() {
CivStats statsForTurn = new CivStats() {{
happiness = baseHappiness;
}};
CivStats statsForTurn = new CivStats();
for (CityInfo city : cities) {
statsForTurn.add(city.getCityStats());
}
statsForTurn.happiness += new LinqCollection<TileResource>(getCivResources().keySet()).count(new Predicate<TileResource>() {
statsForTurn.happiness = getHappinessForNextTurn();
return statsForTurn;
}
public int getHappinessForNextTurn(){
int happiness = baseHappiness;
happiness += new LinqCollection<TileResource>(getCivResources().keySet()).count(new Predicate<TileResource>() {
@Override
public boolean evaluate(TileResource arg0) {
return arg0.resourceType == ResourceType.Luxury;
}
}) * 5; // 5 happiness for each unique luxury in civ
return statsForTurn;
for (CityInfo city : cities) {
happiness += city.getCityHappiness();
}
return happiness;
}
public LinqHashMap<TileResource,Integer> getCivResources(){