package com.spaceshooter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; public class EnemyTongue extends Enemy { private float bulletTimer; private float tongueTimer; private Texture normalTexture; private Texture tongueTexture; private boolean tongueOut; private boolean alternateShot; private float angle; private EnemyManager enemyManager; private boolean straightShot; //Can only get hurt when its tongue is out. EnemyTongue(EnemyManager enemyManager) { super(40, ResourceManager.EnemyTongue); this.enemyManager = enemyManager; normalTexture = ResourceManager.getAssetManager().get( ResourceManager.EnemyTongue, Texture.class); tongueTexture = ResourceManager.getAssetManager().get( ResourceManager.EnemyTongueOut, Texture.class); setOrigin(getWidth() / 2, getHeight() / 2); bulletTimer = 0f; tongueTimer = 0f; tongueOut = false; alternateShot = false; angle= 0.0f; straightShot = false; } public void updateEnemy(Player player, BulletManager bulletManager) { angle += Gdx.graphics.getDeltaTime()*100f; tongueTimer += (Gdx.graphics.getDeltaTime() / 5); if (tongueOut == true) { if (tongueTimer > 0.5f) { setTexture(normalTexture); isInvincible = true; tongueOut = false; tongueTimer = 0f; if (!straightShot) straightShot = true; else straightShot = false; } } else if (tongueOut == false) { bulletTimer += (Gdx.graphics.getDeltaTime() / 5); if (!straightShot) { 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; } } else { if (player != null) { if (bulletTimer > 0.5f && (getY() > player.getY())) { enemyManager.addEnemy( new EnemyMissile(),getX() + 118, getY()); enemyManager.addEnemy( new EnemyMissile(),getX() + 10, getY()); bulletTimer = 0.0f; } } } if (tongueTimer > 1.0f && !tongueOut) { tongueOut = true; isInvincible = false; setTexture(tongueTexture); tongueTimer = 0f; } } if (player != null) { if (getY() > (player.getY() + 200)) setPosition(getX() + 2f*(float)Math.sin(Math.toRadians(angle)),getY() - 30*Gdx.graphics.getDeltaTime()); else setPosition(getX() + 2f*(float)Math.sin(Math.toRadians(angle)),getY() + 60*Gdx.graphics.getDeltaTime()); } else setPosition(getX() + 4f*(float)Math.sin(Math.toRadians(angle)),getY() - 100*Gdx.graphics.getDeltaTime()); } }