package org.jbox2d.testbed.tests; import org.jbox2d.collision.shapes.EdgeShape; import org.jbox2d.collision.shapes.PolygonShape; import org.jbox2d.common.Color3f; import org.jbox2d.common.MathUtils; import org.jbox2d.common.Vec2; import org.jbox2d.dynamics.Body; import org.jbox2d.dynamics.BodyDef; import org.jbox2d.dynamics.BodyType; import org.jbox2d.dynamics.FixtureDef; import org.jbox2d.dynamics.joints.MotorJoint; import org.jbox2d.dynamics.joints.MotorJointDef; import org.jbox2d.testbed.framework.TestbedSettings; import org.jbox2d.testbed.framework.TestbedTest; public class MotorTest extends TestbedTest { MotorJoint m_joint; float m_time; boolean m_go; @Override public void initTest(boolean deserialized) { { EdgeShape shape = new EdgeShape(); shape.set(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f)); FixtureDef fd = new FixtureDef(); fd.shape = shape; getGroundBody().createFixture(fd); } // Define motorized body { BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.position.set(0.0f, 8.0f); Body body = getWorld().createBody(bd); PolygonShape shape = new PolygonShape(); shape.setAsBox(2.0f, 0.5f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.friction = 0.6f; fd.density = 2.0f; body.createFixture(fd); MotorJointDef mjd = new MotorJointDef(); mjd.initialize(getGroundBody(), body); mjd.maxForce = 1000.0f; mjd.maxTorque = 1000.0f; m_joint = (MotorJoint) m_world.createJoint(mjd); } m_go = false; m_time = 0.0f; } @Override public void keyPressed(char keyCar, int keyCode) { super.keyPressed(keyCar, keyCode); switch (keyCar) { case 's': m_go = !m_go; } } // pooling Vec2 linearOffset = new Vec2(); Color3f color = new Color3f(0.9f, 0.9f, 0.9f); @Override public void step(TestbedSettings settings) { float hz = settings.getSetting(TestbedSettings.Hz).value; if (m_go && hz > 0.0f) { m_time += 1.0f / hz; } linearOffset.x = 6.0f * MathUtils.sin(2.0f * m_time); linearOffset.y = 8.0f + 4.0f * MathUtils.sin(1.0f * m_time); float angularOffset = 4.0f * m_time; m_joint.setLinearOffset(linearOffset); m_joint.setAngularOffset(angularOffset); getDebugDraw().drawPoint(linearOffset, 4.0f, color); super.step(settings); addTextLine("Keys: (s) pause"); } @Override public String getTestName() { return "Motor Joint"; } }