Depleted
//TODO WIP
diff --git a/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor b/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
index 3ebea29..5d266fb 100644
--- a/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
+++ b/IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
@@ -343,10 +343,10 @@
{
var hotkey = KeyService.GetHotkey();
- if(hotkey is "`")
+ if (hotkey is "`")
HandleCancelEntity();
- if (EntityFromKey(hotkey, out var entity))
+ if (EntityFromKey(hotkey, out var entity))
return;
if (BuildOrderService.Add(entity!, EconomyService))
diff --git a/IGP/Pages/DataTables/DataTablesPage.razor b/IGP/Pages/DataTables/DataTablesPage.razor
index 0d2db5f..f5ecf65 100644
--- a/IGP/Pages/DataTables/DataTablesPage.razor
+++ b/IGP/Pages/DataTables/DataTablesPage.razor
@@ -6,14 +6,14 @@
Data Tables
-
+
Errors Present
Incomplete feature for easily comparing unit stats.
-
+
diff --git a/IGP/Pages/HarassCalculatorPage.razor b/IGP/Pages/HarassCalculatorPage.razor
index 7769c6c..1e9fbb3 100644
--- a/IGP/Pages/HarassCalculatorPage.razor
+++ b/IGP/Pages/HarassCalculatorPage.razor
@@ -8,7 +8,7 @@
Harass Calculator
-
+
Might be out of date
diff --git a/IGP/Program.cs b/IGP/Program.cs
index 805001a..62bba37 100644
--- a/IGP/Program.cs
+++ b/IGP/Program.cs
@@ -77,5 +77,4 @@ builder.Services.AddScoped(sp => new HttpClient
builder.Services.AddMudServices();
-await builder.Build().RunAsync();
-
+await builder.Build().RunAsync();
\ No newline at end of file
diff --git a/Model/BuildOrders/BuildToCompareModel.cs b/Model/BuildOrders/BuildToCompareModel.cs
index 4779a10..86c8391 100644
--- a/Model/BuildOrders/BuildToCompareModel.cs
+++ b/Model/BuildOrders/BuildToCompareModel.cs
@@ -20,7 +20,7 @@ public class BuildToCompareModel
Faction.Equals(DataType.FACTION_QRath)
? DataType.BUPGRADE_MiningLevel2_QRath
: DataType.BUPGRADE_MiningLevel2_Aru];
-
+
public int NumberOfTownHallExpansions
{
get => numberOfTownHallExpansions;
diff --git a/Model/Entity/Data/Ids_Entity.cs b/Model/Entity/Data/Ids_Entity.cs
index 99688e8..8f60f95 100644
--- a/Model/Entity/Data/Ids_Entity.cs
+++ b/Model/Entity/Data/Ids_Entity.cs
@@ -85,13 +85,13 @@ public static class DataType
public static string BUILDING_ApostleOfBinding = nameof(BUILDING_ApostleOfBinding);
public static string BUILDING_GroveHeart = nameof(BUILDING_GroveHeart);
public static string BUILDING_EtherMaw = nameof(BUILDING_EtherMaw);
-
+
public static string BUPGRADE_MiningLevel2_QRath = nameof(BUPGRADE_MiningLevel2_QRath);
public static string BUPGRADE_MiningLevel2_Aru = nameof(BUPGRADE_MiningLevel2_Aru);
public static string CONVERSION_EtherSruge_QRath = nameof(CONVERSION_EtherSruge_QRath);
public static string CONVERSION_EtherSruge_Aru = nameof(CONVERSION_EtherSruge_Aru);
-
+
public static string BUPGRADE_GodHeart = nameof(BUPGRADE_GodHeart);
public static string BUPGRADE_Omnivore = nameof(BUPGRADE_Omnivore);
public static string BUILDING_LegionHall = nameof(BUILDING_LegionHall);
@@ -270,10 +270,10 @@ public static class DataType
public static string VANGUARD_WhiteWoodReaper_Xol = nameof(VANGUARD_WhiteWoodReaper_Xol);
public static string VANGUARD_DreadSister_Mala = nameof(VANGUARD_DreadSister_Mala);
public static string VANGUARD_Incubator_Mala = nameof(VANGUARD_Incubator_Mala);
-
+
public static string WORKER_Mote = nameof(WORKER_Mote);
public static string WORKER_Symbiote = nameof(WORKER_Symbiote);
-
+
public static string UNIT_Sipari = nameof(UNIT_Sipari);
public static string UNIT_Zephyr = nameof(UNIT_Zephyr);
public static string UNIT_Magi = nameof(UNIT_Magi);
diff --git a/Model/Entity/Parts/EntityHarvestModel.cs b/Model/Entity/Parts/EntityHarvestModel.cs
index e92cef5..cf90707 100644
--- a/Model/Entity/Parts/EntityHarvestModel.cs
+++ b/Model/Entity/Parts/EntityHarvestModel.cs
@@ -11,4 +11,15 @@ public class EntityHarvestModel : IEntityPartInterface
public float HarvestDelay { get; set; } = 1;
public int TotalAmount { get; set; }
public bool RequiresWorker { get; set; }
+
+ public float StartedAt { get; set; }
+
+ public bool IsDepleted(float interval)
+ {
+ var lifeTime = interval - StartedAt;
+
+ var totalHarvested = (lifeTime - 1) * HarvestedPerInterval;
+
+ return totalHarvested > TotalAmount;
+ }
}
\ No newline at end of file
diff --git a/Model/Hotkeys/HotKeyType.cs b/Model/Hotkeys/HotKeyType.cs
index b8cc626..74a6eeb 100644
--- a/Model/Hotkeys/HotKeyType.cs
+++ b/Model/Hotkeys/HotKeyType.cs
@@ -9,7 +9,7 @@ public enum KeyType
Train,
Research,
Construct,
-
+
Cancel,
Advance,
Economy,
diff --git a/Model/Hotkeys/HotkeyModel.cs b/Model/Hotkeys/HotkeyModel.cs
index 7360c7e..c58821d 100644
--- a/Model/Hotkeys/HotkeyModel.cs
+++ b/Model/Hotkeys/HotkeyModel.cs
@@ -19,16 +19,13 @@ public class HotkeyModel
return KeyType == KeyType.Action ? "#404146"
: KeyType == KeyType.Cancel ? "#621b1b"
: KeyType == KeyType.ControlGroup ? "#443512"
-
: KeyType == KeyType.Army ? "#443512"
: KeyType == KeyType.Train ? "#124443"
: KeyType == KeyType.Research ? "#221244"
: KeyType == KeyType.Construct ? "#122844"
- : KeyType == KeyType.Pyre ? "#441212"
-
+ : KeyType == KeyType.Pyre ? "#441212"
: KeyType == KeyType.Advance ? "#23262c"
: KeyType == KeyType.Economy ? "#262c23"
-
: "#37393F";
}
@@ -78,7 +75,7 @@ public class HotkeyModel
PositionX = 0,
PositionY = 0
},
-
+
new()
{
KeyText = "TAB",
diff --git a/Services/IServices.cs b/Services/IServices.cs
index 6f44244..2b23214 100644
--- a/Services/IServices.cs
+++ b/Services/IServices.cs
@@ -136,7 +136,6 @@ public interface IWebsiteService
public bool IsLoaded();
}
-
public interface INoteService
{
public List NoteContentModels { get; set; }
diff --git a/Services/Immortal/BuildOrderService.cs b/Services/Immortal/BuildOrderService.cs
index 2e6b7ce..6410039 100644
--- a/Services/Immortal/BuildOrderService.cs
+++ b/Services/Immortal/BuildOrderService.cs
@@ -172,7 +172,7 @@ public class BuildOrderService : IBuildOrderService
if (supply == null || supply.Takes.Equals(0)) return 0;
- foreach (var supplyAtTime in
+ foreach (var supplyAtTime in
_buildOrder.SupplyCountTimes
.Where(supplyAtTime => supply.Takes + _buildOrder.CurrentSupplyUsed <= supplyAtTime.Key))
return supplyAtTime.Value;
@@ -198,7 +198,7 @@ public class BuildOrderService : IBuildOrderService
public void RemoveLast()
{
if (_buildOrder.StartedOrders.Keys.Count <= 1) return;
-
+
if (_buildOrder.StartedOrders.Count == 0)
{
_buildOrder.StartedOrders.Remove(_buildOrder.StartedOrders.Last().Key);
@@ -357,9 +357,10 @@ public class BuildOrderService : IBuildOrderService
while (true)
{
var usedSlots = 0;
- foreach (var used in
+ foreach (var used in
_buildOrder.TrainingCapacityUsed
- .Where(used => checkedInterval >= used.StartingUsageTime && checkedInterval < used.StopUsageTime))
+ .Where(used =>
+ checkedInterval >= used.StartingUsageTime && checkedInterval < used.StopUsageTime))
{
usedSlots += used.UsedSlots;
var duration = used.StopUsageTime - used.StartingUsageTime;
@@ -399,7 +400,7 @@ public class BuildOrderService : IBuildOrderService
if (!(economyAtSecond.Alloy >= production.Alloy)
|| !(economyAtSecond.Ether >= production.Ether)
|| !(economyAtSecond.Pyre >= production.Pyre)) continue;
-
+
atInterval = interval;
if (entity.EntityType != EntityType.Army) atInterval += _timingService.BuildingInputDelay;
diff --git a/Services/Immortal/EconomyService.cs b/Services/Immortal/EconomyService.cs
index e5da889..1c90931 100644
--- a/Services/Immortal/EconomyService.cs
+++ b/Services/Immortal/EconomyService.cs
@@ -67,8 +67,8 @@ public class EconomyService : IEconomyService
public EconomyModel GetEconomy(int atInterval)
{
- return atInterval >= buildEconomyOverTime.Count
- ? buildEconomyOverTime.Last()
+ return atInterval >= buildEconomyOverTime.Count
+ ? buildEconomyOverTime.Last()
: buildEconomyOverTime[atInterval];
}
@@ -84,10 +84,12 @@ public class EconomyService : IEconomyService
EconomyModel economyAtSecond)
{
if (!buildOrder.CompletedOrders.TryGetValue(interval, out var completedAtInterval)) return;
-
+
foreach (var newEntity in completedAtInterval)
{
- economyAtSecond.HarvestPoints.Add(newEntity);
+ var entity = newEntity.Clone();
+ entity.Harvest().StartedAt = interval;
+ economyAtSecond.HarvestPoints.Add(entity);
var production = newEntity.Production();
if (production is { RequiresWorker: true }) economyAtSecond.BusyWorkerCount -= 1;
@@ -99,7 +101,7 @@ public class EconomyService : IEconomyService
{
if (!buildOrder.StartedOrders.TryGetValue(interval, out var ordersAtTime)) return;
- foreach (var production in
+ foreach (var production in
ordersAtTime.Select(order => EntityModel.GetDictionary()[order.DataType])
.Select(foundEntity => foundEntity.Production())
.OfType())
@@ -107,7 +109,7 @@ public class EconomyService : IEconomyService
economyAtSecond.Alloy -= production.Alloy;
economyAtSecond.Ether -= production.Ether;
economyAtSecond.Pyre -= production.Pyre;
-
+
if (production.RequiresWorker) economyAtSecond.BusyWorkerCount += 1;
if (production.ConsumesWorker) economyAtSecond.WorkerCount -= 1;
}
@@ -116,7 +118,7 @@ public class EconomyService : IEconomyService
private static void MakeNeededNewWorkersRequests(int workersNeeded, EconomyModel economyAtSecond)
{
if (workersNeeded <= economyAtSecond.CreatingWorkerCount) return;
-
+
economyAtSecond.CreatingWorkerCount += 1;
economyAtSecond.CreatingWorkerDelays.Add(20);
}
@@ -129,12 +131,12 @@ public class EconomyService : IEconomyService
var createdWorkers = 0;
if (economyAtSecond.CreatingWorkerCount <= 0) return createdWorkers;
-
+
for (var i = 0; i < economyAtSecond.CreatingWorkerDelays.Count; i++)
if (economyAtSecond.CreatingWorkerDelays[i] > 0)
{
if (!(economyAtSecond.Alloy > 2.5f)) continue;
-
+
economyAtSecond.Alloy -= 2.5f;
economyAtSecond.CreatingWorkerDelays[i]--;
}
@@ -157,9 +159,13 @@ public class EconomyService : IEconomyService
{
var workersNeeded = 0;
- foreach (var harvesterPoint in
+
+ foreach (var harvesterPoint in
economyAtSecond.HarvestPoints.Select(entity => entity.Harvest()))
{
+ if (harvesterPoint.IsDepleted(economyAtSecond.Interval))
+ continue;
+
switch (harvesterPoint.RequiresWorker)
{
case true:
@@ -167,9 +173,10 @@ public class EconomyService : IEconomyService
if (harvesterPoint.Resource == ResourceType.Alloy)
{
var usedWorkers = Math.Min(harvesterPoint.Slots, freeWorkers);
+
economyAtSecond.Alloy += harvesterPoint.HarvestedPerInterval * usedWorkers;
economyAtSecond.AlloyIncome += harvesterPoint.HarvestedPerInterval * usedWorkers;
-
+
freeWorkers -= usedWorkers;
if (usedWorkers < harvesterPoint.Slots) workersNeeded += 1;