Harvest points can now be depleted

This commit is contained in:
Jonathan
2025-06-14 21:38:03 -04:00
parent a5964a68f8
commit 826717c47f
15 changed files with 52 additions and 38 deletions
@@ -27,7 +27,8 @@
Currently not considering running out of alloy and ether to harvest.
<br/>
<br/>
Build Calculator was built based on a much older version of the game and was only quickly modified for the June 2025 Playtest version, so the above disclaimer is only more true.
Build Calculator was built based on a much older version of the game and was only quickly modified for the
June 2025 Playtest version, so the above disclaimer is only more true.
<br/>
Expect even more oddities and invalid data then the above warning implies.
</Message>
@@ -32,7 +32,6 @@
}
@if (FilterService.GetFaction() == DataType.FACTION_Aru)
{
<option value="@DataType.IMMORTAL_Atzlan"
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Atzlan))">
Atzlan
@@ -42,7 +42,7 @@
}
}
</div>
<div>
<div>Depleted</div>
//TODO WIP
@@ -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))
+2 -2
View File
@@ -6,14 +6,14 @@
<LayoutLargeContentComponent>
<WebsiteTitleComponent>Data Tables</WebsiteTitleComponent>
<AlertComponent Type="@SeverityType.Warning">
<Title>Errors Present</Title>
<Message>
Incomplete feature for easily comparing unit stats.
</Message>
</AlertComponent>
<MudTabs Elevation="2">
<MudTabPanel Text="Attacks">
<WeaponTable/>
+1 -1
View File
@@ -8,7 +8,7 @@
<LayoutMediumContentComponent>
<WebsiteTitleComponent>Harass Calculator</WebsiteTitleComponent>
<AlertComponent Type="@SeverityType.Warning">
<Title>Might be out of date</Title>
<Message>
+1 -2
View File
@@ -77,5 +77,4 @@ builder.Services.AddScoped(sp => new HttpClient
builder.Services.AddMudServices();
await builder.Build().RunAsync();
await builder.Build().RunAsync();
+1 -1
View File
@@ -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;
+4 -4
View File
@@ -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);
+11
View File
@@ -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;
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ public enum KeyType
Train,
Research,
Construct,
Cancel,
Advance,
Economy,
+2 -5
View File
@@ -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",
-1
View File
@@ -136,7 +136,6 @@ public interface IWebsiteService
public bool IsLoaded();
}
public interface INoteService
{
public List<NoteContentModel> NoteContentModels { get; set; }
+6 -5
View File
@@ -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;
+18 -11
View File
@@ -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<EntityProductionModel>())
@@ -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;