示例#1
0
文件: Test.cs 项目: X-Ray-Jin/Box2D
        /// <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();
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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();
            }
        }
示例#6
0
文件: Test.cs 项目: CrazyLiu00/GMap
        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();
            }
        }
示例#9
0
        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);
        }
示例#10
0
        /// <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();
            }
        }
示例#11
0
        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;
            }
        }
示例#12
0
文件: Test.cs 项目: n1ckd0r/Box2D.XNA
	    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);
	        }

        }