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); } } } }