mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-28 21:58:54 +07:00
Moved more functions to their proper places
This commit is contained in:
@ -23,7 +23,7 @@ public class CityInfo {
|
||||
public CityExpansionManager expansion = new CityExpansionManager();
|
||||
public CityStats cityStats = new CityStats();
|
||||
|
||||
private TileMap getTileMap(){return UnCivGame.Current.civInfo.tileMap; }
|
||||
TileMap getTileMap(){return UnCivGame.Current.civInfo.tileMap; }
|
||||
|
||||
public TileInfo getTile(){return getTileMap().get(cityLocation);}
|
||||
public Linq<TileInfo> getTilesInRange(){
|
||||
@ -44,7 +44,6 @@ public class CityInfo {
|
||||
} // for json parsing, we need to have a default constructor
|
||||
|
||||
|
||||
|
||||
public CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
|
||||
|
||||
population.cityInfo = this;
|
||||
@ -72,7 +71,7 @@ public class CityInfo {
|
||||
if("Forest".equals(tile.terrainFeature) || "Jungle".equals(tile.terrainFeature) || "Marsh".equals(tile.terrainFeature))
|
||||
tile.terrainFeature=null;
|
||||
|
||||
autoAssignWorker();
|
||||
population.autoAssignWorker();
|
||||
cityStats.update();
|
||||
}
|
||||
|
||||
@ -107,23 +106,6 @@ public class CityInfo {
|
||||
expansion.nextTurn(stats.culture);
|
||||
}
|
||||
|
||||
|
||||
void autoAssignWorker() {
|
||||
double maxValue = 0;
|
||||
TileInfo toWork = null;
|
||||
for (TileInfo tileInfo : getTilesInRange()) {
|
||||
if (tileInfo.workingCity !=null) continue;
|
||||
double value = rankTile(tileInfo);
|
||||
if (value > maxValue) {
|
||||
maxValue = value;
|
||||
toWork = tileInfo;
|
||||
}
|
||||
}
|
||||
|
||||
if(toWork!=null) // This is when we've run out of tiles!
|
||||
toWork.workingCity = name;
|
||||
}
|
||||
|
||||
double rankTile(TileInfo tile){
|
||||
FullStats stats = tile.getTileStats(this);
|
||||
double rank=0;
|
||||
@ -137,30 +119,6 @@ public class CityInfo {
|
||||
return rank;
|
||||
}
|
||||
|
||||
boolean isCapital(){ return CivilizationInfo.current().getCapital() == this; }
|
||||
|
||||
boolean isConnectedToCapital(RoadStatus roadType){
|
||||
if(CivilizationInfo.current().getCapital()==null) return false;// first city!
|
||||
TileInfo capitalTile = CivilizationInfo.current().getCapital().getTile();
|
||||
Linq<TileInfo> tilesReached = new Linq<TileInfo>();
|
||||
Linq<TileInfo> tilesToCheck = new Linq<TileInfo>();
|
||||
tilesToCheck.add(getTile());
|
||||
while(!tilesToCheck.isEmpty()){
|
||||
Linq<TileInfo> newTiles = new Linq<TileInfo>();
|
||||
for(TileInfo tile : tilesToCheck)
|
||||
for (TileInfo maybeNewTile : getTileMap().getTilesInDistance(tile.position,1))
|
||||
if(!tilesReached.contains(maybeNewTile) && !tilesToCheck.contains(maybeNewTile) && !newTiles.contains(maybeNewTile)
|
||||
&& (roadType != RoadStatus.Road || maybeNewTile.roadStatus != RoadStatus.None)
|
||||
&& (roadType!=RoadStatus.Railroad || maybeNewTile.roadStatus == roadType))
|
||||
newTiles.add(maybeNewTile);
|
||||
|
||||
if(newTiles.contains(capitalTile)) return true;
|
||||
tilesReached.addAll(tilesToCheck);
|
||||
tilesToCheck = newTiles;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Linq<String> getBuildingUniques(){
|
||||
return cityConstructions.getBuiltBuildings().select(new Linq.Func<Building, String>() {
|
||||
@Override
|
||||
@ -183,7 +141,6 @@ public class CityInfo {
|
||||
if(building.greatPersonPoints!=null)
|
||||
greatPersonPoints.add(building.greatPersonPoints);
|
||||
|
||||
float multiplier = 1;
|
||||
if(civInfo.getBuildingUniques().contains("GreatPersonGenerationIncrease"))
|
||||
greatPersonPoints = greatPersonPoints.multiply(1.33f);
|
||||
if(civInfo.policies.isAdopted("Entrepreneurship"))
|
||||
|
@ -7,6 +7,7 @@ import com.unciv.logic.map.RoadStatus;
|
||||
import com.unciv.logic.map.TileInfo;
|
||||
import com.unciv.models.gamebasics.Building;
|
||||
import com.unciv.models.gamebasics.GameBasics;
|
||||
import com.unciv.models.linq.Linq;
|
||||
import com.unciv.models.stats.FullStats;
|
||||
|
||||
/**
|
||||
@ -46,7 +47,7 @@ public class CityStats{
|
||||
|
||||
private FullStats getStatsFromTradeRoute(){
|
||||
FullStats stats = new FullStats();
|
||||
if(!cityInfo.isCapital() && cityInfo.isConnectedToCapital(RoadStatus.Road)) {
|
||||
if(!isCapital() && isConnectedToCapital(RoadStatus.Road)) {
|
||||
CivilizationInfo civInfo = CivilizationInfo.current();
|
||||
// Calculated by http://civilization.wikia.com/wiki/Trade_route_(Civ5)
|
||||
double goldFromTradeRoute = civInfo.getCapital().population.population * 0.15
|
||||
@ -62,13 +63,13 @@ public class CityStats{
|
||||
FullStats stats = new FullStats();
|
||||
PolicyManager policies = CivilizationInfo.current().policies;
|
||||
|
||||
if(policies.isAdopted("Tradition") && cityInfo.isCapital())
|
||||
if(policies.isAdopted("Tradition") && isCapital())
|
||||
stats.culture+=3;
|
||||
if(policies.isAdopted("Landed Elite") && cityInfo.isCapital())
|
||||
if(policies.isAdopted("Landed Elite") && isCapital())
|
||||
stats.food+=2;
|
||||
if(policies.isAdopted("Tradition Complete"))
|
||||
stats.food+=2;
|
||||
if(policies.isAdopted("Monarchy") && cityInfo.isCapital())
|
||||
if(policies.isAdopted("Monarchy") && isCapital())
|
||||
stats.gold+=cityInfo.population.population/2;
|
||||
if(policies.isAdopted("Liberty"))
|
||||
stats.culture+=1;
|
||||
@ -101,7 +102,7 @@ public class CityStats{
|
||||
private FullStats getStatPercentBonusesFromRailroad(){
|
||||
FullStats stats = new FullStats();
|
||||
if( CivilizationInfo.current().tech.isResearched ("Combustion") &&
|
||||
(cityInfo.isCapital() || cityInfo.isConnectedToCapital(RoadStatus.Railroad)))
|
||||
(isCapital() || isConnectedToCapital(RoadStatus.Railroad)))
|
||||
stats.production += 25;
|
||||
return stats;
|
||||
}
|
||||
@ -118,7 +119,7 @@ public class CityStats{
|
||||
PolicyManager policies = CivilizationInfo.current().policies;
|
||||
|
||||
CityConstructions cityConstructions = cityInfo.cityConstructions;
|
||||
if(policies.isAdopted("Collective Rule") && cityInfo.isCapital()
|
||||
if(policies.isAdopted("Collective Rule") && isCapital()
|
||||
&& "Settler".equals(cityConstructions.currentConstruction))
|
||||
stats.production+=50;
|
||||
if(policies.isAdopted("Republic") && cityConstructions.getCurrentConstruction() instanceof Building)
|
||||
@ -130,7 +131,7 @@ public class CityStats{
|
||||
}
|
||||
}))
|
||||
stats.culture+=33;
|
||||
if(policies.isAdopted("Commerce") && cityInfo.isCapital())
|
||||
if(policies.isAdopted("Commerce") && isCapital())
|
||||
stats.gold+=25;
|
||||
if(policies.isAdopted("Sovereignty") && CivilizationInfo.current().getHappinessForNextTurn() >= 0)
|
||||
stats.science+=15;
|
||||
@ -167,7 +168,7 @@ public class CityStats{
|
||||
|
||||
private float getGrowthBonusFromPolicies(){
|
||||
float bonus = 0;
|
||||
if(CivilizationInfo.current().policies.isAdopted("Landed Elite") && cityInfo.isCapital())
|
||||
if(CivilizationInfo.current().policies.isAdopted("Landed Elite") && isCapital())
|
||||
bonus+=0.1;
|
||||
if(CivilizationInfo.current().policies.isAdopted("Tradition Complete"))
|
||||
bonus+=0.15;
|
||||
@ -231,9 +232,9 @@ public class CityStats{
|
||||
|
||||
if(civInfo.policies.isAdopted("Aristocracy"))
|
||||
happiness+=cityInfo.population.population/10;
|
||||
if(civInfo.policies.isAdopted("Monarchy") && cityInfo.isCapital())
|
||||
if(civInfo.policies.isAdopted("Monarchy") && isCapital())
|
||||
happiness+=cityInfo.population.population/2;
|
||||
if(civInfo.policies.isAdopted("Meritocracy") && cityInfo.isConnectedToCapital(RoadStatus.Road))
|
||||
if(civInfo.policies.isAdopted("Meritocracy") && isConnectedToCapital(RoadStatus.Road))
|
||||
happiness+=1;
|
||||
|
||||
happiness+=(int) cityInfo.cityConstructions.getStats().happiness;
|
||||
@ -241,4 +242,29 @@ public class CityStats{
|
||||
return happiness;
|
||||
}
|
||||
|
||||
|
||||
boolean isConnectedToCapital(RoadStatus roadType){
|
||||
if(CivilizationInfo.current().getCapital()==null) return false;// first city!
|
||||
TileInfo capitalTile = CivilizationInfo.current().getCapital().getTile();
|
||||
Linq<TileInfo> tilesReached = new Linq<TileInfo>();
|
||||
Linq<TileInfo> tilesToCheck = new Linq<TileInfo>();
|
||||
tilesToCheck.add(cityInfo.getTile());
|
||||
while(!tilesToCheck.isEmpty()){
|
||||
Linq<TileInfo> newTiles = new Linq<TileInfo>();
|
||||
for(TileInfo tile : tilesToCheck)
|
||||
for (TileInfo maybeNewTile : cityInfo.getTileMap().getTilesInDistance(tile.position,1))
|
||||
if(!tilesReached.contains(maybeNewTile) && !tilesToCheck.contains(maybeNewTile) && !newTiles.contains(maybeNewTile)
|
||||
&& (roadType != RoadStatus.Road || maybeNewTile.roadStatus != RoadStatus.None)
|
||||
&& (roadType!=RoadStatus.Railroad || maybeNewTile.roadStatus == roadType))
|
||||
newTiles.add(maybeNewTile);
|
||||
|
||||
if(newTiles.contains(capitalTile)) return true;
|
||||
tilesReached.addAll(tilesToCheck);
|
||||
tilesToCheck = newTiles;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isCapital(){ return CivilizationInfo.current().getCapital() == cityInfo; }
|
||||
|
||||
}
|
||||
|
@ -58,8 +58,25 @@ public class PopulationManager {
|
||||
foodStored -= foodToNextPopulation();
|
||||
if(cityInfo.getBuildingUniques().contains("FoodCarriesOver")) foodStored+=0.4f*foodToNextPopulation(); // Aqueduct special
|
||||
population++;
|
||||
cityInfo.autoAssignWorker();
|
||||
autoAssignWorker();
|
||||
CivilizationInfo.current().addNotification(cityInfo.name+" has grown!",cityInfo.cityLocation);
|
||||
}
|
||||
}
|
||||
|
||||
void autoAssignWorker() {
|
||||
double maxValue = 0;
|
||||
TileInfo toWork = null;
|
||||
for (TileInfo tileInfo : cityInfo.getTilesInRange()) {
|
||||
if (tileInfo.workingCity !=null) continue;
|
||||
double value = cityInfo.rankTile(tileInfo);
|
||||
if (value > maxValue) {
|
||||
maxValue = value;
|
||||
toWork = tileInfo;
|
||||
}
|
||||
}
|
||||
|
||||
if(toWork!=null) // This is when we've run out of tiles!
|
||||
toWork.workingCity = cityInfo.name;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user