package com.spaceshooter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; public class EnemyRedship extends Enemy { private float bulletTimer; private float angryTimer; private Texture angryTexture; private Texture happyTexture; private boolean isAngry; private boolean alternateShot; private float angle; // Has two textures, one when it's firing, one when it's not. EnemyRedship() { super(50, ResourceManager.EnemyRedShip1); angryTexture = ResourceManager.getAssetManager().get( ResourceManager.EnemyRedShip1b, Texture.class); happyTexture = ResourceManager.getAssetManager().get( ResourceManager.EnemyRedShip1, Texture.class); setOrigin(getWidth() / 2, getHeight() / 2); bulletTimer = 0f; angryTimer = 0f; isAngry = false; alternateShot = false; angle = 0.0f; } public void updateEnemy(Player player, BulletManager bulletManager) { angle += Gdx.graphics.getDeltaTime() * 100f; angryTimer += (Gdx.graphics.getDeltaTime() / 5); if (isAngry == false) { if (angryTimer > 0.5f) { setTexture(angryTexture); isAngry = true; } } else if (isAngry == true) { bulletTimer += (Gdx.graphics.getDeltaTime() / 5); if (bulletTimer > 0.10f && alternateShot == false) { bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), SpaceShooter .getBulletSpeed() * (float) Math.cos(Math.PI / 3), SpaceShooter .getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), 0, SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), (-1f * SpaceShooter.getBulletSpeed()) * (float) Math.cos(Math.PI / 3), SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), SpaceShooter .getBulletSpeed() * (float) Math.cos(Math.PI / 3), SpaceShooter .getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), 0, SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), (-1f * SpaceShooter.getBulletSpeed()) * (float) Math.cos(Math.PI / 3), SpaceShooter.getBulletSpeed(), 0)); alternateShot = true; bulletTimer = 0; } if (bulletTimer > 0.10f && alternateShot == true) { bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), SpaceShooter .getBulletSpeed() * (float) Math.sin(Math.PI / 3), SpaceShooter .getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), 0, SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 118, getY(), (-1f * SpaceShooter.getBulletSpeed()) * (float) Math.sin(Math.PI / 3), SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), SpaceShooter .getBulletSpeed() * (float) Math.sin(Math.PI / 3), SpaceShooter .getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), 0, SpaceShooter.getBulletSpeed(), 0)); bulletManager.getList().add( new EnemyBulletBasic(getX() + 10, getY(), (-1f * SpaceShooter.getBulletSpeed()) * (float) Math.sin(Math.PI / 3), SpaceShooter.getBulletSpeed(), 0)); alternateShot = false; bulletTimer = 0; } if (angryTimer > 1.0f) { isAngry = false; setTexture(happyTexture); angryTimer = 0f; } } if (player != null) setPosition(getX() + 4f * (float) Math.sin(Math.toRadians(angle)), getY() - 30 * Gdx.graphics.getDeltaTime()); else setPosition(getX() + 4f * (float) Math.sin(Math.toRadians(angle)), getY() - 100 * Gdx.graphics.getDeltaTime()); } @Override public void hit() { // Turns clear instead of red when hit to make it easier for the player // to see. gotHit = true; setColor(Color.CLEAR); health--; if (health <= 0) isDead = true; } }