void spawnMissile(HomeMissileSpawnerComponent missile, int targetCollisionType, Vector2 position)
 {
     _pool.CreateEntity()
         .AddPosition(new Vector2().Set(position))
         .AddVelocity(new Vector2(0.0f, 0.0f))
         .AddVelocityLimit(missile.velocity)
         .AddHealth(0)
         .AddHomeMissile(0.0f)
         .AddFindTarget(targetCollisionType)
         .AddCollision(missile.collisionType)
         .AddDestroyEntityDelayed(SELF_DESTRUCTION_TIME)
         .AddResource(missile.resource);
 }
 void spawnMissile(HomeMissileSpawnerComponent missile, int targetCollisionType, Vector2 position)
 {
     _pool.CreateEntity()
     .AddPosition(new Vector2().Set(position))
     .AddVelocity(new Vector2(0.0f, 0.0f))
     .AddVelocityLimit(missile.velocity)
     .AddHealth(0)
     .AddHomeMissile(0.0f)
     .AddFindTarget(targetCollisionType)
     .AddCollision(missile.collisionType)
     .AddDestroyEntityDelayed(SELF_DESTRUCTION_TIME)
     .AddResource(missile.resource);
 }
 void spawnMissile(HomeMissileSpawnerComponent missile, int targetCollisionType, Vector2 position)
 {
     _pool.CreateEntity()
         .AddPosition(new Vector2(position.x, position.y))
         .AddVelocity(missile.startVelocity)
         .AddHealth(0)
         .AddHomeMissile(missile.followDelay, missile.velocity, targetCollisionType)
         .AddFindTarget(targetCollisionType)
         .AddCollision(missile.ownerCollisionType, missile.damage)
         .AddDestroyEntityDelayed(missile.selfDestructionDelay)
         .AddFaceDirection(true)
         .AddExplosionOnDeath(explosionOnDeathDuration, Resource.ExplosionMissile)
         .AddTrail(homeMissileTrailDuration)
         .AddResource(missile.resource);
 }
    public void Execute()
    {
        bool  canSpawnPlayer = canSpawnPlayerMissile();
        bool  canSpawnEnemy  = canSpawnEnemyMissile();
        float deltaTime      = _time.GetSingleEntity().time.deltaTime;

        foreach (Entity e in _missiles.GetEntities())
        {
            HomeMissileSpawnerComponent missile = e.homeMissileSpawner;
            missile.time -= deltaTime;
            if (missile.time < 0.0f)
            {
                missile.time = missile.spawnDelay;
                if (missile.collisionType == CollisionTypes.Player && canSpawnPlayer)
                {
                    spawnMissile(missile, CollisionTypes.Enemy, e.position.pos);
                }
                else if (missile.collisionType == CollisionTypes.Enemy && canSpawnEnemy)
                {
                    spawnMissile(missile, CollisionTypes.Player, e.position.pos);
                }
            }
        }
    }