mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04:00
Unhappiness now cuts excess food
This commit is contained in:
parent
48f56e2e85
commit
b6f31af5a4
@ -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();
|
||||
|
||||
|
@ -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(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user