Browse Source

Other rider suggestions

main
Jonathan 11 months ago
parent
commit
7ca2f82ad7
  1. 48
      Services/Immortal/BuildOrderService.cs

48
Services/Immortal/BuildOrderService.cs

@ -58,7 +58,7 @@ public class BuildOrderService : IBuildOrderService
public void Add(EntityModel entity, int atInterval)
{
if (!_buildOrder.StartedOrders.ContainsKey(atInterval))
_buildOrder.StartedOrders.Add(atInterval, new List<EntityModel>());
_buildOrder.StartedOrders.Add(atInterval, []);
var production = entity.Production();
@ -66,21 +66,18 @@ public class BuildOrderService : IBuildOrderService
if (production != null) completedTime += production.BuildTime;
if (!_buildOrder.CompletedOrders.ContainsKey(completedTime))
_buildOrder.CompletedOrders.Add(completedTime, new List<EntityModel>());
_buildOrder.CompletedOrders.Add(completedTime, []);
_buildOrder.StartedOrders[atInterval].Add(entity.Clone());
_buildOrder.CompletedOrders[completedTime].Add(entity.Clone());
if (!_buildOrder.UniqueCompletedTimes.ContainsKey(entity.DataType))
_buildOrder.UniqueCompletedTimes.Add(entity.DataType, atInterval);
_buildOrder.UniqueCompletedTimes.TryAdd(entity.DataType, atInterval);
if (!_buildOrder.UniqueCompletedCount.ContainsKey(entity.DataType))
_buildOrder.UniqueCompletedCount.Add(entity.DataType, 1);
else
if (!_buildOrder.UniqueCompletedCount.TryAdd(entity.DataType, 1))
_buildOrder.UniqueCompletedCount[entity.DataType]++;
if (!_buildOrder.UniqueCompleted.ContainsKey(entity.DataType))
_buildOrder.UniqueCompleted.Add(entity.DataType, new List<EntityModel>());
_buildOrder.UniqueCompleted.Add(entity.DataType, []);
if (entity.Production()?.ProducedBy != null)
_buildOrder.TrainingCapacityUsed.Add(new TrainingCapacityUsedModel
@ -116,10 +113,10 @@ public class BuildOrderService : IBuildOrderService
_lastInterval += forInterval;
if (!_buildOrder.StartedOrders.ContainsKey(_lastInterval))
_buildOrder.StartedOrders.Add(_lastInterval, new List<EntityModel>());
_buildOrder.StartedOrders.Add(_lastInterval, []);
if (!_buildOrder.CompletedOrders.ContainsKey(_lastInterval))
_buildOrder.CompletedOrders.Add(_lastInterval, new List<EntityModel>());
_buildOrder.CompletedOrders.Add(_lastInterval, []);
NotifyDataChanged();
return true;
@ -140,10 +137,10 @@ public class BuildOrderService : IBuildOrderService
_lastInterval = interval;
if (!_buildOrder.StartedOrders.ContainsKey(_lastInterval))
_buildOrder.StartedOrders.Add(_lastInterval, new List<EntityModel>());
_buildOrder.StartedOrders.Add(_lastInterval, []);
if (!_buildOrder.CompletedOrders.ContainsKey(_lastInterval))
_buildOrder.CompletedOrders.Add(_lastInterval, new List<EntityModel>());
_buildOrder.CompletedOrders.Add(_lastInterval, []);
NotifyDataChanged();
return true;
@ -175,8 +172,9 @@ public class BuildOrderService : IBuildOrderService
if (supply == null || supply.Takes.Equals(0)) return 0;
foreach (var supplyAtTime in _buildOrder.SupplyCountTimes)
if (supply.Takes + _buildOrder.CurrentSupplyUsed <= supplyAtTime.Key)
foreach (var supplyAtTime in
_buildOrder.SupplyCountTimes
.Where(supplyAtTime => supply.Takes + _buildOrder.CurrentSupplyUsed <= supplyAtTime.Key))
return supplyAtTime.Value;
return null;
@ -199,8 +197,8 @@ public class BuildOrderService : IBuildOrderService
public void RemoveLast()
{
if (_buildOrder.StartedOrders.Keys.Count > 1)
{
if (_buildOrder.StartedOrders.Keys.Count <= 1) return;
if (_buildOrder.StartedOrders.Count == 0)
{
_buildOrder.StartedOrders.Remove(_buildOrder.StartedOrders.Last().Key);
@ -258,7 +256,6 @@ public class BuildOrderService : IBuildOrderService
NotifyDataChanged();
}
}
public string AsJson()
@ -352,17 +349,17 @@ public class BuildOrderService : IBuildOrderService
var uniqueCompleted = _buildOrder.UniqueCompleted[producedBy];
var shortestIncrement = int.MaxValue;
var trainingSlots = 0;
var didDelay = false;
foreach (var productionEntity in uniqueCompleted) trainingSlots += productionEntity.Supply()!.Grants;
var trainingSlots = uniqueCompleted.Sum(productionEntity => productionEntity.Supply()!.Grants);
while (true)
{
var usedSlots = 0;
foreach (var used in _buildOrder.TrainingCapacityUsed)
if (checkedInterval >= used.StartingUsageTime && checkedInterval < used.StopUsageTime)
foreach (var used in
_buildOrder.TrainingCapacityUsed
.Where(used => checkedInterval >= used.StartingUsageTime && checkedInterval < used.StopUsageTime))
{
usedSlots += used.UsedSlots;
var duration = used.StopUsageTime - used.StartingUsageTime;
@ -399,17 +396,16 @@ public class BuildOrderService : IBuildOrderService
for (var interval = atInterval; interval < withEconomy.GetOverTime().Count; interval++)
{
var economyAtSecond = withEconomy.GetOverTime()[interval];
if (economyAtSecond.Alloy >= production.Alloy
&& economyAtSecond.Ether >= production.Ether
&& economyAtSecond.Pyre >= production.Pyre)
{
if (!(economyAtSecond.Alloy >= production.Alloy)
|| !(economyAtSecond.Ether >= production.Ether)
|| !(economyAtSecond.Pyre >= production.Pyre)) continue;
atInterval = interval;
if (entity.EntityType != EntityType.Army) atInterval += _timingService.BuildingInputDelay;
return true;
}
}
if (withEconomy.GetOverTime().Last().Ether < production.Ether)
_toastService.AddToast(new ToastModel

Loading…
Cancel
Save