package info.u250.c2d.box2deditor.gdx.support;
import info.u250.c2d.box2d.DefaultBuilder;
import info.u250.c2d.box2d.model.b2BodyDefModel;
import info.u250.c2d.box2d.model.b2FixtureDefModel;
import info.u250.c2d.box2d.model.b2JointDefModel;
import info.u250.c2d.box2deditor.adapter.PolygonFixtureDefModel;
import info.u250.c2d.box2deditor.adapter.SceneModelAdapter;
import info.u250.c2d.box2deditor.gdx.PhysicalWorld;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.Joint;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.utils.Array;
public class BuildWorld {
public static void stopSimulation(){
if(PhysicalWorld.WORLD!=null){
//destroy all joints
Array<Joint> joints = new Array<Joint>();
PhysicalWorld.WORLD.getJoints(joints);
for(Joint j:joints){
try{
PhysicalWorld.WORLD.destroyJoint(j);
}catch(Exception ex){
//do nothing
}
}
//destroy all body
Array<Body> bodys = new Array<Body>();
PhysicalWorld.WORLD.getBodies(bodys);
for(Body body:bodys){
try{
PhysicalWorld.WORLD.destroyBody(body);
}catch(Exception ex){
//do nothing
}
}
}
PhysicalWorld.WORLD.dispose();
PhysicalWorld.WORLD = new World(new Vector2(0,-10), false);
//set all handle to null;
SceneModelAdapter model = PhysicalWorld.MODEL;
for(b2JointDefModel b2Joint:model.jointDefModels){
b2Joint.joint = null;
}
for(b2BodyDefModel b2Body:model.bodyDefModels){
b2Body.body = null;
}
}
public static void buildBody(b2BodyDefModel b2Body){
DefaultBuilder.buildBody(PhysicalWorld.WORLD, b2Body);
}
public static void buildBodys(){
SceneModelAdapter model = PhysicalWorld.MODEL;
for(b2FixtureDefModel b2:model.fixtureDefModels){
if(b2 instanceof PolygonFixtureDefModel){
PolygonFixtureDefModel object = (PolygonFixtureDefModel)b2;
Geometry.splitPolygon(object);
}
}
for(b2BodyDefModel b2Body:model.bodyDefModels){
buildBody(b2Body);
}
}
public static void buildJoint(b2JointDefModel b2Joint){
DefaultBuilder.buildJoint(PhysicalWorld.WORLD, b2Joint);
}
public static void buildJoints(){
SceneModelAdapter model = PhysicalWorld.MODEL;
//now for the joints
for(b2JointDefModel b2:model.jointDefModels){
Geometry.ajustJoint(b2);
}
for(b2JointDefModel b2Joint:model.jointDefModels){
buildJoint(b2Joint);
}
}
}