package info.u250.c2d.box2deditor.gdx.scenes; import info.u250.c2d.box2d.model.b2BodyDefModel; import info.u250.c2d.box2deditor.gdx.CallUI; import info.u250.c2d.box2deditor.gdx.CallUIImpl; import info.u250.c2d.box2deditor.gdx.PhysicalWorld; import info.u250.c2d.box2deditor.gdx.support.AbstractBox2dHelper; import info.u250.c2d.box2deditor.gdx.support.BuildWorld; import info.u250.c2d.engine.Engine; import info.u250.c2d.engine.SceneGroup; import java.util.HashMap; import java.util.Map; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.actions.Actions; @SuppressWarnings({"rawtypes","unchecked"}) public class MainScene extends SceneGroup { public static MainScene INSTANCE = null; public RightClickHelper rightClickHelper ; // public SceneModelAdapter currentSceneModelAdapter = null; public CallUI callUI = new CallUIImpl(); public SimulationScene simulationScene; private Map<Class<?>,AbstractBox2dHelper> helpers = new HashMap<Class<?>, AbstractBox2dHelper>(); public MainScene(){ INSTANCE = this; simulationScene = new SimulationScene(); rightClickHelper = new RightClickHelper(this); final CircleHelper circleHelper = new CircleHelper(this); final RectangleHelper rectangleHelper = new RectangleHelper(this); final PolygonHelper polygonHelper = new PolygonHelper(this); final SceneHelper senceHelper = new SceneHelper(this); register(circleHelper); register(rectangleHelper); register(polygonHelper); register(senceHelper); } void register(AbstractBox2dHelper helper){ helpers.put(helper.getType(), helper); } public void bind(Object o){ this.clear(); this.add(rightClickHelper); AbstractBox2dHelper helper = helpers.get(o.getClass()); if(null!=helper){ this.add(helper); helper.bind(o); }else{ helper = helpers.get(PhysicalWorld.MODEL.getClass()); this.add(helper); helper.bind(PhysicalWorld.MODEL); if(o instanceof b2BodyDefModel){ ((SceneHelper)helper).setData(b2BodyDefModel.class.cast(o)); } } Gdx.input.setInputProcessor(getInputProcessor()); } public void simulation(){ Engine.doResume(); this.clear(); this.add(rightClickHelper); this.add(simulationScene); simulationScene.addAction(Actions.run(new Runnable() { @Override public void run() { simulationScene.simulation(); Gdx.input.setInputProcessor(getInputProcessor()); } })); } public void stopSimulation(){ Engine.doResume(); simulationScene.addAction(Actions.run(new Runnable() { @Override public void run() { simulationScene.stopSimulation(); bind(PhysicalWorld.MODEL); BuildWorld.buildBodys(); } })); } }