package com.corosus.game.system;
import java.util.ArrayList;
import java.util.List;
import com.artemis.Aspect;
import com.artemis.Entity;
import com.artemis.systems.IntervalEntityProcessingSystem;
import com.corosus.game.GameSettings;
import com.corosus.game.Game_AI_TestBed;
import com.corosus.game.component.PhysicsData;
public class PhysicsWrapper extends IntervalEntityProcessingSystem {
//in an attempt to solve a box2d createBody crash this removal queue was added, was most likely pointless
//crashes are related to projectiles / collisions and their deaths somehow
public static List<PhysicsData> listBodiesToRemove = new ArrayList<PhysicsData>();
public PhysicsWrapper(float interval) {
super(Aspect.exclude(), interval);
}
@Override
protected void process(Entity e) {
}
@Override
protected void processSystem() {
//For last 2 params: making these values higher will give you a more correct simulation, at the cost of some performance.
Game_AI_TestBed.instance().getActiveLevel().getWorldBox2D().step(GameSettings.tickDelayGame, 6, 2);
for (PhysicsData data : listBodiesToRemove) {
//TODO: multi world support for box2d
data.disposeBox2D(0);
}
listBodiesToRemove.clear();
//Game_AI_TestBed.instance().getLevel().getWorldBox2D().step(GameSettings.tickDelayGame, 1, 1);
super.processSystem();
}
public static void pendRemoveBody(PhysicsData data) {
listBodiesToRemove.add(data);
}
}