riversong code showcase
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanieleMarotta.RiversongCodeShowcase
|
||||
{
|
||||
[GameSystemGroup(typeof(EarlyAgentsSystemGroup))]
|
||||
[UpdateBefore(typeof(AgentsSpawnTickSystem))]
|
||||
public class AgentSpawnCooldownSystem : GameSystem, IUpdatable
|
||||
{
|
||||
[InjectService]
|
||||
private IEntityCollection _entityCollection;
|
||||
|
||||
[InjectService]
|
||||
private World _world;
|
||||
|
||||
public AgentSpawnCooldownSystem(IServiceLocator serviceLocator) : base(serviceLocator)
|
||||
{
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
var laborEfficiencyModifier = _world.ProductionState.LaborEfficiencyModifier;
|
||||
|
||||
foreach (Building building in _entityCollection.GetInternalEntityList(typeof(Building)))
|
||||
{
|
||||
ref var agentSourceState = ref building.GetAgentSourceStateRW();
|
||||
ref var sleepState = ref building.GetSleepStateRW();
|
||||
|
||||
for (var jobIndex = 1; jobIndex < (int)AgentJob.Count; jobIndex++)
|
||||
{
|
||||
var cooldown = agentSourceState.SpawnCooldown[jobIndex];
|
||||
if (cooldown <= 0) continue;
|
||||
|
||||
var efficiencyMultiplier = Mathf.Max(0, 1 + sleepState.EfficiencyModifier + laborEfficiencyModifier);
|
||||
var dt = Time.deltaTime * efficiencyMultiplier;
|
||||
agentSourceState.SpawnCooldown[jobIndex] = Mathf.MoveTowards(cooldown, 0, dt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user