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

100 lines
2.5 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.Pellet;
import zero1hd.polyjet.entity.enemies.VoidCircle;
public class EntityController {
AssetManager assets;
ShapeRenderer shapes;
public Array<Entity> activeAllies;
public Array<Entity> activeEnemies;
//Enemy pool declaration;
private Pool<VoidCircle> voidCirclePool;
private Pool<Pellet> pelletPool;
//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));
}
};
//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;
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;
}
}
}