package com.igorcrevar.goingunder.objects.obstacles;
import java.util.ArrayList;
import com.igorcrevar.goingunder.GameData;
import com.igorcrevar.goingunder.GameManager;
import com.igorcrevar.goingunder.ObstacleTypeEnum;
public class ObstaclePool implements IObstaclePool {
private ObstacleObject[] obstacles;
private ArrayList<ObstacleObject> visible;
public ObstaclePool(GameData gameData) {
visible = new ArrayList<ObstacleObject>(gameData.MaxOnScreenAtOnce);
// create obstacle pool
obstacles = new ObstacleObject[gameData.MaxOnScreenAtOnce];
for (short j = 0; j < gameData.MaxOnScreenAtOnce; ++j) {
obstacles[j] = new ObstacleObject(this);
}
}
@Override
public void init(GameData gameData) {
// disable all obstacles
for (short j = 0; j < obstacles.length; ++j) {
obstacles[j].setIsEnabled(false);
}
visible.clear(); // clear for any case - disabling should clear but this is more reliable
}
@Override
public ArrayList<ObstacleObject> getAllVisibles() {
return visible;
}
@Override
public ObstacleObject getOne(ObstacleTypeEnum type, GameData gameData, GameManager gameManager) {
for (int i = 0; i < obstacles.length; ++i) {
ObstacleObject o = obstacles[i];
if (!o.isEnabled()) {
// must init new
o.init(type, gameData, gameManager);
// add to visibles
visible.add(o);
return o;
}
}
return null;
}
@Override
public void removeFromVisibles(ObstacleObject obj) {
visible.remove(obj);
}
}