From 27edacbac389a7f76f74074eacaad489e4ccb641 Mon Sep 17 00:00:00 2001
From: Matti Loimaranta <makalo@utu.fi>
Date: Sun, 3 Mar 2019 12:21:49 +0200
Subject: [PATCH] Upgrade max levels based on city level

---
 Assets/Scripts/Upgrades/CollectorUpgrade.cs          |  8 ++++++--
 Assets/Scripts/Upgrades/PopulationUpgrade.cs         | 10 +++++++---
 Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs   | 10 +++++++---
 Assets/Scripts/Upgrades/ResourceEfficiencyUpgrade.cs | 11 +++++++----
 Assets/Scripts/Upgrades/RoadUpgrade.cs               | 12 ++++++++----
 Assets/Scripts/Upgrades/Upgrade.cs                   |  9 +++++++--
 6 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/Assets/Scripts/Upgrades/CollectorUpgrade.cs b/Assets/Scripts/Upgrades/CollectorUpgrade.cs
index b5c72f5..698c69f 100644
--- a/Assets/Scripts/Upgrades/CollectorUpgrade.cs
+++ b/Assets/Scripts/Upgrades/CollectorUpgrade.cs
@@ -22,7 +22,11 @@ public class CollectorUpgrade : Upgrade
         UpgradeTargets target = UpgradeTargets.collector;
         City city = gameObject.GetComponent<City>();
         int currentLevel = city.GetLevel(target);
-        city.UseResources(GetPrices(currentLevel));
-        city.AddCollector();
+
+        if (currentLevel <= city.GetLevel(UpgradeTargets.city) * maxLevelModifier)
+        {
+            city.UseResources(GetPrices(currentLevel));
+            city.AddCollector();
+        }
     }
 }
diff --git a/Assets/Scripts/Upgrades/PopulationUpgrade.cs b/Assets/Scripts/Upgrades/PopulationUpgrade.cs
index fbda2c4..f9fa3da 100644
--- a/Assets/Scripts/Upgrades/PopulationUpgrade.cs
+++ b/Assets/Scripts/Upgrades/PopulationUpgrade.cs
@@ -21,8 +21,12 @@ public class PopulationUpgrade : Upgrade
         UpgradeTargets target = UpgradeTargets.population;
         City city = gameObject.GetComponent<City>();
         int currentLevel = city.GetLevel(target);
-        city.UseResources(GetPrices(currentLevel));
-        city.AddPopulation(currentLevel * 10);
-        Debug.Log("population upgraded");
+
+        if (currentLevel <= city.GetLevel(UpgradeTargets.city) * maxLevelModifier)
+        {
+            city.UseResources(GetPrices(currentLevel));
+            city.AddPopulation(currentLevel * 10);
+            Debug.Log("population upgraded");
+        }
     }
 }
diff --git a/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs b/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
index 45ac507..3f17ea3 100644
--- a/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
+++ b/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
@@ -21,9 +21,13 @@ public class ResourceCapacityUpgrade : Upgrade
         UpgradeTargets target = UpgradeTargets.capacity;
         City city = gameObject.GetComponent<City>();
         int currentLevel = city.GetLevel(target);
-        city.UseResources((GetPrices(currentLevel)));
-        city.IncreaseCapacity(currentLevel * 100);
-        Debug.Log("Capacity upgraded");
+
+        if (currentLevel <= city.GetLevel(UpgradeTargets.city) * maxLevelModifier)
+        {
+            city.UseResources((GetPrices(currentLevel)));
+            city.IncreaseCapacity(currentLevel * 100);
+            Debug.Log("Capacity upgraded");
+        }
     }
 
 }
diff --git a/Assets/Scripts/Upgrades/ResourceEfficiencyUpgrade.cs b/Assets/Scripts/Upgrades/ResourceEfficiencyUpgrade.cs
index 94cb070..ab8ee4a 100644
--- a/Assets/Scripts/Upgrades/ResourceEfficiencyUpgrade.cs
+++ b/Assets/Scripts/Upgrades/ResourceEfficiencyUpgrade.cs
@@ -7,7 +7,7 @@ public class ResourceEfficiencyUpgrade : Upgrade
     // Start is called before the first frame update
     void Start()
     {
-        
+        maxLevelModifier = 5;
     }
 
     // Update is called once per frame
@@ -19,8 +19,11 @@ public class ResourceEfficiencyUpgrade : Upgrade
     public void UpgradeEfficiency()
     {
         City city = gameObject.GetComponent<City>();
-        IncreaseEfficiencyLevel();
-        city.UseResources(GetPrices(GetEfficiencyLevel() * GetEfficiencyLevel()));
-        Debug.Log("Efficienfy upgraded to: " + GetEfficiencyLevel());
+        if (GetEfficiencyLevel() <= maxLevelModifier)
+        {
+            IncreaseEfficiencyLevel();
+            city.UseResources(GetPrices(GetEfficiencyLevel() * GetEfficiencyLevel()));
+            Debug.Log("Efficienfy upgraded to: " + GetEfficiencyLevel());
+        }
     }
 }
diff --git a/Assets/Scripts/Upgrades/RoadUpgrade.cs b/Assets/Scripts/Upgrades/RoadUpgrade.cs
index 329ef10..6ef9e4d 100644
--- a/Assets/Scripts/Upgrades/RoadUpgrade.cs
+++ b/Assets/Scripts/Upgrades/RoadUpgrade.cs
@@ -22,10 +22,14 @@ public class RoadUpgrade : Upgrade
         UpgradeTargets target = UpgradeTargets.speed;
         Road road = gameObject.GetComponent<Road>();
         City city = gameObject.GetComponent<City>();
-        float currentLevel = road.GetLevel(target);
-        city.UseResources(GetPrices(currentLevel));
-        road.IncreaseSpeed(1 / currentLevel);
-        Debug.Log("Road upgraded");
+        int currentLevel = (int) road.GetLevel(target);
+
+        if (currentLevel <= city.GetLevel(UpgradeTargets.city) * maxLevelModifier)
+        {
+            city.UseResources(GetPrices(currentLevel));
+            road.IncreaseSpeed(1 / currentLevel);
+            Debug.Log("Road upgraded");
+        }
     }
 
 }
diff --git a/Assets/Scripts/Upgrades/Upgrade.cs b/Assets/Scripts/Upgrades/Upgrade.cs
index 0dc875a..9bc13dc 100644
--- a/Assets/Scripts/Upgrades/Upgrade.cs
+++ b/Assets/Scripts/Upgrades/Upgrade.cs
@@ -8,7 +8,12 @@ public abstract class Upgrade : MonoBehaviour
 
     private float efficiencyLevel = 1;
 
-    private Dictionary<Resources, int> resources = new Dictionary<Resources, int>();
+    private Dictionary<Resource, int> resources = new Dictionary<Resource, int>()
+    {
+        { null , 1},
+        { null , 1},
+        { null , 0},
+    };
 
     // Start is called before the first frame update
     void Start()
@@ -58,7 +63,7 @@ public abstract class Upgrade : MonoBehaviour
     public List<int> GetPrices(float modifier)
     {
         List<int> prices = new List<int>();
-        foreach(KeyValuePair<Resources, int> key in resources)
+        foreach(KeyValuePair<Resource, int> key in resources)
         {
             prices.Add((int) (key.Value * modifier * 50 * GetEfficiency()));
         }
-- 
GitLab