package info.u250.c2d.box2deditor.adapter;
import java.util.Iterator;
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.box2d.model.b2Scene;
import info.u250.c2d.box2d.model.fixture.b2CircleFixtureDefModel;
import info.u250.c2d.box2d.model.fixture.b2PolygonFixtureDefModel;
import info.u250.c2d.box2d.model.fixture.b2RectangleFixtureDefModel;
import info.u250.c2d.box2d.model.joint.b2DistanceJointDefModel;
import info.u250.c2d.box2d.model.joint.b2FrictionJointDefModel;
import info.u250.c2d.box2d.model.joint.b2GearJointDefModel;
import info.u250.c2d.box2d.model.joint.b2PrismaticJointDefModel;
import info.u250.c2d.box2d.model.joint.b2PulleyJointDefModel;
import info.u250.c2d.box2d.model.joint.b2RevoluteJointDefModel;
import info.u250.c2d.box2d.model.joint.b2RopeJointDefModel;
import info.u250.c2d.box2d.model.joint.b2WeldJointDefModel;
import info.u250.c2d.box2d.model.joint.b2WheelJointDefModel;
import info.u250.c2d.box2deditor.gdx.PhysicalWorld;
public class SceneModelAdapter extends b2Scene{
private static final long serialVersionUID = 1L;
int CircleFixture_INDEX = 1;
int PolygonFixture_INDEX = 1;
int RectangleFixture_INDEX = 1;
int Body_INDEX = 1;
int Distance_JOINT_INDEX = 1;
int Friction_JOINT_INDEX = 1;
int Prismatic_JOINT_INDEX= 1;
int Revolute_JOINT_INDEX = 1;
int RopeJoint_JOINT_INDEX= 1;
int WeldJoint_JOINT_INDEX =1;
int Wheel_JOINT_INDEX =1;
int Pulley_JOINT_INDEX =1;
int Gear_JOINT_INDEX =1;
public String pathHandel = "";
public void addFixture(b2FixtureDefModel model){
if("".equals(model.name)){
if(model instanceof b2CircleFixtureDefModel){
model.name = "CircleFixture"+CircleFixture_INDEX++;
}else if(model instanceof b2PolygonFixtureDefModel){
model.name = "PolygonFixture"+PolygonFixture_INDEX++;
}else if(model instanceof b2RectangleFixtureDefModel){
model.name = "RectangleFixture"+RectangleFixture_INDEX++;
}
}
this.fixtureDefModels.add(model);
}
public void addBody(b2BodyDefModel model){
if("".equals(model.name))model.name = "Body"+Body_INDEX++;
this.bodyDefModels.add(model);
}
public void addJoint(b2JointDefModel b2Joint){
if("".equals(b2Joint.name)){
if(b2Joint instanceof b2DistanceJointDefModel){
b2Joint.name = "DistanceJoint"+Distance_JOINT_INDEX++;
}else if(b2Joint instanceof b2FrictionJointDefModel){
b2Joint.name = "FrictionJoint"+Friction_JOINT_INDEX++;
}else if(b2Joint instanceof b2PrismaticJointDefModel){
b2Joint.name = "PrismaticJoint"+Prismatic_JOINT_INDEX++;
}else if(b2Joint instanceof b2RevoluteJointDefModel){
b2Joint.name = "RevoluteJoint"+Revolute_JOINT_INDEX++;
}else if(b2Joint instanceof b2RopeJointDefModel){
b2Joint.name = "RopeJoint"+RopeJoint_JOINT_INDEX++;
}else if(b2Joint instanceof b2WeldJointDefModel){
b2Joint.name = "WeldJoint"+WeldJoint_JOINT_INDEX++;
}else if(b2Joint instanceof b2WheelJointDefModel){
b2Joint.name = "WheelJoint"+Wheel_JOINT_INDEX++;
}else if(b2Joint instanceof b2PulleyJointDefModel){
b2Joint.name = "PulleyJoint"+Pulley_JOINT_INDEX++;
}else if(b2Joint instanceof b2GearJointDefModel){
b2Joint.name = "GearJoint"+Gear_JOINT_INDEX++;
}
}
this.jointDefModels.add(b2Joint);
}
public void removeJoint(b2JointDefModel joint){
this.jointDefModels.remove(joint);
}
public void removeBody(b2BodyDefModel body){
removeDependJoint(body);
if(body.body!=null){
PhysicalWorld.WORLD.destroyBody(body.body);
body.body = null;
this.bodyDefModels.remove(body);
}
}
void removeDependJoint(b2BodyDefModel body){
Iterator<b2JointDefModel> itr = this.jointDefModels.iterator();
while(itr.hasNext()){
b2JointDefModel joint = itr.next();
if(joint.bodyA == body || joint.bodyB==body){
itr.remove();
}
}
}
public void removeFixture(b2FixtureDefModel fixture){
Iterator<b2BodyDefModel> bodyItr = this.bodyDefModels.iterator();
while(bodyItr.hasNext()){
b2BodyDefModel body = bodyItr.next();
if(body.fixtures.contains(fixture)){
removeDependJoint(body);
if(body.body!=null){
PhysicalWorld.WORLD.destroyBody(body.body);
body.body = null;
bodyItr.remove();
}
}
}
fixtureDefModels.remove(fixture);
}
}