public CCDTest() { #if true { //TODO: only one shape is created here instead of two. That is because //they are reference types and when shape is changed, it changes the original instead of a new copy. PolygonShape shape = new PolygonShape(); shape.SetAsBox(10.0f, 0.2f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Density = 0.0f; BodyDef bd = new BodyDef(); bd.Position.Set(0.0f, -0.2f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); shape.SetAsBox(0.2f, 1.0f, new Vec2(0.5f, 1.2f), 0.0f); body.CreateFixture(fd); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.1f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Density = 1.0f; fd.Restitution = 0.0f; _angularVelocity = Math.Random(-50.0f, 50.0f); _angularVelocity = -30.669577f; BodyDef bd = new BodyDef(); bd.Position.Set(0.0f, 20.0f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); body.SetLinearVelocity(new Vec2(0.0f, -100.0f)); body.SetAngularVelocity(_angularVelocity); } #elif false { FixtureDef fd; fd.SetAsBox(10.0f, 0.1f); fd.density = 0.0f; BodyDef bd; bd.type = BodyDef::e_static; bd.position.Set(0.0f, -0.2f); Body* ground = m_world.CreateBody(&bd); ground.CreateFixture(&fd); } { FixtureDef fd; fd.SetAsBox(2.0f, 0.1f); fd.density = 1.0f; fd.restitution = 0.0f; BodyDef bd1; bd1.type = BodyDef::e_dynamic; bd1.isBullet = true; bd1.allowSleep = false; bd1.position.Set(0.0f, 20.0f); Body* b1 = m_world.Create(&bd1); b1.CreateFixture(&fd); b1.SetMassFromShapes(); b1.SetLinearVelocity(Vec2(0.0f, -100.0f)); fd.SetAsBox(1.0f, 0.1f); BodyDef bd2; bd2.type = BodyDef::e_dynamic; bd2.isBullet = true; bd2.allowSleep = false; bd2.position.Set(0.0f, 20.2f); Body* = m_world.Create(&bd2); .CreateFixture(&fd); .SetMassFromShapes(); .SetLinearVelocity(Vec2(0.0f, -100.0f)); fd.SetAsBox(0.25f, 0.25f); fd.density = 10.0f; BodyDef bd3; bd3.type = BodyDef::e_dynamic; bd3.isBullet = true; bd3.allowSleep = false; bd3.position.Set(0.0f, 100.0f); Body* b3 = m_world.Create(&bd3); b3.CreateFixture(&fd); b3.SetMassFromShapes(); b3.SetLinearVelocity(Vec2(0.0f, -150.0f)); } #else const float32 k_restitution = 1.4f; { BodyDef bd; bd.position.Set(0.0f, 20.0f); Body* body = m_world.CreateBody(&bd); FixtureDef fd; fd.density = 0.0f; fd.restitution = k_restitution; fd.SetAsBox(0.1f, 10.0f, Vec2(-10.0f, 0.0f), 0.0f); body.CreateFixture(&fd); fd.SetAsBox(0.1f, 10.0f, Vec2(10.0f, 0.0f), 0.0f); body.CreateFixture(&fd); fd.SetAsBox(0.1f, 10.0f, Vec2(0.0f, -10.0f), 0.5f * _pi); body.CreateFixture(&fd); fd.SetAsBox(0.1f, 10.0f, Vec2(0.0f, 10.0f), -0.5f * _pi); body.CreateFixture(&fd); } #if false { FixtureDef sd_bottom; sd_bottom.SetAsBox(1.0f, 0.1f, Vec2(0.0f, -1.0f), 0.0f); sd_bottom.density = 4.0f; FixtureDef sd_top; sd_top.SetAsBox(1.0f, 0.1f, Vec2(0.0f, 1.0f), 0.0f); sd_top.density = 4.0f; FixtureDef sd_left; sd_left.SetAsBox(0.1f, 1.0f, Vec2(-1.0f, 0.0f), 0.0f); sd_left.density = 4.0f; FixtureDef sd_right; sd_right.SetAsBox(0.1f, 1.0f, Vec2(1.0f, 0.0f), 0.0f); sd_right.density = 4.0f; BodyDef bd; bd.type = BodyDef::e_dynamicBody; bd.position.Set(0.0f, 15.0f); Body* body = m_world.CreateBody(&bd); body.CreateFixture(&sd_bottom); body.CreateFixture(&sd_top); body.CreateFixture(&sd_left); body.CreateFixture(&sd_right); body.SetMassFromShapes(); } #elif false { FixtureDef sd_bottom; sd_bottom.SetAsBox( 1.5f, 0.15f ); sd_bottom.density = 4.0f; FixtureDef sd_left; sd_left.SetAsBox(0.15f, 2.7f, Vec2(-1.45f, 2.35f), 0.2f); sd_left.density = 4.0f; FixtureDef sd_right; sd_right.SetAsBox(0.15f, 2.7f, Vec2(1.45f, 2.35f), -0.2f); sd_right.density = 4.0f; BodyDef bd; bd.position.Set( 0.0f, 15.0f ); Body* body = m_world.CreateBody(&bd); body.CreateFixture(&sd_bottom); body.CreateFixture(&sd_left); body.CreateFixture(&sd_right); body.SetMassFromShapes(); } #else { BodyDef bd; bd.position.Set(-5.0f, 20.0f); bd.isBullet = true; Body* body = m_world.CreateBody(&bd); body.SetAngularVelocity(RandomFloat(-50.0f, 50.0f)); FixtureDef fd; fd.SetAsBox(0.1f, 4.0f); fd.density = 1.0f; fd.restitution = 0.0f; body.CreateFixture(&fd); body.SetMassFromShapes(); } #endif for (int32 i = 0; i < 0; ++i) { BodyDef bd; bd.position.Set(0.0f, 15.0f + i); bd.isBullet = true; Body* body = m_world.CreateBody(&bd); body.SetAngularVelocity(RandomFloat(-50.0f, 50.0f)); FixtureDef fd; fd.radius = 0.25f; fd.density = 1.0f; fd.restitution = 0.0f; body.CreateFixture(&fd); body.SetMassFromShapes(); } #endif }