Moved more functions to their proper places

This commit is contained in:
Yair Morgenstern
2018-01-13 23:21:20 +02:00
parent a992dff6fe
commit d8a7c379e7
3 changed files with 56 additions and 56 deletions

View File

@ -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"))

View File

@ -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; }
}

View File

@ -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;
}
}