mirror of
https://github.com/yairm210/Unciv.git
synced 2025-08-03 16:49:15 +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 CityExpansionManager expansion = new CityExpansionManager();
|
||||||
public CityStats cityStats = new CityStats();
|
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 TileInfo getTile(){return getTileMap().get(cityLocation);}
|
||||||
public Linq<TileInfo> getTilesInRange(){
|
public Linq<TileInfo> getTilesInRange(){
|
||||||
@ -44,7 +44,6 @@ public class CityInfo {
|
|||||||
} // for json parsing, we need to have a default constructor
|
} // for json parsing, we need to have a default constructor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
|
public CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
|
||||||
|
|
||||||
population.cityInfo = this;
|
population.cityInfo = this;
|
||||||
@ -72,7 +71,7 @@ public class CityInfo {
|
|||||||
if("Forest".equals(tile.terrainFeature) || "Jungle".equals(tile.terrainFeature) || "Marsh".equals(tile.terrainFeature))
|
if("Forest".equals(tile.terrainFeature) || "Jungle".equals(tile.terrainFeature) || "Marsh".equals(tile.terrainFeature))
|
||||||
tile.terrainFeature=null;
|
tile.terrainFeature=null;
|
||||||
|
|
||||||
autoAssignWorker();
|
population.autoAssignWorker();
|
||||||
cityStats.update();
|
cityStats.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,23 +106,6 @@ public class CityInfo {
|
|||||||
expansion.nextTurn(stats.culture);
|
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){
|
double rankTile(TileInfo tile){
|
||||||
FullStats stats = tile.getTileStats(this);
|
FullStats stats = tile.getTileStats(this);
|
||||||
double rank=0;
|
double rank=0;
|
||||||
@ -137,30 +119,6 @@ public class CityInfo {
|
|||||||
return rank;
|
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(){
|
public Linq<String> getBuildingUniques(){
|
||||||
return cityConstructions.getBuiltBuildings().select(new Linq.Func<Building, String>() {
|
return cityConstructions.getBuiltBuildings().select(new Linq.Func<Building, String>() {
|
||||||
@Override
|
@Override
|
||||||
@ -183,7 +141,6 @@ public class CityInfo {
|
|||||||
if(building.greatPersonPoints!=null)
|
if(building.greatPersonPoints!=null)
|
||||||
greatPersonPoints.add(building.greatPersonPoints);
|
greatPersonPoints.add(building.greatPersonPoints);
|
||||||
|
|
||||||
float multiplier = 1;
|
|
||||||
if(civInfo.getBuildingUniques().contains("GreatPersonGenerationIncrease"))
|
if(civInfo.getBuildingUniques().contains("GreatPersonGenerationIncrease"))
|
||||||
greatPersonPoints = greatPersonPoints.multiply(1.33f);
|
greatPersonPoints = greatPersonPoints.multiply(1.33f);
|
||||||
if(civInfo.policies.isAdopted("Entrepreneurship"))
|
if(civInfo.policies.isAdopted("Entrepreneurship"))
|
||||||
|
@ -7,6 +7,7 @@ import com.unciv.logic.map.RoadStatus;
|
|||||||
import com.unciv.logic.map.TileInfo;
|
import com.unciv.logic.map.TileInfo;
|
||||||
import com.unciv.models.gamebasics.Building;
|
import com.unciv.models.gamebasics.Building;
|
||||||
import com.unciv.models.gamebasics.GameBasics;
|
import com.unciv.models.gamebasics.GameBasics;
|
||||||
|
import com.unciv.models.linq.Linq;
|
||||||
import com.unciv.models.stats.FullStats;
|
import com.unciv.models.stats.FullStats;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,7 +47,7 @@ public class CityStats{
|
|||||||
|
|
||||||
private FullStats getStatsFromTradeRoute(){
|
private FullStats getStatsFromTradeRoute(){
|
||||||
FullStats stats = new FullStats();
|
FullStats stats = new FullStats();
|
||||||
if(!cityInfo.isCapital() && cityInfo.isConnectedToCapital(RoadStatus.Road)) {
|
if(!isCapital() && isConnectedToCapital(RoadStatus.Road)) {
|
||||||
CivilizationInfo civInfo = CivilizationInfo.current();
|
CivilizationInfo civInfo = CivilizationInfo.current();
|
||||||
// Calculated by http://civilization.wikia.com/wiki/Trade_route_(Civ5)
|
// Calculated by http://civilization.wikia.com/wiki/Trade_route_(Civ5)
|
||||||
double goldFromTradeRoute = civInfo.getCapital().population.population * 0.15
|
double goldFromTradeRoute = civInfo.getCapital().population.population * 0.15
|
||||||
@ -62,13 +63,13 @@ public class CityStats{
|
|||||||
FullStats stats = new FullStats();
|
FullStats stats = new FullStats();
|
||||||
PolicyManager policies = CivilizationInfo.current().policies;
|
PolicyManager policies = CivilizationInfo.current().policies;
|
||||||
|
|
||||||
if(policies.isAdopted("Tradition") && cityInfo.isCapital())
|
if(policies.isAdopted("Tradition") && isCapital())
|
||||||
stats.culture+=3;
|
stats.culture+=3;
|
||||||
if(policies.isAdopted("Landed Elite") && cityInfo.isCapital())
|
if(policies.isAdopted("Landed Elite") && isCapital())
|
||||||
stats.food+=2;
|
stats.food+=2;
|
||||||
if(policies.isAdopted("Tradition Complete"))
|
if(policies.isAdopted("Tradition Complete"))
|
||||||
stats.food+=2;
|
stats.food+=2;
|
||||||
if(policies.isAdopted("Monarchy") && cityInfo.isCapital())
|
if(policies.isAdopted("Monarchy") && isCapital())
|
||||||
stats.gold+=cityInfo.population.population/2;
|
stats.gold+=cityInfo.population.population/2;
|
||||||
if(policies.isAdopted("Liberty"))
|
if(policies.isAdopted("Liberty"))
|
||||||
stats.culture+=1;
|
stats.culture+=1;
|
||||||
@ -101,7 +102,7 @@ public class CityStats{
|
|||||||
private FullStats getStatPercentBonusesFromRailroad(){
|
private FullStats getStatPercentBonusesFromRailroad(){
|
||||||
FullStats stats = new FullStats();
|
FullStats stats = new FullStats();
|
||||||
if( CivilizationInfo.current().tech.isResearched ("Combustion") &&
|
if( CivilizationInfo.current().tech.isResearched ("Combustion") &&
|
||||||
(cityInfo.isCapital() || cityInfo.isConnectedToCapital(RoadStatus.Railroad)))
|
(isCapital() || isConnectedToCapital(RoadStatus.Railroad)))
|
||||||
stats.production += 25;
|
stats.production += 25;
|
||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
@ -118,7 +119,7 @@ public class CityStats{
|
|||||||
PolicyManager policies = CivilizationInfo.current().policies;
|
PolicyManager policies = CivilizationInfo.current().policies;
|
||||||
|
|
||||||
CityConstructions cityConstructions = cityInfo.cityConstructions;
|
CityConstructions cityConstructions = cityInfo.cityConstructions;
|
||||||
if(policies.isAdopted("Collective Rule") && cityInfo.isCapital()
|
if(policies.isAdopted("Collective Rule") && isCapital()
|
||||||
&& "Settler".equals(cityConstructions.currentConstruction))
|
&& "Settler".equals(cityConstructions.currentConstruction))
|
||||||
stats.production+=50;
|
stats.production+=50;
|
||||||
if(policies.isAdopted("Republic") && cityConstructions.getCurrentConstruction() instanceof Building)
|
if(policies.isAdopted("Republic") && cityConstructions.getCurrentConstruction() instanceof Building)
|
||||||
@ -130,7 +131,7 @@ public class CityStats{
|
|||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
stats.culture+=33;
|
stats.culture+=33;
|
||||||
if(policies.isAdopted("Commerce") && cityInfo.isCapital())
|
if(policies.isAdopted("Commerce") && isCapital())
|
||||||
stats.gold+=25;
|
stats.gold+=25;
|
||||||
if(policies.isAdopted("Sovereignty") && CivilizationInfo.current().getHappinessForNextTurn() >= 0)
|
if(policies.isAdopted("Sovereignty") && CivilizationInfo.current().getHappinessForNextTurn() >= 0)
|
||||||
stats.science+=15;
|
stats.science+=15;
|
||||||
@ -167,7 +168,7 @@ public class CityStats{
|
|||||||
|
|
||||||
private float getGrowthBonusFromPolicies(){
|
private float getGrowthBonusFromPolicies(){
|
||||||
float bonus = 0;
|
float bonus = 0;
|
||||||
if(CivilizationInfo.current().policies.isAdopted("Landed Elite") && cityInfo.isCapital())
|
if(CivilizationInfo.current().policies.isAdopted("Landed Elite") && isCapital())
|
||||||
bonus+=0.1;
|
bonus+=0.1;
|
||||||
if(CivilizationInfo.current().policies.isAdopted("Tradition Complete"))
|
if(CivilizationInfo.current().policies.isAdopted("Tradition Complete"))
|
||||||
bonus+=0.15;
|
bonus+=0.15;
|
||||||
@ -231,9 +232,9 @@ public class CityStats{
|
|||||||
|
|
||||||
if(civInfo.policies.isAdopted("Aristocracy"))
|
if(civInfo.policies.isAdopted("Aristocracy"))
|
||||||
happiness+=cityInfo.population.population/10;
|
happiness+=cityInfo.population.population/10;
|
||||||
if(civInfo.policies.isAdopted("Monarchy") && cityInfo.isCapital())
|
if(civInfo.policies.isAdopted("Monarchy") && isCapital())
|
||||||
happiness+=cityInfo.population.population/2;
|
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+=1;
|
||||||
|
|
||||||
happiness+=(int) cityInfo.cityConstructions.getStats().happiness;
|
happiness+=(int) cityInfo.cityConstructions.getStats().happiness;
|
||||||
@ -241,4 +242,29 @@ public class CityStats{
|
|||||||
return happiness;
|
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();
|
foodStored -= foodToNextPopulation();
|
||||||
if(cityInfo.getBuildingUniques().contains("FoodCarriesOver")) foodStored+=0.4f*foodToNextPopulation(); // Aqueduct special
|
if(cityInfo.getBuildingUniques().contains("FoodCarriesOver")) foodStored+=0.4f*foodToNextPopulation(); // Aqueduct special
|
||||||
population++;
|
population++;
|
||||||
cityInfo.autoAssignWorker();
|
autoAssignWorker();
|
||||||
CivilizationInfo.current().addNotification(cityInfo.name+" has grown!",cityInfo.cityLocation);
|
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