Skip to content

Commit 33d631b

Browse files
Merge pull request #367 from C7-Game/241-Remove-Citizens-From-Destroyed-Cities
2 parents c9f6d79 + 0d69f0b commit 33d631b

File tree

4 files changed

+31
-11
lines changed

4 files changed

+31
-11
lines changed

C7Engine/EntryPoints/CityInteractions.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,14 @@ public static void BuildCity(int x, int y, string playerGuid, string name)
2121
tileWithNewCity.cityAtTile = newCity;
2222
tileWithNewCity.overlays.road = true;
2323
}
24+
25+
public static void DestroyCity(int x, int y) {
26+
Tile tile = EngineStorage.gameData.map.tileAt(x, y);
27+
tile.DisbandNonDefendingUnits();
28+
tile.cityAtTile.RemoveAllCitizens();
29+
tile.cityAtTile.owner.cities.Remove(tile.cityAtTile);
30+
EngineStorage.gameData.cities.Remove(tile.cityAtTile);
31+
tile.cityAtTile = null;
32+
}
2433
}
2534
}

C7Engine/EntryPoints/TurnHandling.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,7 @@ internal static void AdvanceTurn()
115115
if (newSize <= 0) {
116116
log.Error($"Attempting to remove the last resident from {city}");
117117
} else {
118-
for (int i = 0; i < diff; i++) {
119-
city.removeCitizen();
120-
}
118+
city.RemoveCitizens(diff);
121119
}
122120
}
123121

@@ -137,9 +135,7 @@ internal static void AdvanceTurn()
137135
city.owner.AddUnit(newUnit);
138136

139137
if (newUnit.unitType.populationCost > 0) {
140-
for (int i = 0; i < newUnit.unitType.populationCost; i++) {
141-
city.removeCitizen();
142-
}
138+
city.RemoveCitizens(newUnit.unitType.populationCost);
143139
}
144140
}
145141
city.SetItemBeingProduced(CityProductionAI.GetNextItemToBeProduced(city, producedItem));

C7Engine/MapUnitExtensions.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,7 @@ public static void OnEnterTile(this MapUnit unit, Tile tile)
300300

301301
// Destroy enemy city on tile
302302
if (tile.HasCity && !unit.owner.IsAtPeaceWith(tile.cityAtTile.owner)) {
303-
tile.DisbandNonDefendingUnits();
304-
tile.cityAtTile.owner.cities.Remove(tile.cityAtTile);
305-
EngineStorage.gameData.cities.Remove(tile.cityAtTile);
306-
tile.cityAtTile = null;
303+
CityInteractions.DestroyCity(tile.xCoordinate, tile.yCoordinate);
307304
}
308305
}
309306

C7GameData/City.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using Serilog;
23

34
namespace C7GameData
45
{
@@ -135,11 +136,28 @@ private int FoodGrowthPerTurn()
135136
return CurrentFoodYield() - size * 2;
136137
}
137138

138-
public void removeCitizen() {
139+
private void RemoveCitizen() {
139140
residents[residents.Count - 1].tileWorked.personWorkingTile = null;
140141
residents.RemoveAt(residents.Count - 1);
141142
}
142143

144+
public void RemoveCitizens(int number) {
145+
for (int i = 0; i < number; i++) {
146+
if (residents.Count > 0) {
147+
RemoveCitizen();
148+
} else {
149+
Log.Warning("Trying to remove last citizen from " + name);
150+
break;
151+
}
152+
}
153+
}
154+
155+
public void RemoveAllCitizens() {
156+
while (residents.Count > 0) {
157+
RemoveCitizen();
158+
}
159+
}
160+
143161
public override string ToString() {
144162
return $"{name} ({size})";
145163
}

0 commit comments

Comments
 (0)