170 lines
4.1 KiB
Java
Executable File
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));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|