Esempio n. 1
0
    private void StickToPlayers()
    {
        VertletSegment firstSegment = vertletSegments[0];

        firstSegment.curPosition = PlayerController.player1.transform.position + ropePlayerOffset;
        this.vertletSegments[0]  = firstSegment;

        //Constrant to Second Point
        VertletSegment endSegment = this.vertletSegments[vertletSegments.Count - 1];

        endSegment.curPosition = PlayerController.player2.transform.position + ropePlayerOffset;
        this.vertletSegments[vertletSegments.Count - 1] = endSegment;

        for (int i = 0; i < this.numSegments - 1; i++)
        {
            VertletSegment firstSeg  = this.vertletSegments[i];
            VertletSegment secondSeg = this.vertletSegments[i + 1];

            float   dist      = (firstSeg.curPosition - secondSeg.curPosition).magnitude;
            float   error     = Mathf.Abs(dist - this.ropeSegmentLength);
            Vector2 changeDir = Vector2.zero;

            if (dist > ropeSegmentLength)
            {
                changeDir = (firstSeg.curPosition - secondSeg.curPosition).normalized;
            }
            else if (dist < ropeSegmentLength)
            {
                changeDir = (secondSeg.curPosition - firstSeg.curPosition).normalized;
            }

            Vector2 changeAmount = changeDir * error;
            if (i != 0)
            {
                firstSeg.curPosition  -= changeAmount * 0.5f;
                vertletSegments[i]     = firstSeg;
                secondSeg.curPosition += changeAmount * 0.5f;
                vertletSegments[i + 1] = secondSeg;
            }
            else
            {
                secondSeg.curPosition += changeAmount;
                vertletSegments[i + 1] = secondSeg;
            }
        }
    }
Esempio n. 2
0
    private void SimulatePhysics()
    {
        Vector2 gravity = Vector2.down;

        for (int i = 1; i < this.numSegments; i++)
        {
            VertletSegment firstSegment = this.vertletSegments[i];
            Vector2        velocity     = firstSegment.curPosition - firstSegment.posOld;
            firstSegment.posOld       = firstSegment.curPosition;
            firstSegment.curPosition += velocity;
            firstSegment.curPosition += gravity * Time.fixedDeltaTime;
            this.vertletSegments[i]   = firstSegment;
        }

        //CONSTRAINTS
        for (int i = 0; i < 50; i++)
        {
            this.StickToPlayers();
        }
    }