/// <summary> /// Handles what happens when a user clicks the mouse /// </summary> /// <param name="p"> /// The position of the mouse click in relative coordinates. /// </param> public void MouseDown(Vector point) { Vector p = RelativeToWorld(point); if (mouseJoint != null) throw new Exception("ASSERT: mouseJoint should be null"); // Make a small box. Vector d = new Vector(.001f, .001f); AABB aabb = new AABB(p - d, p + d); // Query the world for overlapping shapes. IList<Shape> shapes = world.Query(aabb); Body body = null; foreach (Shape shape in shapes) { if (shape.Body.Static == false && shape.TestPoint(shape.Body.GetXForm(), p)) { body = shape.Body; break; } } if (body != null) { MouseJointDef md = new MouseJointDef(); md.Body1 = world.GetGroundBody(); md.Body2 = body; md.Target = p; md.MaxForce = 1000 * body.Mass; mouseJoint = new MouseJoint(world.CreateJoint(md)); body.WakeUp(); } }
public virtual void MouseDown(Vec2 p) { m_mouseWorld = p; if (m_mouseJoint != null) { return; } // Make a small box. AABB aabb; Vec2 d = new Vec2(); d.Set(0.001f, 0.001f); aabb.lowerBound = p - d; aabb.upperBound = p + d; // Query the world for overlapping shapes. TestQueryCallback callback = new TestQueryCallback(p); m_world.QueryAABB(callback, aabb); if (callback.m_fixture != null) { Body body = callback.m_fixture.GetBody(); MouseJointDef md = new MouseJointDef(); md.bodyA = m_groundBody; md.bodyB = body; md.target = p; md.maxForce = 1000.0f * body.GetMass(); m_mouseJoint = (MouseJoint)m_world.CreateJoint(md); body.SetAwake(true); } }
private void MouseDown() { if (_mouseJoint != null) { return; } var p = Mouse.ToVector2(); // Make a small box. var aabb = new AABB(); var d = new Vector2(0.001f, 0.001f); aabb.LowerBound = p - d; aabb.UpperBound = p + d; // Query the world for overlapping shapes. Fixture fixture = null; World.QueryAABB( fixture1 => { var body = fixture1.Body; if (body.BodyType == BodyType.DynamicBody) { bool inside = fixture1.TestPoint(p); if (inside) { fixture = fixture1; // We are done, terminate the query. return(false); } } // Continue the query. return(true); }, aabb); if (fixture != null) { var body = fixture.Body; var md = new MouseJointDef { BodyA = GroundBody, BodyB = body, Target = p, MaxForce = 1000.0f * body.Mass }; _mouseJoint = (MouseJoint)World.CreateJoint(md); body.IsAwake = true; } }
public virtual void MouseDown(Vec2 p) { m_mouseWorld = p; if (m_mouseJoint != null) { return; } // Make a small box. AABB aabb = new AABB(); Vec2 d = new Vec2(0.001f, 0.001f); aabb.LowerBound = p - d; aabb.UpperBound = p + d; // Query the world for overlapping shapes. Fixture m_fixture = null; m_world.QueryAABB( delegate(Fixture fixture) { Body body = fixture.Body; if (body.BodyType == BodyType.Dynamic) { bool inside = fixture.TestPoint(p); if (inside) { m_fixture = fixture; // We are done, terminate the query. return(false); } } // Continue the query. return(true); }, aabb); if (m_fixture != null) { Body body = m_fixture.Body; MouseJointDef md = new MouseJointDef(); { md.BodyA = m_groundBody; md.BodyB = body; md.Target = p; md.MaxForce = 1000.0f * body.Mass; m_mouseJoint = (MouseJoint)m_world.CreateJoint(md); } body.IsAwake = true; } }
public void MouseDown(Vec2 p) { if (_mouseJoint != null) { return; } // Make a small box. AABB aabb = new AABB(); Vec2 d = new Vec2(); d.Set(0.001f, 0.001f); aabb.LowerBound = p - d; aabb.UpperBound = p + d; // Query the world for overlapping shapes. int k_maxCount = 10; Fixture[] shapes = new Fixture[k_maxCount]; int count = _world.Query(aabb, shapes, k_maxCount); Body body = null; for (int i = 0; i < count; ++i) { Body shapeBody = shapes[i].Body; if (shapeBody.IsStatic() == false && shapeBody.GetMass() > 0.0f) { bool inside = shapes[i].TestPoint(p); if (inside) { body = shapes[i].Body; break; } } } if (body != null) { MouseJointDef md = new MouseJointDef(); md.Body1 = _world.GetGroundBody(); md.Body2 = body; md.Target = p; #if TARGET_FLOAT32_IS_FIXED md.MaxForce = (body.GetMass() < 16.0f)? (1000.0f * body.GetMass()) : 16000.0f; #else md.MaxForce = 1000.0f * body.GetMass(); #endif _mouseJoint = (MouseJoint)_world.CreateJoint(md); body.WakeUp(); } }
public virtual void MouseDown(Vector2 p) { _mouseWorld = p; if (_mouseJoint != null) { return; } // Make a small box. AABB aabb; Vector2 d = new Vector2(0.001, 0.001); aabb.lowerBound = p - d; aabb.upperBound = p + d; Fixture _fixture = null; // Query the world for overlapping shapes. _world.QueryAABB( (fixtureProxy) => { var fixture = fixtureProxy.fixture; Body body = fixture.GetBody(); if (body.GetType() == BodyType.Dynamic) { bool inside = fixture.TestPoint(p); if (inside) { _fixture = fixture; // We are done, terminate the query. return(false); } } // Continue the query. return(true); }, ref aabb); if (_fixture != null) { Body body = _fixture.GetBody(); MouseJointDef md = new MouseJointDef(); md.bodyA = _groundBody; md.bodyB = body; md.target = p; md.maxForce = 1000.0f * body.GetMass(); _mouseJoint = (MouseJoint)_world.CreateJoint(md); body.SetAwake(true); } }
void Start() { defaultGround = Box2DWorld.Instance().CreateDefaultGroundBody(); var jointDef = new MouseJointDef(); jointDef.Body1 = defaultGround; jointDef.Body2 = GetComponent <Box2DBody>(); jointDef.Target = worldMousePosition; jointDef.FrequencyHz = 30; jointDef.DampingRatio = 0.2f; jointDef.MaxForce = jointDef.Body2.GetMass() * force; joint = (MouseJoint)Box2DWorld.Instance().CreateJoint(jointDef); }
/// <summary> /// Mouse interaction event. /// </summary> public void MouseDown(Vec2 p) { if (_mouseJoint != null) { return; } // Make a small box. AABB aabb = new AABB(); Vec2 d = new Vec2(); d.Set(0.001f, 0.001f); aabb.LowerBound = p - d; aabb.UpperBound = p + d; // Query the world for overlapping shapes. int k_maxCount = 10; Shape[] shapes = new Shape[k_maxCount]; int count = _world.Query(aabb, shapes, k_maxCount); Body body = null; for (int i = 0; i < count; ++i) { Body shapeBody = shapes[i].GetBody(); if (shapeBody.IsStatic() == false && shapeBody.GetMass() > 0.0f) { bool inside = shapes[i].TestPoint(shapeBody.GetXForm(), p); if (inside) { body = shapes[i].GetBody(); break; } } } if (body != null) { MouseJointDef md = new MouseJointDef(); md.Body1 = _world.GetGroundBody(); md.Body2 = body; md.Target = p; md.MaxForce = 1000.0f * body.GetMass(); md.FrequencyHz = 30f; _mouseJoint = (MouseJoint)_world.CreateJoint(md); body.WakeUp(); } }
public MouseJoint AddJointMouse(Body body, Vec2 target) { var mouseJointDef = new MouseJointDef(); mouseJointDef.Body1 = world.GetGroundBody(); mouseJointDef.Body2 = body; mouseJointDef.MaxForce = 1000 * body.GetMass(); mouseJointDef.Target = target; mouseJointDef.CollideConnected = true; mouseJointDef.DampingRatio = 0; var joint = (MouseJoint)world.CreateJoint(mouseJointDef); return(joint); }
/// <summary> /// Handles what happens when a user clicks the mouse /// </summary> /// <param name="p"> /// The position of the mouse click in relative coordinates. /// </param> public void MouseDown(Vector point) { Vector p = RelativeToWorld(point); if (mouseJoint != null) { throw new Exception("ASSERT: mouseJoint should be null"); } // Make a small box. Vector d = new Vector(.001f, .001f); AABB aabb = new AABB(p - d, p + d); // Query the world for overlapping shapes. IList <Shape> shapes = world.Query(aabb); Body body = null; foreach (Shape shape in shapes) { if (shape.Body.Static == false && shape.TestPoint(shape.Body.GetXForm(), p)) { body = shape.Body; break; } } if (body != null) { MouseJointDef md = new MouseJointDef(); md.Body1 = world.GetGroundBody(); md.Body2 = body; md.Target = p; md.MaxForce = 1000 * body.Mass; mouseJoint = new MouseJoint(world.CreateJoint(md)); body.WakeUp(); } }
public virtual void MouseDown(Vec2 p) { m_mouseWorld = p; if (m_mouseJoint != null) { return; } // Make a small box. AABB aabb = new AABB(); Vec2 d = new Vec2(0.001f, 0.001f); aabb.LowerBound = p - d; aabb.UpperBound = p + d; // Query the world for overlapping shapes. testPoint = p; _selectedFixture = null; m_world.QueryAABB( MouseQueryAABB, aabb); if (_selectedFixture != null) { Body body = _selectedFixture.Value.Body; MouseJointDef md = new MouseJointDef(); { md.BodyA = m_groundBody; md.BodyB = body; md.Target = p; md.MaxForce = 1000.0f * body.Mass; m_mouseJoint = (MouseJoint)m_world.CreateJoint(md); } body.IsAwake = true; } }
public virtual void MouseDown(Vector2 p) { _mouseWorld = p; if (_mouseJoint != null) { return; } // Make a small box. AABB aabb; Vector2 d = new Vector2(0.001f, 0.001f); aabb.lowerBound = p - d; aabb.upperBound = p + d; Fixture _fixture = null; // Query the world for overlapping shapes. _world.QueryAABB( (fixtureProxy) => { var fixture = fixtureProxy.fixture; Body body = fixture.GetBody(); if (body.GetType() == BodyType.Dynamic) { bool inside = fixture.TestPoint(p); if (inside) { _fixture = fixture; // We are done, terminate the query. return false; } } // Continue the query. return true; }, ref aabb); if (_fixture != null) { Body body = _fixture.GetBody(); MouseJointDef md = new MouseJointDef(); md.bodyA = _groundBody; md.bodyB = body; md.target = p; md.maxForce = 1000.0f * body.GetMass(); _mouseJoint = (MouseJoint)_world.CreateJoint(md); body.SetAwake(true); } }