protected override void ProcessOneEntity(int entityId, float deltaTime) { // gather data for selection var enemySpawner = GameState.GameData.EnemySpawner[entityId]; // selection if (enemySpawner == null) { return; } // process data var es = enemySpawner.Value; var onCooldown = es.SpawnOnCooldown; if (onCooldown) { es.SpawnCooldownTime -= deltaTime; es.SpawnCooldownTime = MathHelper.Clamp(es.SpawnCooldownTime, 0.0f, _cooldownTime); } else { // spawn enemy var spawnPosition = new Vector2(RandomGenerator.Instance.GetRandomFloat(0, DeviceManager.Instance.ScreenWidth), -_distanceAboveScreenToSpawn); float velocity = RandomGenerator.Instance.GetRandomFloat(_minimumEnemyVelocity, _maximumEnemyVelocity); EnemyCreator.Create(spawnPosition, new Vector2(0.0f, velocity), GameState); // put on cooldown es.SpawnCooldownTime = _cooldownTime; } // update data GameState.GameData.EnemySpawner[entityId] = es; }