@ -67,8 +67,8 @@ public class EconomyService : IEconomyService
public EconomyModel GetEconomy ( int atInterval )
public EconomyModel GetEconomy ( int atInterval )
{
{
return atInterval > = buildEconomyOverTime . Count
return atInterval > = buildEconomyOverTime . Count
? buildEconomyOverTime . Last ( )
? buildEconomyOverTime . Last ( )
: buildEconomyOverTime [ atInterval ] ;
: buildEconomyOverTime [ atInterval ] ;
}
}
@ -84,10 +84,12 @@ public class EconomyService : IEconomyService
EconomyModel economyAtSecond )
EconomyModel economyAtSecond )
{
{
if ( ! buildOrder . CompletedOrders . TryGetValue ( interval , out var completedAtInterval ) ) return ;
if ( ! buildOrder . CompletedOrders . TryGetValue ( interval , out var completedAtInterval ) ) return ;
foreach ( var newEntity in completedAtInterval )
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 ( ) ;
var production = newEntity . Production ( ) ;
if ( production is { RequiresWorker : true } ) economyAtSecond . BusyWorkerCount - = 1 ;
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 ;
if ( ! buildOrder . StartedOrders . TryGetValue ( interval , out var ordersAtTime ) ) return ;
foreach ( var production in
foreach ( var production in
ordersAtTime . Select ( order = > EntityModel . GetDictionary ( ) [ order . DataType ] )
ordersAtTime . Select ( order = > EntityModel . GetDictionary ( ) [ order . DataType ] )
. Select ( foundEntity = > foundEntity . Production ( ) )
. Select ( foundEntity = > foundEntity . Production ( ) )
. OfType < EntityProductionModel > ( ) )
. OfType < EntityProductionModel > ( ) )
@ -107,7 +109,7 @@ public class EconomyService : IEconomyService
economyAtSecond . Alloy - = production . Alloy ;
economyAtSecond . Alloy - = production . Alloy ;
economyAtSecond . Ether - = production . Ether ;
economyAtSecond . Ether - = production . Ether ;
economyAtSecond . Pyre - = production . Pyre ;
economyAtSecond . Pyre - = production . Pyre ;
if ( production . RequiresWorker ) economyAtSecond . BusyWorkerCount + = 1 ;
if ( production . RequiresWorker ) economyAtSecond . BusyWorkerCount + = 1 ;
if ( production . ConsumesWorker ) economyAtSecond . WorkerCount - = 1 ;
if ( production . ConsumesWorker ) economyAtSecond . WorkerCount - = 1 ;
}
}
@ -116,7 +118,7 @@ public class EconomyService : IEconomyService
private static void MakeNeededNewWorkersRequests ( int workersNeeded , EconomyModel economyAtSecond )
private static void MakeNeededNewWorkersRequests ( int workersNeeded , EconomyModel economyAtSecond )
{
{
if ( workersNeeded < = economyAtSecond . CreatingWorkerCount ) return ;
if ( workersNeeded < = economyAtSecond . CreatingWorkerCount ) return ;
economyAtSecond . CreatingWorkerCount + = 1 ;
economyAtSecond . CreatingWorkerCount + = 1 ;
economyAtSecond . CreatingWorkerDelays . Add ( 2 0 ) ;
economyAtSecond . CreatingWorkerDelays . Add ( 2 0 ) ;
}
}
@ -129,12 +131,12 @@ public class EconomyService : IEconomyService
var createdWorkers = 0 ;
var createdWorkers = 0 ;
if ( economyAtSecond . CreatingWorkerCount < = 0 ) return createdWorkers ;
if ( economyAtSecond . CreatingWorkerCount < = 0 ) return createdWorkers ;
for ( var i = 0 ; i < economyAtSecond . CreatingWorkerDelays . Count ; i + + )
for ( var i = 0 ; i < economyAtSecond . CreatingWorkerDelays . Count ; i + + )
if ( economyAtSecond . CreatingWorkerDelays [ i ] > 0 )
if ( economyAtSecond . CreatingWorkerDelays [ i ] > 0 )
{
{
if ( ! ( economyAtSecond . Alloy > 2.5f ) ) continue ;
if ( ! ( economyAtSecond . Alloy > 2.5f ) ) continue ;
economyAtSecond . Alloy - = 2.5f ;
economyAtSecond . Alloy - = 2.5f ;
economyAtSecond . CreatingWorkerDelays [ i ] - - ;
economyAtSecond . CreatingWorkerDelays [ i ] - - ;
}
}
@ -157,9 +159,13 @@ public class EconomyService : IEconomyService
{
{
var workersNeeded = 0 ;
var workersNeeded = 0 ;
foreach ( var harvesterPoint in
foreach ( var harvesterPoint in
economyAtSecond . HarvestPoints . Select ( entity = > entity . Harvest ( ) ) )
economyAtSecond . HarvestPoints . Select ( entity = > entity . Harvest ( ) ) )
{
{
if ( harvesterPoint . IsDepleted ( economyAtSecond . Interval ) )
continue ;
switch ( harvesterPoint . RequiresWorker )
switch ( harvesterPoint . RequiresWorker )
{
{
case true :
case true :
@ -167,9 +173,10 @@ public class EconomyService : IEconomyService
if ( harvesterPoint . Resource = = ResourceType . Alloy )
if ( harvesterPoint . Resource = = ResourceType . Alloy )
{
{
var usedWorkers = Math . Min ( harvesterPoint . Slots , freeWorkers ) ;
var usedWorkers = Math . Min ( harvesterPoint . Slots , freeWorkers ) ;
economyAtSecond . Alloy + = harvesterPoint . HarvestedPerInterval * usedWorkers ;
economyAtSecond . Alloy + = harvesterPoint . HarvestedPerInterval * usedWorkers ;
economyAtSecond . AlloyIncome + = harvesterPoint . HarvestedPerInterval * usedWorkers ;
economyAtSecond . AlloyIncome + = harvesterPoint . HarvestedPerInterval * usedWorkers ;
freeWorkers - = usedWorkers ;
freeWorkers - = usedWorkers ;
if ( usedWorkers < harvesterPoint . Slots ) workersNeeded + = 1 ;
if ( usedWorkers < harvesterPoint . Slots ) workersNeeded + = 1 ;