Пример #1
0
    void OnPostRender()
    {
        if (_mouseJoint != null)
        {
            Vector2 p1 = _mouseJoint.GetAnchorB();
            Vector2 p2 = _mouseJoint.GetTarget();

            _debugDraw.DrawPoint(p1, 0.5f, new Color(0.0f, 1.0f, 0.0f));
            _debugDraw.DrawPoint(p1, 0.5f, new Color(0.0f, 1.0f, 0.0f));
            _debugDraw.DrawSegment(p1, p2, new Color(0.8f, 0.8f, 0.8f));
        }
        if (_bombSpawning)
        {
            _debugDraw.DrawPoint(_bombSpawnPoint, 0.5f, new Color(0.0f, 0.0f, 1.0f));
            _debugDraw.DrawSegment(_mouseWorld, _bombSpawnPoint, new Color(0.8f, 0.8f, 0.8f));
        }
    }
Пример #2
0
        public virtual void Step(Settings settings)
        {
            UnityEngine.Debug.Log("step");

            double timeStep = settings.hz > 0.0f ? 1.0f / settings.hz : 0.0f;

            if (settings.pause > 0)
            {
                if (settings.singleStep > 0)
                {
                    settings.singleStep = 0;
                }
                else
                {
                    timeStep = 0.0f;
                }

                _debugDraw.DrawString(50, _textLine, "****PAUSED****");
                _textLine += 15;
            }

            uint flags = 0;

            flags           += settings.drawShapes * (uint)DebugDrawFlags.Shape;
            flags           += settings.drawJoints * (uint)DebugDrawFlags.Joint;
            flags           += settings.drawAABBs * (uint)DebugDrawFlags.AABB;
            flags           += settings.drawPairs * (uint)DebugDrawFlags.Pair;
            flags           += settings.drawCOMs * (uint)DebugDrawFlags.CenterOfMass;
            _debugDraw.Flags = (DebugDrawFlags)flags;

            _world.WarmStarting      = (settings.enableWarmStarting > 0);
            _world.ContinuousPhysics = (settings.enableContinuous > 0);

            _pointCount = 0;

            _world.Step(timeStep, settings.velocityIterations, settings.positionIterations);

            _world.DrawDebugData();

            if (timeStep > 0.0f)
            {
                ++_stepCount;
            }

            if (settings.drawStats > 0)
            {
                _debugDraw.DrawString(50, _textLine, "bodies/contacts/joints/proxies = {0:n}/{1:n}/{2:n}",
                                      _world.BodyCount, _world.ContactCount, _world.JointCount, _world.ProxyCount);
                _textLine += 15;
            }

            if (_mouseJoint != null)
            {
                Vector2 p1 = _mouseJoint.GetAnchorB();
                Vector2 p2 = _mouseJoint.GetTarget();

                _debugDraw.DrawPoint(p1, 0.5f, new ColorR(0.0f, 1.0f, 0.0f));
                _debugDraw.DrawPoint(p1, 0.5f, new ColorR(0.0f, 1.0f, 0.0f));
                _debugDraw.DrawSegment(p1, p2, new ColorR(0.8f, 0.8f, 0.8f));
            }

            if (_bombSpawning)
            {
                _debugDraw.DrawPoint(_bombSpawnPoint, 0.5f, new ColorR(0.0f, 0.0f, 1.0f));
                _debugDraw.DrawSegment(_mouseWorld, _bombSpawnPoint, new ColorR(0.8f, 0.8f, 0.8f));
            }

            if (settings.drawContactPoints > 0)
            {
                //double k_impulseScale = 0.1f;
                const double k_axisScale = 0.3f;

                for (int i = 0; i < _pointCount; ++i)
                {
                    ContactPoint point = _points[i];

                    if (point.state == PointState.Add)
                    {
                        // Add
                        _debugDraw.DrawPoint(point.position, 1.5f, new ColorR(0.3f, 0.95f, 0.3f));
                    }
                    else if (point.state == PointState.Persist)
                    {
                        // Persist
                        _debugDraw.DrawPoint(point.position, 0.65f, new ColorR(0.3f, 0.3f, 0.95f));
                    }

                    if (settings.drawContactNormals == 1)
                    {
                        Vector2 p1 = point.position;
                        Vector2 p2 = p1 + k_axisScale * point.normal;
                        _debugDraw.DrawSegment(p1, p2, new ColorR(0.4f, 0.9f, 0.4f));
                    }
                    else if (settings.drawContactForces == 1)
                    {
                        //Vector2 p1 = point.position;
                        //Vector2 p2 = p1 + k_forceScale * point.normalForce * point.normal;
                        //DrawSegment(p1, p2, Color(0.9f, 0.9f, 0.3f));
                    }

                    if (settings.drawFrictionForces == 1)
                    {
                        //Vector2 tangent = b2Cross(point.normal, 1.0f);
                        //Vector2 p1 = point.position;
                        //Vector2 p2 = p1 + k_forceScale * point.tangentForce * tangent;
                        //DrawSegment(p1, p2, Color(0.9f, 0.9f, 0.3f));
                    }
                }
            }
        }