use of com.gushikustudios.box2d.controllers.B2BuoyancyController in project RubeLoader by tescott.
the class RubeLoaderTest method create.
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
Gdx.input.setInputProcessor(this);
mB2Controllers = new Array<B2Controller>();
mCamPos = new Vector3();
mCurrentPos = new Vector3();
camera = new OrthographicCamera(100, 100 * h / w);
camera.position.set(50, 50, 0);
camera.zoom = 1.8f;
camera.update();
loader = new RubeSceneLoader();
scene = loader.loadScene(Gdx.files.internal("data/palmcontrollers.json"));
debugRender = new Box2DDebugRenderer();
batch = new SpriteBatch();
polygonBatch = new PolygonSpriteBatch();
textureMap = new HashMap<String, Texture>();
textureRegionMap = new HashMap<Texture, TextureRegion>();
createSpatialsFromRubeImages(scene);
createPolySpatialsFromRubeFixtures(scene);
mWorld = scene.getWorld();
// configure simulation settings
mVelocityIter = scene.velocityIterations;
mPositionIter = scene.positionIterations;
if (scene.stepsPerSecond != 0) {
mSecondsPerStep = 1f / scene.stepsPerSecond;
}
mWorld.setContactListener(this);
//
// example of custom property handling
//
Array<Body> bodies = scene.getBodies();
if ((bodies != null) && (bodies.size > 0)) {
for (int i = 0; i < bodies.size; i++) {
Body body = bodies.get(i);
String gameInfo = (String) scene.getCustom(body, "GameInfo", null);
if (gameInfo != null) {
System.out.println("GameInfo custom property: " + gameInfo);
}
}
}
// Instantiate any controllers that are in the scene
Array<Fixture> fixtures = scene.getFixtures();
if ((fixtures != null) && (fixtures.size > 0)) {
for (int i = 0; i < fixtures.size; i++) {
Fixture fixture = fixtures.get(i);
int controllerType = (Integer) scene.getCustom(fixture, "ControllerType", 0);
switch(controllerType) {
case B2Controller.BUOYANCY_CONTROLLER:
// only allow polygon buoyancy controllers for now..
if (fixture.getShape().getType() == Shape.Type.Polygon) {
float bodyHeight = fixture.getBody().getPosition().y;
// B2BuoyancyController b2c = new B2BuoyancyController();
// need to calculate the fluid surface height for the buoyancy controller
PolygonShape shape = (PolygonShape) fixture.getShape();
shape.getVertex(0, mTmp);
// initialize the height, transforming to 'world'
float maxHeight = mTmp.y + bodyHeight;
// find the maxHeight
for (int j = 1; j < shape.getVertexCount(); j++) {
shape.getVertex(j, mTmp);
// transform to world coordinates
maxHeight = Math.max(maxHeight, mTmp.y + bodyHeight);
}
B2BuoyancyController b2c = new B2BuoyancyController(// assume up
B2BuoyancyController.DEFAULT_SURFACE_NORMAL, (Vector2) scene.getCustom(fixture, "ControllerVelocity", B2BuoyancyController.DEFAULT_FLUID_VELOCITY), mWorld.getGravity(), maxHeight, fixture.getDensity(), (Float) scene.getCustom(fixture, "LinearDrag", B2BuoyancyController.DEFAULT_LINEAR_DRAG), (Float) scene.getCustom(fixture, "AngularDrag", B2BuoyancyController.DEFAULT_ANGULAR_DRAG));
// reference back to the controller from the fixture (see
fixture.setUserData(b2c);
// beginContact/endContact)
// add it to the list so it can be stepped later
mB2Controllers.add(b2c);
}
break;
case B2Controller.GRAVITY_CONTROLLER:
{
B2GravityController b2c = new B2GravityController();
b2c = new B2GravityController((Vector2) scene.getCustom(fixture, "ControllerVelocity", B2GravityController.DEFAULT_GRAVITY));
fixture.setUserData(b2c);
mB2Controllers.add(b2c);
}
break;
}
}
}
scene.printStats();
// no longer need any scene references
scene.clear();
}
Aggregations