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.Pellet; import zero1hd.polyjet.entity.enemies.VoidCircle; public class EntityController { AssetManager assets; ShapeRenderer shapes; public Array activeAllies; public Array activeEnemies; //Enemy pool declaration; private Pool voidCirclePool; private Pool pelletPool; //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)); } }; //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; default: return null; } } public void free(Entity entity) { switch (entity.getEntityType()) { case VOID_CIRCLE: VoidCircle voidCircle = (VoidCircle) entity; voidCircle.remove(); activeEnemies.removeValue(entity, true); voidCirclePool.free(voidCircle); break; case LASER: Laser laser = (Laser) entity; laser.remove(); activeAllies.removeValue(entity, true); laserPool.free(laser); break; case PELLET: Pellet pellet = (Pellet) entity; pellet.remove(); activeEnemies.removeValue(entity, true); pelletPool.free(pellet); default: break; } } }