mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-16 10:49:17 +07:00
Added factories and civ resource management
This commit is contained in:
@ -86,8 +86,7 @@ public class CityBuildings
|
||||
{
|
||||
CivilizationInfo civInfo = UnCivGame.Current.civInfo;
|
||||
if(isBuilt(building.name)) return false;
|
||||
// if (building.name.equals("Worker") || building.name.equals("Settler")) return false;
|
||||
if(building.resourceRequired) {
|
||||
if(building.resourceBoostingBuilding) {
|
||||
boolean containsResourceWithImprovement = getCity().getTilesInRange()
|
||||
.any(new Predicate<TileInfo>() {
|
||||
@Override
|
||||
@ -117,6 +116,9 @@ public class CityBuildings
|
||||
return arg0.cityBuildings.isBuilt(building.requiredBuildingInAllCities);
|
||||
}
|
||||
}) ) return false;
|
||||
if(building.requiredResource!=null &&
|
||||
!civInfo.getCivResources().keySet().contains(GameBasics.TileResources.get(building.requiredResource)))
|
||||
return false; // Only checks if exists, doesn't check amount - todo
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.utils.Predicate;
|
||||
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.ResourceType;
|
||||
import com.unciv.models.gamebasics.TileResource;
|
||||
@ -69,15 +70,17 @@ public class CityInfo {
|
||||
civInfo.cities.add(this);
|
||||
}
|
||||
|
||||
ArrayList<String> getLuxuryResources() {
|
||||
LinqCollection<String> LuxuryResources = new LinqCollection<String>();
|
||||
public LinqHashMap<TileResource,Integer> getCityResources(){
|
||||
LinqHashMap<TileResource,Integer> cityResources = new LinqHashMap<TileResource, Integer>();
|
||||
|
||||
for (TileInfo tileInfo : getTilesInRange()) {
|
||||
TileResource resource = tileInfo.getTileResource();
|
||||
if (resource != null && resource.resourceType == ResourceType.Luxury &&
|
||||
(resource.improvement.equals(tileInfo.improvement) || tileInfo.isCityCenter()))
|
||||
LuxuryResources.add(tileInfo.resource);
|
||||
if (resource != null && (resource.improvement.equals(tileInfo.improvement) || tileInfo.isCityCenter())){
|
||||
if(cityResources.containsKey(resource)) cityResources.put(resource,cityResources.get(resource)+1);
|
||||
else cityResources.put(resource,1);
|
||||
}
|
||||
}
|
||||
return LuxuryResources.unique();
|
||||
return cityResources;
|
||||
}
|
||||
|
||||
private int getWorkingPopulation() {
|
||||
|
@ -4,8 +4,11 @@ import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.utils.Predicate;
|
||||
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.CivStats;
|
||||
|
||||
import java.util.Collection;
|
||||
@ -74,16 +77,30 @@ public class CivilizationInfo {
|
||||
CivStats statsForTurn = new CivStats() {{
|
||||
happiness = baseHappiness;
|
||||
}};
|
||||
HashSet<String> LuxuryResources = new HashSet<String>();
|
||||
for (CityInfo city : cities) {
|
||||
statsForTurn.add(city.getCityStats());
|
||||
LuxuryResources.addAll(city.getLuxuryResources());
|
||||
}
|
||||
statsForTurn.happiness += LuxuryResources.size() * 5; // 5 happiness for each unique luxury in civ
|
||||
statsForTurn.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;
|
||||
}
|
||||
|
||||
public LinqHashMap<TileResource,Integer> getCivResources(){
|
||||
LinqHashMap<TileResource,Integer> civResources = new LinqHashMap<TileResource, Integer>();
|
||||
for (CityInfo city : cities) {
|
||||
for(TileResource resource : city.getCityResources().keySet()){
|
||||
if(civResources.containsKey(resource)) civResources.put(resource,civResources.get(resource)+1);
|
||||
else civResources.put(resource,1);
|
||||
}
|
||||
}
|
||||
return civResources;
|
||||
}
|
||||
|
||||
public LinqCollection<String> getBuildingUniques(){
|
||||
return cities.selectMany(new LinqCollection.Func<CityInfo, Collection<? extends String>>() {
|
||||
@Override
|
||||
|
@ -5,41 +5,55 @@ import com.unciv.models.stats.FullStats;
|
||||
import com.unciv.models.stats.NamedStats;
|
||||
|
||||
public class Building extends NamedStats implements ICivilopedia {
|
||||
public String description;
|
||||
public String requiredTech;
|
||||
public Technology GetRequiredTech(){return GameBasics.Technologies.get(requiredTech);}
|
||||
public int cost;
|
||||
public int maintainance = 0;
|
||||
public FullStats percentStatBonus = new FullStats();
|
||||
//public Func<CityInfo,FullStats> GetFlatBonusStats;
|
||||
public boolean isWonder = false;
|
||||
public boolean resourceRequired = false;
|
||||
public String requiredBuilding;
|
||||
public String requiredBuildingInAllCities;
|
||||
public String description;
|
||||
public String requiredTech;
|
||||
|
||||
// Uniques
|
||||
public String providesFreeBuilding;
|
||||
public int freeTechs;
|
||||
public String unique; // for wonders which have individual functions that are totally unique
|
||||
public Technology GetRequiredTech() {
|
||||
return GameBasics.Technologies.get(requiredTech);
|
||||
}
|
||||
|
||||
/** The bonus stats that a resource gets when this building is built */
|
||||
public FullStats resourceBonusStats;
|
||||
public int cost;
|
||||
public int maintainance = 0;
|
||||
public FullStats percentStatBonus = new FullStats();
|
||||
//public Func<CityInfo,FullStats> GetFlatBonusStats;
|
||||
public boolean isWonder = false;
|
||||
public boolean resourceBoostingBuilding = false;
|
||||
public String requiredBuilding;
|
||||
public String requiredBuildingInAllCities;
|
||||
public String requiredResource;
|
||||
|
||||
public String getDescription(){return getDescription(false);}
|
||||
// Uniques
|
||||
public String providesFreeBuilding;
|
||||
public int freeTechs;
|
||||
public String unique; // for wonders which have individual functions that are totally unique
|
||||
|
||||
public String getDescription(boolean forBuildingPickerScreen) {
|
||||
FullStats stats = new FullStats(this);
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (!forBuildingPickerScreen) stringBuilder.append("Cost: "+cost+"\r\n");
|
||||
if (isWonder) stringBuilder.append("Wonder\r\n");
|
||||
if (!forBuildingPickerScreen && requiredTech != null) stringBuilder.append("Requires "+requiredTech+" to be researched\r\n");
|
||||
if (!forBuildingPickerScreen && requiredBuilding != null) stringBuilder.append("Requires a "+requiredBuilding+" to be built in this city\r\n");
|
||||
if (!forBuildingPickerScreen && requiredBuildingInAllCities != null) stringBuilder.append("Requires a "+requiredBuildingInAllCities+" to be built in all cities\r\n");
|
||||
if(providesFreeBuilding!=null) stringBuilder.append("Provides a free "+providesFreeBuilding+" in this city\r\n");
|
||||
if(maintainance!=0) stringBuilder.append("Maintainance cost: "+maintainance+" gold\r\n");
|
||||
stringBuilder.append(description + "\r\n" + stats);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
/**
|
||||
* The bonus stats that a resource gets when this building is built
|
||||
*/
|
||||
public FullStats resourceBonusStats;
|
||||
|
||||
public String getDescription() {
|
||||
return getDescription(false);
|
||||
}
|
||||
|
||||
public String getDescription(boolean forBuildingPickerScreen) {
|
||||
FullStats stats = new FullStats(this);
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (!forBuildingPickerScreen) stringBuilder.append("Cost: " + cost + "\r\n");
|
||||
if (isWonder) stringBuilder.append("Wonder\r\n");
|
||||
if (!forBuildingPickerScreen && requiredTech != null)
|
||||
stringBuilder.append("Requires " + requiredTech + " to be researched\r\n");
|
||||
if (!forBuildingPickerScreen && requiredBuilding != null)
|
||||
stringBuilder.append("Requires a " + requiredBuilding + " to be built in this city\r\n");
|
||||
if (!forBuildingPickerScreen && requiredBuildingInAllCities != null)
|
||||
stringBuilder.append("Requires a " + requiredBuildingInAllCities + " to be built in all cities\r\n");
|
||||
if (providesFreeBuilding != null)
|
||||
stringBuilder.append("Provides a free " + providesFreeBuilding + " in this city\r\n");
|
||||
if (maintainance != 0)
|
||||
stringBuilder.append("Maintainance cost: " + maintainance + " gold\r\n");
|
||||
stringBuilder.append(description + "\r\n" + stats);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user