package org.jbox2d.testbed.tests; import org.jbox2d.collision.shapes.PolygonShape; 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.joints.RevoluteJoint; import org.jbox2d.dynamics.joints.RevoluteJointDef; import org.jbox2d.particle.ParticleGroupDef; import org.jbox2d.testbed.framework.TestbedSettings; import org.jbox2d.testbed.framework.TestbedTest; public class WaveMachine extends TestbedTest { RevoluteJoint m_joint; float m_time; @Override public void step(TestbedSettings settings) { super.step(settings); float hz = settings.getSetting(TestbedSettings.Hz).value; if (hz > 0) { m_time += 1 / hz; } m_joint.setMotorSpeed(0.05f * MathUtils.cos(m_time) * MathUtils.PI); } @Override public void initTest(boolean deserialized) { { BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.allowSleep = false; bd.position.set(0.0f, 10.0f); Body body = m_world.createBody(bd); PolygonShape shape = new PolygonShape(); shape.setAsBox(0.5f, 10.0f, new Vec2(20.0f, 0.0f), 0.0f); body.createFixture(shape, 5.0f); shape.setAsBox(0.5f, 10.0f, new Vec2(-20.0f, 0.0f), 0.0f); body.createFixture(shape, 5.0f); shape.setAsBox(20.0f, 0.5f, new Vec2(0.0f, 10.0f), 0.0f); body.createFixture(shape, 5.0f); shape.setAsBox(20.0f, 0.5f, new Vec2(0.0f, -10.0f), 0.0f); body.createFixture(shape, 5.0f); RevoluteJointDef jd = new RevoluteJointDef(); jd.bodyA = getGroundBody(); jd.bodyB = body; jd.localAnchorA.set(0.0f, 10.0f); jd.localAnchorB.set(0.0f, 0.0f); jd.referenceAngle = 0.0f; jd.motorSpeed = 0.05f * MathUtils.PI; jd.maxMotorTorque = 1e7f; jd.enableMotor = true; m_joint = (RevoluteJoint) m_world.createJoint(jd); } m_world.setParticleRadius(0.15f); m_world.setParticleDamping(0.2f); { ParticleGroupDef pd = new ParticleGroupDef(); pd.flags = 0; PolygonShape shape = new PolygonShape(); shape.setAsBox(9.0f, 9.0f, new Vec2(0.0f, 10.0f), 0.0f); pd.shape = shape; m_world.createParticleGroup(pd); } m_time = 0; } @Override public String getTestName() { return "Wave Machine"; } }