Skip to content

Commit 46f677b

Browse files
authored
Merge pull request #837 from stavrosfa/improvement/terrain-improvements-relacements
Terrain improvements enchancements
2 parents 4856b3e + c15fbb4 commit 46f677b

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

C7/Game.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -805,11 +805,24 @@ private void ProcessAction(string currentAction) {
805805

806806
Terraform terraform = C7Action.ToTerraform(currentAction);
807807

808-
if (terraform != null
809-
&& CurrentlySelectedUnit != MapUnit.NONE
810-
&& CurrentlySelectedUnit.canPerformTerraformAction(terraform)) {
811-
new MsgStartWorkerJob(CurrentlySelectedUnit?.id, terraform).send();
808+
if (CurrentlySelectedUnit == MapUnit.NONE || CurrentlySelectedUnit == null
809+
|| terraform == null || !CurrentlySelectedUnit.canPerformTerraformAction(terraform))
810+
return;
811+
812+
TerrainImprovement currentImprovement = CurrentlySelectedUnit.location.overlays.ImprovementAtLayer(terraform);
813+
if (currentImprovement != null && terraform.Improvement.upgradesFrom != currentImprovement) {
814+
popupOverlay.ShowPopup(
815+
new ConfirmationPopup(
816+
$"A previous terrain enhancement ({currentImprovement.key.Capitalize()}) will be replaced \nby this operation. Do you wish to continue?",
817+
"Continue.",
818+
"Cancel action.",
819+
() => {
820+
new MsgStartWorkerJob(CurrentlySelectedUnit.id, terraform).send();
821+
}),
822+
PopupOverlay.PopupCategory.Advisor);
823+
return;
812824
}
825+
new MsgStartWorkerJob(CurrentlySelectedUnit.id, terraform).send();
813826
}
814827

815828
private void setGotoMode(bool isOn) {

C7Engine/C7GameData/TerrainImprovement.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,12 @@ public int GetYieldBonus(TerrainType terrain, Tile.YieldType yieldType) {
8484

8585
return 0;
8686
}
87+
88+
public bool CanBeReplacedBy(TerrainImprovement replacement) {
89+
if (this.key == replacement.key) return false; // mine-mine
90+
if (this.upgradesFrom == replacement) return false; // railroad upgrades from road so road cannot replace railroad
91+
if (replacement.upgradesFrom == this) return true; // railroad upgrades from road so railroad can replace road
92+
return this.layer == replacement.layer; // irrigation can replace mine and vice versa, an outpost a radar tower, etc
93+
}
8794
}
8895
}

C7Engine/C7GameData/Tile.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,12 @@ public TerrainImprovement ImprovementAtLayer(TerrainImprovement.Layer layer) {
772772
return ti;
773773
}
774774

775+
public TerrainImprovement ImprovementAtLayer(Terraform terraform) {
776+
TerrainImprovement.Layer currentLayer = terraform.Improvement.layer;
777+
terrainImprovementByLayer.TryGetValue(currentLayer, out TerrainImprovement ti);
778+
return ti;
779+
}
780+
775781
public bool HasImprovement(TerrainImprovement improvement) {
776782
return terrainImprovementByLayer.TryGetValue(improvement.layer, out TerrainImprovement val) && val == improvement;
777783
}
@@ -787,10 +793,7 @@ public bool CanAdd(TerrainImprovement improvement) {
787793
if (!terrainImprovementByLayer.TryGetValue(improvement.layer, out var current))
788794
return improvement.upgradesFrom == null;
789795

790-
if (current == improvement || current.upgradesFrom == improvement)
791-
return false;
792-
793-
return improvement.upgradesFrom == current;
796+
return current.CanBeReplacedBy(improvement);
794797
}
795798

796799
public bool HasRoad() {

0 commit comments

Comments
 (0)