Skip to content

Commit d125c6b

Browse files
committed
Google play-able
Units with no turns left are now grayed out Added culture pool to cities and tiles being added to cities when pool fills Changed tile icon order and placing of resource icon
1 parent a6ae959 commit d125c6b

19 files changed

+123
-55
lines changed

Diff for: android/AndroidManifest.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<application
88
android:allowBackup="true"
9-
android:icon="@drawable/ic_launcher"
9+
android:icon="@drawable/uncivicon"
1010
android:label="@string/app_name"
1111
android:theme="@style/GdxTheme" >
1212
<activity

Diff for: android/android-release.apk

2.93 MB
Binary file not shown.

Diff for: android/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ android {
1818
exclude 'META-INF/robovm/ios/robovm.xml'
1919
}
2020
defaultConfig {
21-
applicationId "com.mygdx.game"
21+
applicationId "com.unciv.game"
2222
minSdkVersion 9
2323
targetSdkVersion 25
24-
versionCode 1
24+
versionCode 3
2525
versionName "1.0"
2626
}
2727
buildTypes {
@@ -79,7 +79,7 @@ task run(type: Exec) {
7979
}
8080

8181
def adb = path + "/platform-tools/adb"
82-
commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.mygdx.game/AndroidLauncher'
82+
commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.unciv.game/AndroidLauncher'
8383
}
8484

8585
// sets up the Android Eclipse project, using the old Ant based build.

Diff for: android/res/drawable-hdpi/uncivicon.png

6.65 KB
Loading

Diff for: android/res/drawable-mdpi/uncivicon.png

3.59 KB
Loading

Diff for: android/res/drawable-xhdpi/uncivicon.png

10.5 KB
Loading

Diff for: android/res/drawable-xxhdpi/uncivicon.png

20.3 KB
Loading

Diff for: android/res/drawable-xxxhdpi/uncivicon.png

32.5 KB
Loading

Diff for: build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ allprojects {
2020
apply plugin: "eclipse"
2121
apply plugin: "idea"
2222

23-
version = '1.0'
23+
version = '1.0.1'
2424
ext {
25-
appName = "my-gdx-game"
25+
appName = "unciv-game"
2626
gdxVersion = '1.9.6'
2727
roboVMVersion = '2.3.1'
2828
box2DLightsVersion = '1.4'

Diff for: core/src/com/unciv/civinfo/CityBuildings.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public boolean CanBuild(final Building building)
7676
if(IsBuilt(building.Name)) return false;
7777
// if (building.Name.equals("Worker") || building.Name.equals("Settler")) return false;
7878
if(building.ResourceRequired) {
79-
boolean containsResourceWithImprovement = GetCity().GetCityTiles()
79+
boolean containsResourceWithImprovement = GetCity().getCityTiles()
8080
.any(new Predicate<TileInfo>() {
8181
@Override
8282
public boolean evaluate(TileInfo tile) {

Diff for: core/src/com/unciv/civinfo/CityInfo.java

+83-21
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,26 @@
55
import com.unciv.game.HexMath;
66
import com.unciv.game.UnCivGame;
77
import com.unciv.models.LinqCollection;
8+
import com.unciv.models.gamebasics.ResourceType;
9+
import com.unciv.models.gamebasics.TileResource;
810
import com.unciv.models.stats.FullStats;
911

1012
import java.util.ArrayList;
13+
import java.util.Comparator;
1114

1215
public class CityInfo {
1316
public final Vector2 cityLocation;
1417
public String Name;
1518

1619
public CityBuildings cityBuildings;
1720
public CityPopulation cityPopulation;
21+
public int cultureStored;
22+
private int tilesClaimed;
23+
1824

1925
public LinqCollection<Vector2> CityTileLocations = new LinqCollection<Vector2>();
2026

21-
public LinqCollection<TileInfo> GetCityTiles(){
27+
public LinqCollection<TileInfo> getCityTiles(){
2228
return CityTileLocations.select(new com.unciv.models.LinqCollection.Func<Vector2, TileInfo>() {
2329
@Override
2430
public TileInfo GetBy(Vector2 arg0) {
@@ -27,13 +33,23 @@ public TileInfo GetBy(Vector2 arg0) {
2733
});
2834
}
2935

30-
String[] CityNames = new String[]{"Assur", "Ninveh", "Nimrud", "Kar-Tukuli-Ninurta", "Dur-Sharrukin"};
36+
private String[] CityNames = new String[]{"Assur", "Ninveh", "Nimrud", "Kar-Tukuli-Ninurta", "Dur-Sharrukin"};
3137

3238
public CityInfo(){
3339
cityLocation = Vector2.Zero;
3440
} // for json parsing, we need to have a default constructor
3541

36-
public CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
42+
public int getCultureToNextTile(){
43+
// This one has conflicting sources -
44+
// http://civilization.wikia.com/wiki/Mathematics_of_Civilization_V says it's 20+(10(t-1))^1.1
45+
// https://www.reddit.com/r/civ/comments/58rxkk/how_in_gods_name_do_borders_expand_in_civ_vi/ has it
46+
// (per game XML files) at 6*(t+0.4813)^1.3
47+
// The second seems to be more based, so I'll go with that
48+
double a = 6*Math.pow(tilesClaimed+1.4813,1.3);
49+
return (int)Math.round(a);
50+
}
51+
52+
CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
3753
Name = CityNames[civInfo.Cities.size()];
3854
this.cityLocation = cityLocation;
3955
cityBuildings = new CityBuildings(this);
@@ -45,36 +61,36 @@ public CityInfo(CivilizationInfo civInfo, Vector2 cityLocation) {
4561
CityTileLocations.add(vector);
4662
}
4763

48-
AutoAssignWorker();
64+
autoAssignWorker();
4965
civInfo.Cities.add(this);
5066
}
5167

52-
public ArrayList<String> GetLuxuryResources() {
68+
ArrayList<String> getLuxuryResources() {
5369
ArrayList<String> LuxuryResources = new ArrayList<String>();
54-
for (TileInfo tileInfo : GetCityTiles()) {
70+
for (TileInfo tileInfo : getCityTiles()) {
5571
com.unciv.models.gamebasics.TileResource resource = tileInfo.GetTileResource();
56-
if (resource != null && resource.ResourceType.equals("Luxury") && resource.Improvement.equals(tileInfo.Improvement))
72+
if (resource != null && resource.ResourceType == ResourceType.Luxury && resource.Improvement.equals(tileInfo.Improvement))
5773
LuxuryResources.add(tileInfo.Resource);
5874
}
5975
return LuxuryResources;
6076
}
6177

6278

63-
public int GetWorkingPopulation() {
64-
return GetCityTiles().count(new Predicate<TileInfo>() {
79+
private int getWorkingPopulation() {
80+
return getCityTiles().count(new Predicate<TileInfo>() {
6581
@Override
6682
public boolean evaluate(TileInfo arg0) {
6783
return arg0.IsWorked;
6884
}
6985
});
7086
}
7187

72-
public int GetFreePopulation() {
73-
return cityPopulation.Population - GetWorkingPopulation();
88+
public int getFreePopulation() {
89+
return cityPopulation.Population - getWorkingPopulation();
7490
}
7591

76-
public boolean HasNonWorkingPopulation() {
77-
return GetFreePopulation() > 0;
92+
public boolean hasNonWorkingPopulation() {
93+
return getFreePopulation() > 0;
7894
}
7995

8096
public FullStats getCityStats() {
@@ -85,39 +101,72 @@ public FullStats getCityStats() {
85101
stats.Science += cityPopulation.Population;
86102

87103
// Working ppl
88-
for (TileInfo cell : GetCityTiles()) {
104+
for (TileInfo cell : getCityTiles()) {
89105
if (cell.IsWorked || cell.IsCityCenter()) stats.add(cell.GetTileStats());
90106
}
91107
//idle ppl
92-
stats.Production += GetFreePopulation();
108+
stats.Production += getFreePopulation();
93109
stats.Food -= cityPopulation.Population * 2;
94110

95111
stats.add(cityBuildings.GetStats());
96112

97113
return stats;
98114
}
99115

100-
public void NextTurn() {
116+
void nextTurn() {
101117
FullStats stats = getCityStats();
102118

103-
if (cityBuildings.CurrentBuilding.equals(cityBuildings.Settler) && stats.Food > 0) {
119+
if (cityBuildings.CurrentBuilding.equals(CityBuildings.Settler) && stats.Food > 0) {
104120
stats.Production += stats.Food;
105121
stats.Food = 0;
106122
}
107123

108-
if (cityPopulation.NextTurn(stats.Food)) AutoAssignWorker();
124+
if (cityPopulation.NextTurn(stats.Food)) autoAssignWorker();
109125

110126
cityBuildings.NextTurn(stats.Production);
111127

112-
for (TileInfo tileInfo : GetCityTiles()) {
128+
for (TileInfo tileInfo : getCityTiles()) {
113129
tileInfo.NextTurn();
114130
}
131+
132+
cultureStored+=stats.Culture;
133+
if(cultureStored>=getCultureToNextTile()){
134+
addNewTile();
135+
}
136+
}
137+
138+
private void addNewTile(){
139+
cultureStored -= getCultureToNextTile();
140+
tilesClaimed++;
141+
LinqCollection<Vector2> possibleNewTileVectors = new LinqCollection<Vector2>();
142+
for (TileInfo tile : getCityTiles())
143+
for (Vector2 vector : HexMath.GetAdjacentVectors(tile.Position))
144+
if(!CityTileLocations.contains(vector) && !possibleNewTileVectors.contains(vector))
145+
possibleNewTileVectors.add(vector);
146+
147+
LinqCollection<TileInfo> possibleNewTiles = new LinqCollection<TileInfo>();
148+
TileMap tileMap = UnCivGame.Current.civInfo.tileMap;
149+
for (Vector2 vector : possibleNewTileVectors)
150+
if(tileMap.contains(vector) && tileMap.get(vector).GetCity()==null)
151+
possibleNewTiles.add(tileMap.get(vector));
152+
153+
TileInfo TileChosen=null;
154+
double TileChosenRank=0;
155+
for(TileInfo tile : possibleNewTiles){
156+
double rank = rankTile(tile);
157+
if(rank>TileChosenRank){
158+
TileChosenRank = rank;
159+
TileChosen = tile;
160+
}
161+
}
162+
163+
CityTileLocations.add(TileChosen.Position);
115164
}
116165

117-
public void AutoAssignWorker() {
166+
private void autoAssignWorker() {
118167
double maxValue = 0;
119168
TileInfo toWork = null;
120-
for (TileInfo tileInfo : GetCityTiles()) {
169+
for (TileInfo tileInfo : getCityTiles()) {
121170
if (tileInfo.IsWorked || tileInfo.IsCityCenter()) continue;
122171
FullStats stats = tileInfo.GetTileStats();
123172

@@ -129,4 +178,17 @@ public void AutoAssignWorker() {
129178
}
130179
toWork.IsWorked = true;
131180
}
181+
182+
private double rankTile(TileInfo tile){
183+
FullStats stats = tile.GetTileStats();
184+
double rank=0;
185+
if(stats.Food<2) rank+=stats.Food;
186+
else rank += 2 + (stats.Food-2)/2; // 1 point for each food up to 2, from there on half a point
187+
rank+=stats.Gold/2;
188+
rank+=stats.Production;
189+
rank+=stats.Science;
190+
rank+=stats.Culture;
191+
if(tile.Improvement==null) rank+=0.5; // Improvement potential!
192+
return rank;
193+
}
132194
}

Diff for: core/src/com/unciv/civinfo/CivilizationInfo.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.unciv.civinfo;
22

33
import com.badlogic.gdx.math.Vector2;
4-
import com.unciv.game.pickerscreens.GameSaver;
54
import com.unciv.models.LinqCollection;
65
import com.unciv.models.gamebasics.GameBasics;
76
import com.unciv.models.stats.CivStats;
@@ -47,7 +46,7 @@ public void NextTurn()//out boolean displayTech)
4746
civStats.add(nextTurnStats);
4847
if(Cities.size() > 0) Tech.NextTurn(nextTurnStats.Science);
4948

50-
for (CityInfo city : Cities.as(CityInfo.class)) city.NextTurn();
49+
for (CityInfo city : Cities.as(CityInfo.class)) city.nextTurn();
5150

5251
for(TileInfo tile : tileMap.values()) if(tile.Unit!=null) tile.Unit.CurrentMovement = tile.Unit.MaxMovement;
5352

@@ -61,7 +60,7 @@ public CivStats GetStatsForNextTurn() {
6160
HashSet<String> LuxuryResources = new HashSet<String>();
6261
for (CityInfo city : Cities) {
6362
statsForTurn.add(city.getCityStats());
64-
LuxuryResources.addAll(city.GetLuxuryResources());
63+
LuxuryResources.addAll(city.getLuxuryResources());
6564
}
6665
statsForTurn.Happiness += LuxuryResources.size() * 5; // 5 happiness for each unique luxury in civ
6766

Diff for: core/src/com/unciv/civinfo/TileMap.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.unciv.models.LinqCollection;
88
import com.unciv.models.LinqHashMap;
99
import com.unciv.models.gamebasics.GameBasics;
10+
import com.unciv.models.gamebasics.ResourceType;
1011
import com.unciv.models.gamebasics.Terrain;
1112
import com.unciv.models.gamebasics.TileResource;
1213

@@ -58,11 +59,11 @@ public boolean evaluate(TileResource arg0) {
5859

5960
TileResource resource = null;
6061
if (Math.random() < 1 / 5f) {
61-
resource = GetRandomResource(TileResources, "Bonus");
62+
resource = GetRandomResource(TileResources, ResourceType.Bonus);
6263
} else if (Math.random() < 1 / 7f) {
63-
resource = GetRandomResource(TileResources, "Strategic");
64+
resource = GetRandomResource(TileResources, ResourceType.Strategic);
6465
} else if (Math.random() < 1 / 10f) {
65-
resource = GetRandomResource(TileResources, "Luxury");
66+
resource = GetRandomResource(TileResources, ResourceType.Luxury);
6667
}
6768
if (resource != null) tileInfo.Resource = resource.Name;
6869

@@ -77,7 +78,7 @@ public boolean evaluate(TileResource arg0) {
7778

7879
public LinqCollection<TileInfo> values(){return tiles.linqValues();}
7980

80-
public TileResource GetRandomResource(LinqCollection<TileResource> resources, final String resourceType) {
81+
public TileResource GetRandomResource(LinqCollection<TileResource> resources, final ResourceType resourceType) {
8182
return resources.where(new Predicate<TileResource>() {
8283
@Override
8384
public boolean evaluate(TileResource arg0) {

Diff for: core/src/com/unciv/game/CityScreen.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.badlogic.gdx.math.Vector2;
99
import com.badlogic.gdx.scenes.scene2d.Group;
1010
import com.badlogic.gdx.scenes.scene2d.InputEvent;
11-
import com.badlogic.gdx.scenes.scene2d.ui.Image;
1211
import com.badlogic.gdx.scenes.scene2d.ui.Label;
1312
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
1413
import com.badlogic.gdx.scenes.scene2d.ui.Table;
@@ -135,13 +134,13 @@ public void clicked(InputEvent event, float x, float y) {
135134
}
136135
});
137136

138-
if(!cityInfo.GetCityTiles().contains(tileInfo)) group.setColor(0,0,0,0.3f);
137+
if(!cityInfo.getCityTiles().contains(tileInfo)) group.setColor(0,0,0,0.3f);
139138
else if(!tileInfo.IsCityCenter()) {
140139
group.addPopulationIcon();
141140
group.populationImage.addListener(new ClickListener() {
142141
@Override
143142
public void clicked(InputEvent event, float x, float y) {
144-
if (cityInfo.GetFreePopulation() > 0 || tileInfo.IsWorked)
143+
if (cityInfo.getFreePopulation() > 0 || tileInfo.IsWorked)
145144
tileInfo.IsWorked = !tileInfo.IsWorked;
146145
updateCityTable();
147146
}
@@ -204,8 +203,8 @@ private void updateCityTable() {
204203
CityStatsValues.put("Food",stats.Food+" ("+cityInfo.cityPopulation.FoodStored+"/"+cityInfo.cityPopulation.FoodToNextPopulation()+")");
205204
CityStatsValues.put("Gold",stats.Gold+"");
206205
CityStatsValues.put("Science",stats.Science+"");
207-
CityStatsValues.put("Culture",stats.Culture+"");
208-
CityStatsValues.put("Population",cityInfo.GetFreePopulation()+"/"+cityInfo.cityPopulation.Population);
206+
CityStatsValues.put("Culture",stats.Culture+" ("+cityInfo.cultureStored+"/"+cityInfo.getCultureToNextTile()+")");
207+
CityStatsValues.put("Population",cityInfo.getFreePopulation()+"/"+cityInfo.cityPopulation.Population);
209208

210209
for(String key : CityStatsValues.keySet()){
211210
CityStatsTable.add(ImageGetter.getStatIcon(key)).align(Align.right);

Diff for: core/src/com/unciv/game/TileGroup.java

+12-6
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ public class TileGroup extends Group {
2828
addActor(terrainImage);
2929
}
3030

31+
3132
void addPopulationIcon(){
3233
populationImage = ImageGetter.getStatIcon("Population");
33-
populationImage.setAlign(Align.bottomRight);
34-
populationImage.setX(terrainImage.getWidth()-populationImage.getWidth());
34+
populationImage.moveBy(0, terrainImage.getHeight()-populationImage.getHeight()); // top left
3535
addActor(populationImage);
3636
}
3737

@@ -46,29 +46,35 @@ void update() {
4646
if (tileInfo.HasViewableResource() && resourceImage == null) { // Need to add the resource image!
4747
String fileName = "ResourceIcons/" + tileInfo.Resource + "_(Civ5).png";
4848
Image image = ImageGetter.getImageByFilename(fileName);
49-
image.setScale(0.5f);
50-
image.setOrigin(Align.topRight);
49+
image.setSize(20,20);
50+
image.moveBy(terrainImage.getWidth()-image.getWidth(), 0); // bottom right
5151
resourceImage = image;
5252
addActor(image);
5353
}
5454

5555
if (tileInfo.Unit != null && unitImage == null) {
5656
unitImage = ImageGetter.getImageByFilename("StatIcons/" + tileInfo.Unit.Name + "_(Civ5).png");
5757
addActor(unitImage);
58-
unitImage.setSize(20, 20);
58+
unitImage.setSize(20, 20); // not moved - is at bottom left
5959
}
6060

6161
if (tileInfo.Unit == null && unitImage != null) {
6262
unitImage.remove();
6363
unitImage = null;
6464
}
6565

66+
if(unitImage!=null){
67+
if(tileInfo.Unit.CurrentMovement==0) unitImage.setColor(Color.GRAY);
68+
else unitImage.setColor(Color.WHITE);
69+
}
70+
6671

6772
if (tileInfo.Improvement != null && improvementImage == null) {
6873
improvementImage = ImageGetter.getImageByFilename("ImprovementIcons/" + tileInfo.Improvement.replace(' ','_') + "_(Civ5).png");
6974
addActor(improvementImage);
7075
improvementImage.setSize(20, 20);
71-
improvementImage.moveBy(0, terrainImage.getHeight() - improvementImage.getHeight());
76+
improvementImage.moveBy(terrainImage.getWidth()-improvementImage.getWidth(),
77+
terrainImage.getHeight() - improvementImage.getHeight()); // top right
7278
}
7379

7480
if(populationImage!=null){

0 commit comments

Comments
 (0)