package zero1hd.polyjet.entity; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Pool; import zero1hd.polyjet.entity.ally.Laser; import zero1hd.polyjet.entity.enemies.Bar; import zero1hd.polyjet.entity.enemies.Flake; import zero1hd.polyjet.entity.enemies.Pellet; import zero1hd.polyjet.entity.enemies.Shard; import zero1hd.polyjet.entity.enemies.VoidCircle; public class EntityController { AssetManager assets; public ShapeRenderer shapes; public Array activeAllies; public Array activeEnemies; //Enemy pool declaration; private Pool voidCirclePool; private Pool pelletPool; private Pool shardPool; private Pool barPool; private Pool flakePool; //Ally pool declaration; private Pool laserPool; public EntityController(AssetManager assetManager, ShapeRenderer shapeRenderer) { activeAllies = new Array(); activeEnemies = new Array(); this.assets = assetManager; this.shapes = shapeRenderer; shapes.setAutoShapeType(true); //Enemy pool initialization; voidCirclePool = new Pool() { @Override protected VoidCircle newObject() { return new VoidCircle(shapes); } }; pelletPool = new Pool() { @Override protected Pellet newObject() { return new Pellet(assets.get("pellet.png", Texture.class)); } }; shardPool = new Pool() { @Override protected Shard newObject() { return new Shard(assets.get("shard.png", Texture.class)); } }; barPool = new Pool() { @Override protected Bar newObject() { return new Bar(assets.get("bar.png", Texture.class)); } }; flakePool = new Pool() { @Override protected Flake newObject() { return new Flake(assets.get("flake.png", Texture.class)); } }; //Ally pool initialization; laserPool = new Pool() { @Override protected Laser newObject() { return new Laser(assets.get("laser.png", Texture.class)); } }; } public Entity retrieveEntity(Entities entity) { switch (entity) { case VOID_CIRCLE: VoidCircle voidCircle = voidCirclePool.obtain(); activeEnemies.add(voidCircle); return voidCircle; case LASER: Laser laser = laserPool.obtain(); activeAllies.add(laser); return laser; case PELLET: Pellet pellet = pelletPool.obtain(); activeEnemies.add(pellet); return pellet; case SHARD: Shard shard = shardPool.obtain(); activeEnemies.add(shard); return shard; case BAR: Bar bar = barPool.obtain(); activeEnemies.add(bar); return bar; case FLAKE: Flake flake = flakePool.obtain(); activeEnemies.add(flake); return flake; default: return null; } } public void free(Entity entity) { if (entity.getEntityType().isEnemy()) { activeEnemies.removeValue(entity, true); } else { activeAllies.removeValue(entity, true); } switch (entity.getEntityType()) { case VOID_CIRCLE: VoidCircle voidCircle = (VoidCircle) entity; voidCircle.remove(); voidCirclePool.free(voidCircle); break; case LASER: Laser laser = (Laser) entity; laser.remove(); laserPool.free(laser); break; case PELLET: Pellet pellet = (Pellet) entity; pellet.remove(); pelletPool.free(pellet); break; case SHARD: Shard shard = (Shard) entity; shard.remove(); shardPool.free(shard); break; case BAR: Bar bar = (Bar) entity; bar.remove(); barPool.free(bar); break; case FLAKE: Flake flake = (Flake) entity; flake.remove(); flakePool.free(flake); break; default: break; } } public void deathClean() { for (int i = 0; i < activeAllies.size; i ++) { if (activeAllies.get(i).isDead()) { free(activeAllies.get(i)); } } for (int i = 0; i < activeEnemies.size; i++) { if (activeEnemies.get(i).isDead()) { free(activeEnemies.get(i)); } } } }