private void Form1_Load(object sender, EventArgs e) { sogc = new SimpleOpenGlControl(); sogc.Dock = DockStyle.Fill; sogc.Paint += new PaintEventHandler(sogc_Paint); sogc.Resize += new EventHandler(sogc_Resize); Controls.Add(sogc); sogc.InitializeContexts(); InitOpenGL(sogc.Size, 1, PointF.Empty); // Define the gravity vector. b2Vec2 gravity = new b2Vec2(0.0f, -10.0f); // Do we want to let bodies sleep? bool doSleep = true; // Construct a world object, which will hold and simulate the rigid bodies. world = new b2World(gravity, doSleep); // world.SetWarmStarting(true); { b2BodyDef bd = new b2BodyDef(); b2Body ground = world.CreateBody(bd); b2PolygonShape shape = new b2PolygonShape(); shape.SetAsEdge(new b2Vec2(-40.0f, 0.0f), new b2Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { float a = 0.5f; b2CircleShape shape = new b2CircleShape(); shape.m_radius = a; b2Vec2 x = new b2Vec2(-7.0f, 0.95f); b2Vec2 y; b2Vec2 deltaX = new b2Vec2(0, 1.25f); b2Vec2 deltaY = new b2Vec2(0, 1.25f); y= deltaY; for (int j = 0; j < 8; ++j) { b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position = y; b2Body body = world.CreateBody(bd); body.CreateFixture(shape, 5.0f); y += deltaY; } } GDIDebugThing.instance.SetFlags(EDebugFlags.e_shapeBit); world.SetDebugDraw(GDIDebugThing.instance); System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 85; timer.SynchronizingObject = this; timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); timer.Start(); }
void MakeCircle(b2Vec2 pos, float radius) { // Define the dynamic body. We set its position and call the body factory. b2BodyDef bodyDef = new b2BodyDef(); bodyDef.type = b2BodyType.b2_dynamicBody; bodyDef.position = pos; var body = world.CreateBody(bodyDef); // Define another box shape for our dynamic body. b2CircleShape dynamicBox = new b2CircleShape(); dynamicBox.m_radius = radius; // Define the dynamic body fixture. b2FixtureDef fixtureDef = new b2FixtureDef(); fixtureDef.shape = dynamicBox; // Set the box density to be non-zero, so it will be dynamic. fixtureDef.density = 1.0f; // Override the default friction. fixtureDef.friction = 0.3f; // Add the shape to the body. body.CreateFixture(fixtureDef); }
public PhysicalBunker(StarlingGameSpriteWithBunkerTextures textures, StarlingGameSpriteWithPhysics Context, bool IsShop = false) { var textures_bunker = textures; this.CurrentInput = new KeySample(); this.driverseat = new DriverSeat(); this.textures = textures; this.Context = Context; for (int i = 0; i < 7; i++) { this.KarmaInput0.Enqueue( new KeySample() ); } visualshadow = new Image( textures.bunker2_shadow() ).AttachTo(Context.Content_layer2_shadows); visual = new Sprite().AttachTo(Context.Content_layer3_buildings); visual_body = new Image( textures.bunker2() ).AttachTo(visual); visual_shopoverlay = new Image( textures.bunker2_shopoverlay() ).AttachTo(visual); visual_shopoverlay_arrow = new Image( textures.bunker2_shopoverlay_arrow() ).AttachTo(visual); if (IsShop) { #region hud_arrow var hud_arrow = new Image( textures_bunker.bunker2_shopoverlay_arrow() ).AttachTo(Context); StarlingGameSpriteWithPhysics.onframe += (ScriptCoreLib.ActionScript.flash.display.Stage stage, Starling starling) => { var gap = new __vec2( (float)(this.body.GetPosition().x - Context.current.body.GetPosition().x), (float)(this.body.GetPosition().y - Context.current.body.GetPosition().y) ); var distance = gap.GetLength(); if (distance < 40) { visual_shopoverlay_arrow.visible = true; hud_arrow.visible = false; return; } //if (distance < 50) //{ // visual_shopoverlay_arrow.visible = false; // hud_arrow.visible = false; // return; //} visual_shopoverlay_arrow.visible = false; hud_arrow.visible = true; var cm = new Matrix(); // var yy = 8 * Math.Sin(this.Context.gametime.ElapsedMilliseconds * 0.002); cm.translate(-128, -128 - 64 + yy); cm.scale(Context.stagescale, Context.stagescale); cm.rotate(gap.GetRotation() - Context.current.body.GetAngle() + Context.current.CameraRotation); cm.translate( (stage.stageWidth * 0.5), (stage.stageHeight * Context.internal_center_y) ); hud_arrow.transformationMatrix = cm; }; #endregion } this.IsShop = IsShop; #region damage_b2world { //initialize body var bdef = new b2BodyDef(); bdef.angle = 0; bdef.fixedRotation = true; this.damagebody = Context.damage_b2world.CreateBody(bdef); //initialize shape var fixdef = new b2FixtureDef(); var shape = new b2PolygonShape(); fixdef.shape = shape; shape.SetAsBox(4.5, 4.5); fixdef.restitution = 0.4; //positively bouncy! var fix = this.damagebody.CreateFixture(fixdef); var fix_data = new Action <double>( force => { if (force < 1) { return; } Context.oncollision(this, force); } ); fix.SetUserData(fix_data); } #endregion #region ground_b2world { //initialize body var bdef = new b2BodyDef(); bdef.angle = 0; bdef.fixedRotation = true; this.body = Context.ground_b2world.CreateBody(bdef); //initialize shape var fixdef = new b2FixtureDef(); var shape = new b2PolygonShape(); fixdef.shape = shape; shape.SetAsBox(4.5, 4.5); fixdef.restitution = 0.4; //positively bouncy! var fix = this.body.CreateFixture(fixdef); var fix_data = new Action <double>( force => { if (force < 1) { return; } Context.oncollision(this, force); } ); fix.SetUserData(fix_data); } #endregion { //initialize body var bdef = new b2BodyDef(); bdef.angle = 0; bdef.fixedRotation = true; this.karmabody = Context.groundkarma_b2world.CreateBody(bdef); //initialize shape var fixdef = new b2FixtureDef(); var shape = new b2PolygonShape(); fixdef.shape = shape; shape.SetAsBox(4.5, 4.5); fixdef.restitution = 0.4; //positively bouncy! this.karmabody.CreateFixture(fixdef); } Context.internalunits.Add(this); }
public Tiles() { m_fixtureCount = 0; b2Timer timer = new b2Timer(); { float a = 0.5f; b2BodyDef bd = new b2BodyDef(); bd.position.y = -a; b2Body ground = m_world.CreateBody(bd); #if true int N = 200; int M = 10; b2Vec2 position = new b2Vec2(); position.y = 0.0f; for (int j = 0; j < M; ++j) { position.x = -N * a; for (int i = 0; i < N; ++i) { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(a, a, position, 0.0f); ground.CreateFixture(shape, 0.0f); ++m_fixtureCount; position.x += 2.0f * a; } position.y -= 2.0f * a; } #else int N = 200; int M = 10; b2Vec2 position = new b2Vec2(); position.x = -N * a; for (int i = 0; i < N; ++i) { position.y = 0.0f; for (int j = 0; j < M; ++j) { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(a, a, position, 0.0f); ground.CreateFixture(shape, 0.0f); position.y -= 2.0f * a; } position.x += 2.0f * a; } #endif } { float a = 0.5f; b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(a, a); b2Vec2 x = new b2Vec2(-7.0f, 0.75f); b2Vec2 y; b2Vec2 deltaX = new b2Vec2(0.5625f, 1.25f); b2Vec2 deltaY = new b2Vec2(1.125f, 0.0f); for (int i = 0; i < e_count; ++i) { y = x; for (int j = i; j < e_count; ++j) { b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position = y; //if (i == 0 && j == 0) //{ // bd.allowSleep = false; //} //else //{ // bd.allowSleep = true; //} b2Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 5.0f); ++m_fixtureCount; y += deltaY; } x += deltaX; } } m_createTime = timer.GetMilliseconds(); }
public RayCast() { // Ground body { b2BodyDef bd = new b2BodyDef(); b2Body ground = m_world.CreateBody(bd); b2EdgeShape shape = new b2EdgeShape(); shape.Set(new b2Vec2(-40.0f, 0.0f), new b2Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { b2Vec2[] vertices = new b2Vec2[3]; vertices[0].Set(-0.5f, 0.0f); vertices[1].Set(0.5f, 0.0f); vertices[2].Set(0.0f, 1.5f); m_polygons[0] = new b2PolygonShape(); m_polygons[0].Set(vertices, 3); } { b2Vec2[] vertices = new b2Vec2[3]; vertices[0].Set(-0.1f, 0.0f); vertices[1].Set(0.1f, 0.0f); vertices[2].Set(0.0f, 1.5f); m_polygons[1] = new b2PolygonShape(); m_polygons[1].Set(vertices, 3); } { float w = 1.0f; float b = w / (2.0f + b2Math.b2Sqrt(2.0f)); float s = b2Math.b2Sqrt(2.0f) * b; b2Vec2[] vertices = new b2Vec2[8]; vertices[0].Set(0.5f * s, 0.0f); vertices[1].Set(0.5f * w, b); vertices[2].Set(0.5f * w, b + s); vertices[3].Set(0.5f * s, w); vertices[4].Set(-0.5f * s, w); vertices[5].Set(-0.5f * w, b + s); vertices[6].Set(-0.5f * w, b); vertices[7].Set(-0.5f * s, 0.0f); m_polygons[2] = new b2PolygonShape(); m_polygons[2].Set(vertices, 8); } { m_polygons[3] = new b2PolygonShape(); m_polygons[3].SetAsBox(0.5f, 0.5f); } { m_circle.Radius = 0.5f; } m_bodyIndex = 0; m_angle = 0.0f; m_mode = Mode.e_closest; }
public CollisionProcessing() { // Ground body { b2EdgeShape shape = new b2EdgeShape(); shape.Set(new b2Vec2(-50.0f, 0.0f), new b2Vec2(50.0f, 0.0f)); b2FixtureDef sd = new b2FixtureDef(); sd.shape = shape; b2BodyDef bd = new b2BodyDef(); b2Body ground = m_world.CreateBody(bd); ground.CreateFixture(sd); } float xLo = -5.0f, xHi = 5.0f; float yLo = 2.0f, yHi = 35.0f; // Small triangle b2Vec2[] vertices = new b2Vec2[3]; vertices[0].Set(-1.0f, 0.0f); vertices[1].Set(1.0f, 0.0f); vertices[2].Set(0.0f, 2.0f); b2PolygonShape polygon = new b2PolygonShape(); polygon.Set(vertices, 3); b2FixtureDef triangleShapeDef = new b2FixtureDef(); triangleShapeDef.shape = polygon; triangleShapeDef.density = 1.0f; b2BodyDef triangleBodyDef = new b2BodyDef(); triangleBodyDef.type = b2BodyType.b2_dynamicBody; triangleBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body1 = m_world.CreateBody(triangleBodyDef); body1.CreateFixture(triangleShapeDef); // Large triangle (recycle definitions) vertices[0] *= 2.0f; vertices[1] *= 2.0f; vertices[2] *= 2.0f; polygon.Set(vertices, 3); triangleBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body2 = m_world.CreateBody(triangleBodyDef); body2.CreateFixture(triangleShapeDef); // Small box polygon.SetAsBox(1.0f, 0.5f); b2FixtureDef boxShapeDef = new b2FixtureDef(); boxShapeDef.shape = polygon; boxShapeDef.density = 1.0f; b2BodyDef boxBodyDef = new b2BodyDef(); boxBodyDef.type = b2BodyType.b2_dynamicBody; boxBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body3 = m_world.CreateBody(boxBodyDef); body3.CreateFixture(boxShapeDef); // Large box (recycle definitions) polygon.SetAsBox(2.0f, 1.0f); boxBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body4 = m_world.CreateBody(boxBodyDef); body4.CreateFixture(boxShapeDef); // Small circle b2CircleShape circle = new b2CircleShape(); circle.Radius = 1.0f; b2FixtureDef circleShapeDef = new b2FixtureDef(); circleShapeDef.shape = circle; circleShapeDef.density = 1.0f; b2BodyDef circleBodyDef = new b2BodyDef(); circleBodyDef.type = b2BodyType.b2_dynamicBody; circleBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body5 = m_world.CreateBody(circleBodyDef); body5.CreateFixture(circleShapeDef); // Large circle circle.Radius = circle.Radius * 2.0f; circleBodyDef.position.Set(Rand.RandomFloat(xLo, xHi), Rand.RandomFloat(yLo, yHi)); b2Body body6 = m_world.CreateBody(circleBodyDef); body6.CreateFixture(circleShapeDef); }