package com.spaceshooter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.MathUtils;
/*EnemyFactory spawns its own enemies*/
public class EnemyFactory extends Enemy {
private float spawnTimer;
private EnemyManager enemyManager;
private boolean hasChanged; //Returns true if the texture has changed.
private int type;
public EnemyFactory(EnemyManager enemyManager) {
super(50,ResourceManager.EnemyFactory);
spawnTimer = 0.0f;
hasChanged = false;
this.enemyManager = enemyManager;
type = MathUtils.random(0,2);
}
public void updateEnemy(Player player, BulletManager bulletManager) {
spawnTimer += (Gdx.graphics.getDeltaTime() / 5);
setY(getY() - 50 * Gdx.graphics.getDeltaTime());
if (player != null) {
float playerDist = (float) Math.sqrt(Math.pow(
getX() - player.getX(), 2)
+ Math.pow(getY() - player.getY(), 2));
//3 different types.
if (type == 0) {
if ((spawnTimer > 0.2f) && (playerDist < 600) && (getY() > player.getY())) {
enemyManager.addEnemy(new EnemyHoming(),getX() + (getWidth()/2) - 15,getY());
spawnTimer = 0f;
}
}
else if (type == 1) {
if ((spawnTimer > 0.2f) && (playerDist < 600) && (getY() > player.getY())) {
enemyManager.addEnemy(new EnemyPopcorn(),getX() + (getWidth()/2 - 15),getY());
spawnTimer = 0f;
}
}
else if (type == 2) {
if ((spawnTimer > 0.2f) && (playerDist < 600) && (getY() > player.getY())) {
enemyManager.addEnemy(new EnemySpinner(),getX() + (getWidth()/2 - 15),getY());
spawnTimer = 0f;
}
}
}
//Once it is almost destroyed, change to a fitting texture.
if (health < 15 && !hasChanged) {
setTexture(ResourceManager.getAssetManager().get(ResourceManager.EnemyFactoryDestroyed,Texture.class));
hasChanged = true;
}
}
}