Esempio n. 1
0
        public Rope()
        {
            const int N = 40;
            b2Vec2[] vertices = new b2Vec2[N];
            float[] masses = new float[N];

            for (int i = 0; i < N; ++i)
            {
                vertices[i].Set(0.0f, 20.0f - 0.25f * i);
                masses[i] = 1.0f;
            }
            masses[0] = 0.0f;
            masses[1] = 0.0f;

            b2RopeDef def = new b2RopeDef();
            def.vertices = vertices;
            def.count = N;
            def.gravity.Set(0.0f, -10.0f);
            def.masses = masses;
            def.damping = 0.1f;
            def.k2 = 1.0f;
            def.k3 = 0.5f;

            m_rope.Initialize(def);

            m_angle = 0.0f;
            m_rope.SetAngle(m_angle);
        }
Esempio n. 2
0
        public void Initialize(b2RopeDef def)
        {
            //    Debug.Assert(def.count >= 3);
            m_count = def.count;
            m_ps    = new b2Vec2[m_count];
            m_p0s   = new b2Vec2[m_count];
            m_vs    = new b2Vec2[m_count];
            m_ims   = new float[m_count];

            for (int i = 0; i < m_count; ++i)
            {
                m_ps[i]  = def.vertices[i];
                m_p0s[i] = def.vertices[i];
                m_vs[i].SetZero();

                float m = def.masses[i];
                if (m > 0.0f)
                {
                    m_ims[i] = 1.0f / m;
                }
                else
                {
                    m_ims[i] = 0.0f;
                }
            }

            int count2 = m_count - 1;
            int count3 = m_count - 2;

            m_Ls = new float[count2];
            m_as = new float[count3];

            for (int i = 0; i < count2; ++i)
            {
                b2Vec2 p1 = m_ps[i];
                b2Vec2 p2 = m_ps[i + 1];
                m_Ls[i] = b2Math.b2Distance(p1, p2);
            }

            for (int i = 0; i < count3; ++i)
            {
                b2Vec2 p1 = m_ps[i];
                b2Vec2 p2 = m_ps[i + 1];
                b2Vec2 p3 = m_ps[i + 2];

                b2Vec2 d1 = p2 - p1;
                b2Vec2 d2 = p3 - p2;

                float a = b2Math.b2Cross(ref d1, ref d2);
                float b = b2Math.b2Dot(ref d1, ref d2);

                m_as[i] = b2Math.b2Atan2(a, b);
            }

            m_gravity = def.gravity;
            m_damping = def.damping;
            m_k2      = def.k2;
            m_k3      = def.k3;
        }
Esempio n. 3
0
        public void Initialize(b2RopeDef def)
        {
            //    b2Assert(def.count >= 3);
            m_count = def.count;
            m_ps = new b2Vec2[m_count];
            m_p0s = new b2Vec2[m_count];
            m_vs = new b2Vec2[m_count];
            m_ims = new float[m_count];

            for (int i = 0; i < m_count; ++i)
            {
                m_ps[i] = def.vertices[i];
                m_p0s[i] = def.vertices[i];
                m_vs[i].SetZero();

                float m = def.masses[i];
                if (m > 0.0f)
                {
                    m_ims[i] = 1.0f / m;
                }
                else
                {
                    m_ims[i] = 0.0f;
                }
            }

            int count2 = m_count - 1;
            int count3 = m_count - 2;
            m_Ls = new float[count2];
            m_as = new float[count3];

            for (int i = 0; i < count2; ++i)
            {
                b2Vec2 p1 = m_ps[i];
                b2Vec2 p2 = m_ps[i + 1];
                m_Ls[i] = b2Math.b2Distance(p1, p2);
            }

            for (int i = 0; i < count3; ++i)
            {
                b2Vec2 p1 = m_ps[i];
                b2Vec2 p2 = m_ps[i + 1];
                b2Vec2 p3 = m_ps[i + 2];

                b2Vec2 d1 = p2 - p1;
                b2Vec2 d2 = p3 - p2;

                float a = b2Math.b2Cross(d1, d2);
                float b = b2Math.b2Dot(d1, d2);

                m_as[i] = b2Math.b2Atan2(a, b);
            }

            m_gravity = def.gravity;
            m_damping = def.damping;
            m_k2 = def.k2;
            m_k3 = def.k3;
        }