package info.u250.c2d.box2deditor.gdx.support;
import info.u250.c2d.box2d.Box2dObject;
import info.u250.c2d.box2deditor.gdx.PhysicalWorld;
import info.u250.c2d.graphic.C2dStage;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.ChainShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
/**
* One Instance At runtime . No More
*/
public class Box2dStage extends C2dStage implements com.badlogic.gdx.utils.Disposable{
@Override
public void act(float delta) {
super.act(delta);
if(PhysicalWorld.WORLD!=null){
PhysicalWorld.WORLD.step(delta, 3, 3);
}
}
public void dispose(){
if(PhysicalWorld.WORLD!=null){
PhysicalWorld.WORLD.dispose();
}
}
public Body createScreenBox(final Rectangle rect){
ChainShape shape = new ChainShape();
shape.createLoop(new Vector2[]{
new Vector2(rect.x,rect.y).scl(1/Box2dObject.RADIO),
new Vector2(rect.x+rect.width,rect.y).scl(1/Box2dObject.RADIO),
new Vector2(rect.x+rect.width,rect.y+rect.height).scl(1/Box2dObject.RADIO),
new Vector2(rect.x,rect.y+rect.height).scl(1/Box2dObject.RADIO),
});
final FixtureDef fixtureDef = new FixtureDef();
fixtureDef.isSensor = false;
fixtureDef.shape = shape;
BodyDef bodyDef = new BodyDef();
bodyDef.bullet = false;
bodyDef.type = BodyType.StaticBody;
bodyDef.linearDamping = 0f;
Body body = PhysicalWorld.WORLD.createBody(bodyDef);
body.createFixture(fixtureDef);
shape.dispose();
return body;
}
}