コード例 #1
0
 public DisPreLink(JellyVertex a, JellyVertex b, float ks, float kd)
 {
     jva         = a;
     jvb         = b;
     KS          = ks;
     KD          = kd;
     OrgDistance = (a.Position - b.Position).Length();
 }
コード例 #2
0
    public void GetVertices()
    {
        jellyVertices       = new JellyVertex[mesh.vertices.Length];
        currentMeshVertices = mesh.vertices;

        for (int i = 0; i < mesh.vertices.Length; i++)
        {
            jellyVertices[i] = new JellyVertex(i, mesh.vertices[i], mesh.vertices[i], Vector3.zero);
        }
    }
コード例 #3
0
 private void GetVertices()
 {
     jellyVerts       = new JellyVertex[mesh.vertices.Length];
     currentMeshVerts = new Vector3[mesh.vertices.Length];
     for (int i = 0; i < mesh.vertices.Length; i++)
     {
         jellyVerts[i]       = new JellyVertex(i, mesh.vertices[i], mesh.vertices[i], Vector3.zero);
         currentMeshVerts[i] = mesh.vertices[i];
     }
 }
コード例 #4
0
ファイル: Jellyfier.cs プロジェクト: Jakkkk136/CatchMe
 private void GetVertices()
 {
     _jellyVertices      = new JellyVertex[_mesh.vertices.Length];
     currentMeshVertices = new Vector3[_mesh.vertices.Length];
     for (int i = 0; i < _mesh.vertices.Length; i++)
     {
         _jellyVertices[i]      = new JellyVertex(i, _mesh.vertices[i], _mesh.vertices[i], Vector3.zero);
         currentMeshVertices[i] = _mesh.vertices[i];
     }
 }
コード例 #5
0
ファイル: ArePreLink.cs プロジェクト: lyhyl/WorldOfJelly
 public ArePreLink(JellyVertex a, JellyVertex b, JellyVertex c, float ka, JellyVector2 nab, JellyVector2 nbc, JellyVector2 nca)
 {
     jva           = a;
     jvb           = b;
     jvc           = c;
     KA            = ka;
     NorAB         = nab;
     NorBC         = nbc;
     NorCA         = nca;
     OrgDoubleArea = DoubleArea;
 }
コード例 #6
0
ファイル: JellyMesh.cs プロジェクト: kblood/Quest-VR-Menu
 // Awake is called when the gameobject becomes active
 void Awake()
 {
     OriginalMesh = GetComponent <MeshFilter>().sharedMesh;
     MeshClone    = Instantiate(OriginalMesh);
     GetComponent <MeshFilter>().sharedMesh = MeshClone;
     renderer = GetComponent <MeshRenderer>();
     jv       = new JellyVertex[MeshClone.vertices.Length];
     for (int i = 0; i < MeshClone.vertices.Length; i++)
     {
         jv[i] = new JellyVertex(i, transform.TransformPoint(MeshClone.vertices[i]));
     }
 }
コード例 #7
0
 // Start is called before the first frame update
 void Start()
 {
     baseScale    = transform.localScale;
     OriginalMesh = GetComponent <MeshFilter>().sharedMesh;
     MeshClone    = Instantiate(OriginalMesh);
     GetComponent <MeshFilter>().sharedMesh = MeshClone;
     flubberRenderer = GetComponent <MeshRenderer>();
     jv = new JellyVertex[MeshClone.vertices.Length];
     for (int i = 0; i < MeshClone.vertices.Length; i++)
     {
         jv[i] = new JellyVertex(i, transform.TransformPoint(MeshClone.vertices[i]));
     }
 }
コード例 #8
0
    private void Start()
    {
        _originalMesh = GetComponent <MeshFilter>().sharedMesh;
        _cloneMesh    = Instantiate(_originalMesh);
        GetComponent <MeshFilter>().sharedMesh = _cloneMesh;
        _meshRenderer  = GetComponent <MeshRenderer>();
        _jellyVertexes = new JellyVertex[_cloneMesh.vertices.Length];

        for (int i = 0; i < _jellyVertexes.Length; i++)
        {
            _jellyVertexes[i] = new JellyVertex(i, transform.TransformPoint(_cloneMesh.vertices[i]));
        }
    }
コード例 #9
0
    private void Start()
    {
        originalMesh = GetComponent <MeshFilter>().sharedMesh;
        cloneMesh    = Instantiate(originalMesh);
        GetComponent <MeshFilter>().sharedMesh = cloneMesh;
        meshRenderer = GetComponent <MeshRenderer>();
        rg           = GetComponent <Rigidbody>();

        jv = new JellyVertex[cloneMesh.vertices.Length];
        for (int i = 0; i < cloneMesh.vertices.Length; i++)
        {
            jv[i] = new JellyVertex(i, transform.TransformPoint(cloneMesh.vertices[i]));
        }
    }
コード例 #10
0
    private void GetVertices()
    {
        jellyVertices       = new JellyVertex[mesh.vertices.Length];
        currentMeshVertices = new Vector3[mesh.vertices.Length];
        for (int i = 0; i < mesh.vertices.Length; i++)
        {
            jellyVertices[i]       = new JellyVertex(i, mesh.vertices[i], mesh.vertices[i], Vector3.zero);
            currentMeshVertices[i] = mesh.vertices[i];
        }

        mesh.vertices = currentMeshVertices;
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();
        mesh.RecalculateTangents();
    }
コード例 #11
0
ファイル: JellyDouble.cs プロジェクト: lyhyl/WorldOfJelly
        public JellyDouble(GraphicsDevice gd, float mass, float size, Color color, JellyVector2 pos)
            : base(gd, mass, size, color, 6)
        {
            //nodes
            _nodes    = new JellyVertex[8];
            _nodes[0] = new JellyVertex(new JellyVector2(pos.X + -2 * size, pos.Y + 1 * size));
            _nodes[1] = new JellyVertex(new JellyVector2(pos.X + 0 * size, pos.Y + 1 * size));
            _nodes[2] = new JellyVertex(new JellyVector2(pos.X + 2 * size, pos.Y + 1 * size));
            _nodes[3] = new JellyVertex(new JellyVector2(pos.X + -1 * size, pos.Y + 0 * size));
            _nodes[4] = new JellyVertex(new JellyVector2(pos.X + 1 * size, pos.Y + 0 * size));
            _nodes[5] = new JellyVertex(new JellyVector2(pos.X + -2 * size, pos.Y + -1 * size));
            _nodes[6] = new JellyVertex(new JellyVector2(pos.X + 0 * size, pos.Y + -1 * size));
            _nodes[7] = new JellyVertex(new JellyVector2(pos.X + 2 * size, pos.Y + -1 * size));

            InitExceptNode();
        }
コード例 #12
0
    void Start()
    {
        MeshFilter mesh = GetComponent <MeshFilter>();

        renderer = GetComponent <MeshRenderer>();

        originalMesh    = mesh.sharedMesh;
        clonedMesh      = Instantiate(originalMesh);
        mesh.sharedMesh = clonedMesh;

        Vector3[] vertices = originalMesh.vertices;
        jellyVertices = new JellyVertex[vertices.Length];
        for (int i = 0; i < vertices.Length; ++i)
        {
            jellyVertices[i] = new JellyVertex(transform.TransformPoint(vertices[i]));
        }
    }
コード例 #13
0
ファイル: JellyDouble.cs プロジェクト: lyhyl/WorldOfJelly
        internal JellyDouble(GraphicsDevice gd, float mass, float size, Color col, JellyVector2 a, JellyVector2 b)
            : base(gd, mass, size, col, 6)
        {
            //nodes
            _nodes = new JellyVertex[8];
            JellyVector2 mid = (a + b) * 0.5f;

            _nodes[0] = new JellyVertex(new JellyVector2(mid.X + -2 * size, mid.Y + 1 * size));
            _nodes[1] = new JellyVertex(new JellyVector2(mid.X + 0 * size, mid.Y + 1 * size));
            _nodes[2] = new JellyVertex(new JellyVector2(mid.X + 2 * size, mid.Y + 1 * size));
            _nodes[3] = new JellyVertex(new JellyVector2(mid.X + -1 * size, mid.Y + 0 * size));
            _nodes[4] = new JellyVertex(new JellyVector2(mid.X + 1 * size, mid.Y + 0 * size));
            _nodes[5] = new JellyVertex(new JellyVector2(mid.X + -2 * size, mid.Y + -1 * size));
            _nodes[6] = new JellyVertex(new JellyVector2(mid.X + 0 * size, mid.Y + -1 * size));
            _nodes[7] = new JellyVertex(new JellyVector2(mid.X + 2 * size, mid.Y + -1 * size));

            InitExceptNode();
        }
コード例 #14
0
    void FixedUpdate()
    {
        vertices = originalMesh.vertices;

        for (int i = 0; i < jellyVertices.Length; ++i)
        {
            JellyVertex jellyVertex = jellyVertices[i];
            Vector3     vertex      = vertices[i];

            Vector3 target = transform.TransformPoint(vertex);
            float   factor = (1 - (renderer.bounds.max.y - target.y) / renderer.bounds.size.y) * intensity;

            jellyVertex.Shake(target, mass, stiffness, damping);
            target = transform.InverseTransformPoint(jellyVertex.position);

            vertices[i] = Vector3.Lerp(vertex, target, factor);
        }

        clonedMesh.vertices = vertices;
    }
コード例 #15
0
ファイル: JellyBox.cs プロジェクト: lyhyl/WorldOfJelly
        public JellyBox(GraphicsDevice gd, float mass, float size, Color color, JellyVector2 pos)
            : base(gd, mass, size, color, 4)
        {
            //nodes
            _nodes    = new JellyVertex[5];
            _nodes[0] = new JellyVertex(new JellyVector2(pos.X + -1 * size, pos.Y + 1 * size));
            _nodes[1] = new JellyVertex(new JellyVector2(pos.X + 1 * size, pos.Y + 1 * size));
            _nodes[2] = new JellyVertex(new JellyVector2(pos.X + 0 * size, pos.Y + 0 * size));
            _nodes[3] = new JellyVertex(new JellyVector2(pos.X + -1 * size, pos.Y + -1 * size));
            _nodes[4] = new JellyVertex(new JellyVector2(pos.X + 1 * size, pos.Y + -1 * size));

            //distance links
            float KS = JellyWorld.KS;
            float KD = JellyWorld.KD;

            _disprelinks    = new DisPreLink[8];
            _disprelinks[0] = new DisPreLink(_nodes[0], _nodes[1], KS, KD);
            _disprelinks[1] = new DisPreLink(_nodes[1], _nodes[4], KS, KD);
            _disprelinks[2] = new DisPreLink(_nodes[4], _nodes[3], KS, KD);
            _disprelinks[3] = new DisPreLink(_nodes[3], _nodes[0], KS, KD);
            _disprelinks[4] = new DisPreLink(_nodes[2], _nodes[0], KS, KD);
            _disprelinks[5] = new DisPreLink(_nodes[2], _nodes[1], KS, KD);
            _disprelinks[6] = new DisPreLink(_nodes[2], _nodes[4], KS, KD);
            _disprelinks[7] = new DisPreLink(_nodes[2], _nodes[3], KS, KD);

            //area links
            float KA = JellyWorld.KA;

            _areprelinks    = new ArePreLink[4];
            _areprelinks[0] = new ArePreLink(_nodes[2], _nodes[1], _nodes[0], KA, _disprelinks[5].PosNormal, _disprelinks[0].NegNormal, _disprelinks[4].NegNormal);
            _areprelinks[1] = new ArePreLink(_nodes[2], _nodes[4], _nodes[1], KA, _disprelinks[6].PosNormal, _disprelinks[1].NegNormal, _disprelinks[5].NegNormal);
            _areprelinks[2] = new ArePreLink(_nodes[2], _nodes[3], _nodes[4], KA, _disprelinks[7].PosNormal, _disprelinks[2].NegNormal, _disprelinks[6].NegNormal);
            _areprelinks[3] = new ArePreLink(_nodes[2], _nodes[0], _nodes[3], KA, _disprelinks[4].PosNormal, _disprelinks[3].NegNormal, _disprelinks[7].NegNormal);

            //edges
            _edge[0] = _nodes[0];
            _edge[1] = _nodes[1];
            _edge[2] = _nodes[4];
            _edge[3] = _nodes[3];

            //edges' normals
            _edgenor[0] = _disprelinks[0].NegNormal;
            _edgenor[1] = _disprelinks[1].NegNormal;
            _edgenor[2] = _disprelinks[2].NegNormal;
            _edgenor[3] = _disprelinks[3].NegNormal;

            _cellNodes = new int[] { 2 };
            _extverid  = new int[] { 2 };

            short[] tri =
            {
                ExtVIdx(4, 0), ExtVIdx(4, 0),
                ExtVIdx(4, 0), ExtVIdx(4, 0)
            };
            short[] e_tri = { };

            //XNA
            InitXNA(1, tri, e_tri);

            SetupUV();

            _texture = ResourceManager.LoadImage("Jelly/Jelly_Base_1");

            _face_node_id = 2;
        }
コード例 #16
0
        public JellyTShape(GraphicsDevice gd, float mass, float size, Color color, JellyVector2 pos)
            : base(gd, mass, size, color, 10)
        {
            //nodes
            _nodes     = new JellyVertex[14];
            _nodes[0]  = new JellyVertex(new JellyVertex(pos.X + -1 * size, pos.Y + 2 * size));
            _nodes[1]  = new JellyVertex(new JellyVertex(pos.X + 1 * size, pos.Y + 2 * size));
            _nodes[2]  = new JellyVertex(new JellyVertex(pos.X + 0 * size, pos.Y + 1 * size));
            _nodes[3]  = new JellyVertex(new JellyVertex(pos.X + -3 * size, pos.Y + 0 * size));
            _nodes[4]  = new JellyVertex(new JellyVertex(pos.X + -1 * size, pos.Y + 0 * size));
            _nodes[5]  = new JellyVertex(new JellyVertex(pos.X + 1 * size, pos.Y + 0 * size));
            _nodes[6]  = new JellyVertex(new JellyVertex(pos.X + 3 * size, pos.Y + 0 * size));
            _nodes[7]  = new JellyVertex(new JellyVertex(pos.X + -2 * size, pos.Y + -1 * size));
            _nodes[8]  = new JellyVertex(new JellyVertex(pos.X + 0 * size, pos.Y + -1 * size));
            _nodes[9]  = new JellyVertex(new JellyVertex(pos.X + 2 * size, pos.Y + -1 * size));
            _nodes[10] = new JellyVertex(new JellyVertex(pos.X + -3 * size, pos.Y + -2 * size));
            _nodes[11] = new JellyVertex(new JellyVertex(pos.X + -1 * size, pos.Y + -2 * size));
            _nodes[12] = new JellyVertex(new JellyVertex(pos.X + 1 * size, pos.Y + -2 * size));
            _nodes[13] = new JellyVertex(new JellyVertex(pos.X + 3 * size, pos.Y + -2 * size));

            //distance links
            float KS = JellyWorld.KS;
            float KD = JellyWorld.KD;

            _disprelinks     = new DisPreLink[29];
            _disprelinks[0]  = new DisPreLink(_nodes[0], _nodes[1], KS, KD);
            _disprelinks[1]  = new DisPreLink(_nodes[1], _nodes[5], KS, KD);
            _disprelinks[2]  = new DisPreLink(_nodes[5], _nodes[6], KS, KD);
            _disprelinks[3]  = new DisPreLink(_nodes[6], _nodes[13], KS, KD);
            _disprelinks[4]  = new DisPreLink(_nodes[13], _nodes[12], KS, KD);
            _disprelinks[5]  = new DisPreLink(_nodes[12], _nodes[11], KS, KD);
            _disprelinks[6]  = new DisPreLink(_nodes[11], _nodes[10], KS, KD);
            _disprelinks[7]  = new DisPreLink(_nodes[10], _nodes[3], KS, KD);
            _disprelinks[8]  = new DisPreLink(_nodes[3], _nodes[4], KS, KD);
            _disprelinks[9]  = new DisPreLink(_nodes[4], _nodes[0], KS, KD);
            _disprelinks[10] = new DisPreLink(_nodes[5], _nodes[4], KS, KD);
            _disprelinks[11] = new DisPreLink(_nodes[5], _nodes[12], KS, KD);
            _disprelinks[12] = new DisPreLink(_nodes[4], _nodes[11], KS, KD);
            _disprelinks[13] = new DisPreLink(_nodes[2], _nodes[0], KS, KD);
            _disprelinks[14] = new DisPreLink(_nodes[2], _nodes[1], KS, KD);
            _disprelinks[15] = new DisPreLink(_nodes[2], _nodes[5], KS, KD);
            _disprelinks[16] = new DisPreLink(_nodes[2], _nodes[4], KS, KD);
            _disprelinks[17] = new DisPreLink(_nodes[8], _nodes[4], KS, KD);
            _disprelinks[18] = new DisPreLink(_nodes[8], _nodes[5], KS, KD);
            _disprelinks[19] = new DisPreLink(_nodes[8], _nodes[12], KS, KD);
            _disprelinks[20] = new DisPreLink(_nodes[8], _nodes[11], KS, KD);
            _disprelinks[21] = new DisPreLink(_nodes[7], _nodes[3], KS, KD);
            _disprelinks[22] = new DisPreLink(_nodes[7], _nodes[4], KS, KD);
            _disprelinks[23] = new DisPreLink(_nodes[7], _nodes[11], KS, KD);
            _disprelinks[24] = new DisPreLink(_nodes[7], _nodes[10], KS, KD);
            _disprelinks[25] = new DisPreLink(_nodes[9], _nodes[5], KS, KD);
            _disprelinks[26] = new DisPreLink(_nodes[9], _nodes[6], KS, KD);
            _disprelinks[27] = new DisPreLink(_nodes[9], _nodes[13], KS, KD);
            _disprelinks[28] = new DisPreLink(_nodes[9], _nodes[12], KS, KD);

            //area links
            float KA = JellyWorld.KA;

            _areprelinks     = new ArePreLink[16];
            _areprelinks[0]  = new ArePreLink(_nodes[2], _nodes[1], _nodes[0], KA, _disprelinks[14].PosNormal, _disprelinks[0].NegNormal, _disprelinks[13].NegNormal);
            _areprelinks[1]  = new ArePreLink(_nodes[2], _nodes[5], _nodes[1], KA, _disprelinks[15].PosNormal, _disprelinks[1].NegNormal, _disprelinks[14].NegNormal);
            _areprelinks[2]  = new ArePreLink(_nodes[2], _nodes[4], _nodes[5], KA, _disprelinks[16].PosNormal, _disprelinks[10].NegNormal, _disprelinks[15].NegNormal);
            _areprelinks[3]  = new ArePreLink(_nodes[2], _nodes[0], _nodes[4], KA, _disprelinks[13].PosNormal, _disprelinks[9].NegNormal, _disprelinks[16].NegNormal);
            _areprelinks[4]  = new ArePreLink(_nodes[7], _nodes[4], _nodes[3], KA, _disprelinks[22].PosNormal, _disprelinks[8].NegNormal, _disprelinks[21].NegNormal);
            _areprelinks[5]  = new ArePreLink(_nodes[7], _nodes[11], _nodes[4], KA, _disprelinks[23].PosNormal, _disprelinks[12].NegNormal, _disprelinks[22].NegNormal);
            _areprelinks[6]  = new ArePreLink(_nodes[7], _nodes[10], _nodes[11], KA, _disprelinks[24].PosNormal, _disprelinks[6].NegNormal, _disprelinks[23].NegNormal);
            _areprelinks[7]  = new ArePreLink(_nodes[7], _nodes[3], _nodes[10], KA, _disprelinks[21].PosNormal, _disprelinks[7].NegNormal, _disprelinks[24].NegNormal);
            _areprelinks[8]  = new ArePreLink(_nodes[8], _nodes[5], _nodes[4], KA, _disprelinks[18].PosNormal, _disprelinks[10].PosNormal, _disprelinks[17].NegNormal);
            _areprelinks[9]  = new ArePreLink(_nodes[8], _nodes[12], _nodes[5], KA, _disprelinks[19].PosNormal, _disprelinks[11].NegNormal, _disprelinks[18].NegNormal);
            _areprelinks[10] = new ArePreLink(_nodes[8], _nodes[11], _nodes[12], KA, _disprelinks[20].PosNormal, _disprelinks[5].NegNormal, _disprelinks[19].NegNormal);
            _areprelinks[11] = new ArePreLink(_nodes[8], _nodes[4], _nodes[11], KA, _disprelinks[17].PosNormal, _disprelinks[12].PosNormal, _disprelinks[20].NegNormal);
            _areprelinks[12] = new ArePreLink(_nodes[9], _nodes[6], _nodes[5], KA, _disprelinks[26].PosNormal, _disprelinks[2].NegNormal, _disprelinks[25].NegNormal);
            _areprelinks[13] = new ArePreLink(_nodes[9], _nodes[13], _nodes[6], KA, _disprelinks[27].PosNormal, _disprelinks[3].NegNormal, _disprelinks[26].NegNormal);
            _areprelinks[14] = new ArePreLink(_nodes[9], _nodes[12], _nodes[13], KA, _disprelinks[28].PosNormal, _disprelinks[4].NegNormal, _disprelinks[27].NegNormal);
            _areprelinks[15] = new ArePreLink(_nodes[9], _nodes[5], _nodes[12], KA, _disprelinks[25].PosNormal, _disprelinks[11].PosNormal, _disprelinks[28].NegNormal);

            //edges
            _edge[0] = _nodes[0];
            _edge[1] = _nodes[1];
            _edge[2] = _nodes[5];
            _edge[3] = _nodes[6];
            _edge[4] = _nodes[13];
            _edge[5] = _nodes[12];
            _edge[6] = _nodes[11];
            _edge[7] = _nodes[10];
            _edge[8] = _nodes[3];
            _edge[9] = _nodes[4];

            //edges' normals
            _edgenor[0] = _disprelinks[0].NegNormal;
            _edgenor[1] = _disprelinks[1].NegNormal;
            _edgenor[2] = _disprelinks[2].NegNormal;
            _edgenor[3] = _disprelinks[3].NegNormal;
            _edgenor[4] = _disprelinks[4].NegNormal;
            _edgenor[5] = _disprelinks[5].NegNormal;
            _edgenor[6] = _disprelinks[6].NegNormal;
            _edgenor[7] = _disprelinks[7].NegNormal;
            _edgenor[8] = _disprelinks[8].NegNormal;
            _edgenor[9] = _disprelinks[9].NegNormal;

            _cellNodes = new int[] { 2, 7, 8, 9 };
            _extverid  = new int[] { 2, 7, 8, 9 };

            short[] tri =
            {
                ExtVIdx(10, 0), ExtVIdx(10, 0),
                ExtVIdx(10, 3), ExtVIdx(10, 3),ExtVIdx(10,  3),
                ExtVIdx(10, 2),
                ExtVIdx(10, 1), ExtVIdx(10, 1),ExtVIdx(10,  1),
                ExtVIdx(10, 0)
            };
            short[] e_tri =
            {
                EgeVIdx(9), EgeVIdx(2), ExtVIdx(10, 0),
                EgeVIdx(9), EgeVIdx(2), ExtVIdx(10, 2),
                EgeVIdx(5), EgeVIdx(2), ExtVIdx(10, 2),
                EgeVIdx(5), EgeVIdx(2), ExtVIdx(10, 3),
                EgeVIdx(9), EgeVIdx(6), ExtVIdx(10, 2),
                EgeVIdx(9), EgeVIdx(6), ExtVIdx(10, 1)
            };

            //XNA
            InitXNA(4, tri, e_tri);

            SetupUV();

            _texture = ResourceManager.LoadImage("Jelly/Jelly_Base_1");

            _face_node_id = 8;
        }
コード例 #17
0
        public static void ProcessEdgeForce(JellyVertex[] polygon, JellyVertex jv)
        {
            if (JellyMath.PointInPolygon(polygon, jv.Position, new JellyVector2(-10000, -10000)))
            {
                jv.Velocity.X = -jv.Velocity.X * JellyWorld.Friciton;
                jv.Velocity.Y = -jv.Velocity.Y * JellyWorld.Friciton;
                jv.FX         = jv.FY = 0;
                jv.Position   = ClosestPoint(jv.Position, polygon);
            }
            else
            {
#if _DIS_RANGE_
                const float threshold = 44.7213595499958f;
#else
                const float threshold = 3162.27766016838f;
#endif
                const float  forcek = 100000;
                int          i      = 0;
                JellyVector2 cpt;
                bool         inVertex, inThreshold, inBack;
                while (i < polygon.Length - 1)
                {
                    FindClosestPointThreshold(jv.Position, polygon[i].Position, polygon[i + 1].Position, threshold * threshold,
                                              out cpt, out inVertex, out inThreshold, out inBack);
                    ++i;
                    if (!inBack && inThreshold)
                    {
                        JellyVector2 diff  = jv.Position - cpt;
                        float        dissq = diff.LengthSquared();
                        dissq = dissq == 0 ? 0.001f : dissq;
#if _DIS_RANGE_
                        float norsize = forcek / dissq - 50;
#else
                        float norsize = forcek / dissq;
#endif
                        norsize = norsize < 0 ? 0 : norsize;
                        if (inVertex)
                        {
                            norsize *= 0.5f;
                        }
                        diff.Normalize();
                        diff     *= norsize;
                        jv.Force += diff;
                    }
                }
                FindClosestPointThreshold(jv.Position, polygon[i].Position, polygon[0].Position, threshold * threshold,
                                          out cpt, out inVertex, out inThreshold, out inBack);
                if (!inBack && inThreshold)
                {
                    JellyVector2 diff  = jv.Position - cpt;
                    float        dissq = diff.LengthSquared();
                    dissq = dissq == 0 ? 0.001f : dissq;
#if _DIS_RANGE_
                    float norsize = forcek / dissq - 50;
#else
                    float norsize = forcek / dissq;
#endif
                    norsize = norsize < 0 ? 0 : norsize;
                    if (inVertex)
                    {
                        norsize *= 0.5f;
                    }
                    diff.Normalize();
                    diff     *= norsize;
                    jv.Force += diff;
                }
            }
        }
コード例 #18
0
 private void UpdateVertex(JellyVertex jv, float delay)
 {
     jv.Integrate(delay, Mass);
     jv.Restrict();
 }