rhythmbullet/core/src/zero1hd/polyjet/entity/EntityController.java

170 lines
4.1 KiB
Java
Executable File

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<Entity> activeAllies;
public Array<Entity> activeEnemies;
//Enemy pool declaration;
private Pool<VoidCircle> voidCirclePool;
private Pool<Pellet> pelletPool;
private Pool<Shard> shardPool;
private Pool<Bar> barPool;
private Pool<Flake> flakePool;
//Ally pool declaration;
private Pool<Laser> laserPool;
public EntityController(AssetManager assetManager, ShapeRenderer shapeRenderer) {
activeAllies = new Array<Entity>();
activeEnemies = new Array<Entity>();
this.assets = assetManager;
this.shapes = shapeRenderer;
shapes.setAutoShapeType(true);
//Enemy pool initialization;
voidCirclePool = new Pool<VoidCircle>() {
@Override
protected VoidCircle newObject() {
return new VoidCircle(shapes);
}
};
pelletPool = new Pool<Pellet>() {
@Override
protected Pellet newObject() {
return new Pellet(assets.get("pellet.png", Texture.class));
}
};
shardPool = new Pool<Shard>() {
@Override
protected Shard newObject() {
return new Shard(assets.get("shard.png", Texture.class));
}
};
barPool = new Pool<Bar>() {
@Override
protected Bar newObject() {
return new Bar(assets.get("bar.png", Texture.class));
}
};
flakePool = new Pool<Flake>() {
@Override
protected Flake newObject() {
return new Flake(assets.get("flake.png", Texture.class));
}
};
//Ally pool initialization;
laserPool = new Pool<Laser>() {
@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));
}
}
}
}