package info.u250.c2d.box2deditor.io; 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.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.adapter.SceneModelAdapter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.ObjectInputStream; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.JointDef.JointType; import com.badlogic.gdx.utils.XmlWriter; public class Export { public static void main(String[] args) throws Exception { new LwjglApplication(new ApplicationListener() { @Override public void resume() { // TODO Auto-generated method stub } @Override public void resize(int width, int height) { // TODO Auto-generated method stub } @Override public void render() { // TODO Auto-generated method stub } @Override public void pause() { // TODO Auto-generated method stub } @Override public void dispose() { // TODO Auto-generated method stub } String vector2ToStr(Vector2 vector2){ return "{" + vector2.x + "," + vector2.y + "}"; } @Override public void create() { try { File root = new File("assets/examples"); for (File f : root.listFiles()) { try { ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)); SceneModelAdapter scene = (SceneModelAdapter) in.readObject(); in.close(); try{ XmlWriter xml = new XmlWriter(new FileWriter(new File(f.getAbsolutePath()+".xml"))); xml.element("world"); xml.element("fixtures"); for(b2FixtureDefModel fixture:scene.fixtureDefModels){ if(fixture instanceof b2CircleFixtureDefModel){ xml.element("circle"); }else if(fixture instanceof b2RectangleFixtureDefModel){ xml.element("box"); }else if(fixture instanceof b2PolygonFixtureDefModel){ xml.element("polygons"); } xml.attribute("friction", fixture.friction) .attribute("restitution", fixture.restitution) .attribute("density", fixture.density) .attribute("isSensor", fixture.isSensor) .attribute("categoryBits", fixture.categoryBits) .attribute("maskBits", fixture.maskBits) .attribute("groupIndex", fixture.groupIndex) .attribute("name", fixture.name) .attribute("mark", fixture.mark); if(fixture instanceof b2CircleFixtureDefModel){ xml.attribute("radius", b2CircleFixtureDefModel.class.cast(fixture).radius); }else if(fixture instanceof b2RectangleFixtureDefModel){ xml.attribute("width", b2RectangleFixtureDefModel.class.cast(fixture).width); xml.attribute("height", b2RectangleFixtureDefModel.class.cast(fixture).height); }else if(fixture instanceof b2PolygonFixtureDefModel){ b2PolygonFixtureDefModel polygonFixture = b2PolygonFixtureDefModel.class.cast(fixture); for(Vector2[] polygon:polygonFixture.vertices){ xml.element("polygon"); for(Vector2 vertex:polygon){ xml.element("vertex", vector2ToStr(vertex)); } xml.pop(); } } xml.pop(); } xml.pop(); xml.element("bodys"); for(b2BodyDefModel body:scene.bodyDefModels){ xml.element("body") .attribute("name", body.name) .attribute("type", body.type==0?"StaticBody":(body.type == 1?"KinematicBody":"DynamicBody")) .attribute("position", vector2ToStr(body.position)) .attribute("degrees", body.degrees) .attribute("linearVelocity", vector2ToStr(body.linearVelocity)) .attribute("angularVelocity", body.angularVelocity) .attribute("linearDamping", body.linearDamping) .attribute("angularDamping", body.angularDamping) .attribute("allowSleep", body.allowSleep) .attribute("awake", body.awake) .attribute("fixedRotation", body.fixedRotation) .attribute("bullet", body.bullet) .attribute("active", body.active) .attribute("gravityScale", body.gravityScale) .attribute("drawableOffsetX", body.drawableOffsetX) .attribute("drawableOffsetY", body.drawableOffsetY) .attribute("drawableWidth", body.drawableWidth) .attribute("drawableHeight", body.drawableHeight) .attribute("mark", body.mark); for(b2FixtureDefModel fixture:body.fixtures){ xml.element("fixture").attribute("ref", fixture.name).pop(); } xml.pop(); } xml.pop(); xml.element("joints"); for(b2JointDefModel b2Joint:scene.jointDefModels){ xml.element("joint"); xml.attribute("collideConnected", b2Joint.collideConnected); xml.attribute("bodyA", b2Joint.bodyA.name); xml.attribute("bodyB", b2Joint.bodyB.name); xml.attribute("name", b2Joint.name); xml.attribute("mark", b2Joint.mark); if(b2Joint instanceof b2DistanceJointDefModel){ b2DistanceJointDefModel b2Def = b2DistanceJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.DistanceJoint) .attribute("length", b2Def.length) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("frequencyHz", b2Def.frequencyHz) .attribute("dampingRatio", b2Def.dampingRatio); }else if(b2Joint instanceof b2FrictionJointDefModel){ b2FrictionJointDefModel b2Def = b2FrictionJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.FrictionJoint) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("maxForce", b2Def.maxForce) .attribute("maxTorque", b2Def.maxTorque); }else if(b2Joint instanceof b2PrismaticJointDefModel){ b2PrismaticJointDefModel b2Def = b2PrismaticJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.PrismaticJoint) .attribute("localAxisA", vector2ToStr(b2Def.localAxisA)) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("referenceDegrees", b2Def.referenceDegrees) .attribute("enableLimit", b2Def.enableLimit) .attribute("lowerTranslation", b2Def.lowerTranslation) .attribute("upperTranslation", b2Def.upperTranslation) .attribute("enableMotor", b2Def.enableMotor) .attribute("maxMotorForce", b2Def.maxMotorForce) .attribute("motorSpeed", b2Def.motorSpeed); }else if(b2Joint instanceof b2RevoluteJointDefModel){ b2RevoluteJointDefModel b2Def = b2RevoluteJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.RevoluteJoint) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("referenceDegrees", b2Def.referenceDegrees) .attribute("enableLimit", b2Def.enableLimit) .attribute("enableMotor", b2Def.enableMotor) .attribute("maxMotorTorque", b2Def.maxMotorTorque) .attribute("enableMotor", b2Def.enableMotor) .attribute("motorSpeed", b2Def.motorSpeed) .attribute("lowerDegrees", b2Def.lowerDegrees) .attribute("upperDegrees", b2Def.upperDegrees); }else if(b2Joint instanceof b2RopeJointDefModel){ b2RopeJointDefModel b2Def = b2RopeJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.RopeJoint) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("maxLength", b2Def.maxLength); }else if(b2Joint instanceof b2WeldJointDefModel){ b2WeldJointDefModel b2Def = b2WeldJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.WeldJoint) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("referenceDegrees", b2Def.referenceDegrees); }else if(b2Joint instanceof b2WheelJointDefModel){ b2WheelJointDefModel b2Def = b2WheelJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.WheelJoint) .attribute("localAxisA", vector2ToStr(b2Def.localAxisA)) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("enableMotor", b2Def.enableMotor) .attribute("maxMotorTorque", b2Def.maxMotorTorque) .attribute("motorSpeed", b2Def.motorSpeed) .attribute("frequencyHz", b2Def.frequencyHz) .attribute("dampingRatio", b2Def.dampingRatio); }else if(b2Joint instanceof b2PulleyJointDefModel){ b2PulleyJointDefModel b2Def = b2PulleyJointDefModel.class.cast(b2Joint); xml.attribute("type", JointType.PulleyJoint) .attribute("groundAnchorA", vector2ToStr(b2Def.groundAnchorA)) .attribute("groundAnchorB", vector2ToStr(b2Def.groundAnchorB)) .attribute("localAnchorA", vector2ToStr(b2Def.localAnchorA)) .attribute("localAnchorB", vector2ToStr(b2Def.localAnchorB)) .attribute("lengthA", b2Def.lengthA) .attribute("lengthB", b2Def.lengthB) .attribute("ratio", b2Def.ratio); }else if(b2Joint instanceof b2GearJointDefModel){ //TODO } xml.pop(); } xml.pop(); xml.pop(); xml.flush(); xml.close(); }catch(Exception ex){ ex.printStackTrace(); } } catch (Exception e) { System.out.println(f); } } } catch (Exception ex) { ex.printStackTrace(); } } }); } }