public void ProcessGenerators() { for (int i = 0; i < generators.Count; i++) { ref GeneratorInfo generator = ref generators.Data[i]; if (!eventLayout[generator.EventPos].IsEventActive) { // Generator is inactive (and recharging) generator.TimeLeft -= Time.TimeMult; } else if (generator.SpawnedActor == null || generator.SpawnedActor.ParentScene == null) { if (generator.TimeLeft <= 0f) { // Generator is active and is ready to spawn new actor generator.TimeLeft = generator.Delay * Time.FramesPerSecond; int x = generator.EventPos % layoutWidth; int y = generator.EventPos / layoutWidth; ActorBase actor = levelHandler.EventSpawner.SpawnEvent(ActorInstantiationFlags.IsFromGenerator, generator.EventType, x, y, LevelHandler.MainPlaneZ, generator.EventParams); if (actor != null) { levelHandler.AddActor(actor); generator.SpawnedActor = actor; } } else { // Generator is active and recharging generator.TimeLeft -= Time.TimeMult; } } }