public void Execute() { float deltaTime = _time.GetSingleEntity().time.deltaTime; foreach (Entity e in _missiles.GetEntities()) { CircleMissileSpawnerComponent missile = e.circleMissileSpawner; missile.time -= deltaTime; if (missile.time < 0.0f) { missile.time = missile.spawnDelay; spawnMissiles(missile, e.position.pos); } } }
void spawnMissiles(CircleMissileSpawnerComponent missile, Vector2 position) { float angleOffset = getAngle(missile.amount); float angle = 0.0f; float velocity = missile.velocity; for (int i = 0; i < missile.amount; i++) { float cosinus = Mathf.Cos(angle); float sinus = Mathf.Sin(angle); _pool.CreateEntity() .AddPosition(new Vector2().Set(position)) .AddVelocity(new Vector2(velocity * cosinus - velocity * sinus, velocity * sinus + velocity * cosinus)) .AddHealth(0) .AddCollision(missile.collisionType) .AddResource(missile.resource); angle = angle + angleOffset; } }