public void BuildSoftBody(List<VoxMass> points, List<Link> links) { if ( masses == null ) masses = new List<MegaSoftMass>(); masses.Clear(); float ms = Mass / (float)(points.Count + 1); for ( int i = 0; i < points.Count; i++ ) { MegaSoftMass rm = new MegaSoftMass(ms, points[i].p); masses.Add(rm); } if ( springs == null ) springs = new List<MegaSoftSpring>(); springs.Clear(); if ( constraints == null ) constraints = new List<MegaSoftPointConstraint>(); if ( lenconstraints == null ) lenconstraints = new List<MegaSoftLengthConstraint>(); constraints.Clear(); lenconstraints.Clear(); float damp1 = (DampingRatio * 0.45f) * (2.0f * Mathf.Sqrt(ms * spring)); Debug.Log("ratio " + DampingRatio + " damp " + damp1); for ( int i = 0; i < links.Count - 1; i++ ) { MegaSoftSpring spr = new MegaSoftSpring(links[i].m1, links[i].m2, spring, damp, this, 1.0f); //stretch); springs.Add(spr); //if ( lengthConstraints ) //{ //MegaSoftLengthConstraint lcon = new MegaSoftLengthConstraint(links[i].m1, links[i].m2, spr.restlen); //lenconstraints.Add(lcon); //} } if ( stiffnessSprings ) { //int gap = 2; //for ( int i = 0; i < masses.Count - gap; i++ ) //{ // MegaWireSpring spr = new MegaWireSpring(i, i + 2, wire.stiffrate, wire.stiffdamp, this, wire.stretch); // springs.Add(spr); //} } // Apply fixed end constraints //MegaWirePointConstraint pcon = new MegaWirePointConstraint(0, start.transform, outOffset); //constraints.Add(pcon); //pcon = new MegaWirePointConstraint(masses.Count - 1, end.transform, inOffset); //constraints.Add(pcon); masspos = new Vector3[masses.Count + 2]; for ( int i = 0; i < masses.Count; i++ ) masspos[i + 1] = masses[i].pos; masspos[0] = masses[0].pos - (masses[1].pos - masses[0].pos); masspos[masspos.Length - 1] = masses[masses.Count - 1].pos + (masses[masses.Count - 1].pos - masses[masses.Count - 2].pos); }
public void BuildSoftBody(List <VoxMass> points, List <Link> links) { if (masses == null) { masses = new List <MegaSoftMass>(); } masses.Clear(); float ms = Mass / (float)(points.Count + 1); for (int i = 0; i < points.Count; i++) { MegaSoftMass rm = new MegaSoftMass(ms, points[i].p); masses.Add(rm); } if (springs == null) { springs = new List <MegaSoftSpring>(); } springs.Clear(); if (constraints == null) { constraints = new List <MegaSoftPointConstraint>(); } if (lenconstraints == null) { lenconstraints = new List <MegaSoftLengthConstraint>(); } constraints.Clear(); lenconstraints.Clear(); float damp1 = (DampingRatio * 0.45f) * (2.0f * Mathf.Sqrt(ms * spring)); Debug.Log("ratio " + DampingRatio + " damp " + damp1); for (int i = 0; i < links.Count - 1; i++) { MegaSoftSpring spr = new MegaSoftSpring(links[i].m1, links[i].m2, spring, damp, this, 1.0f); //stretch); springs.Add(spr); //if ( lengthConstraints ) //{ //MegaSoftLengthConstraint lcon = new MegaSoftLengthConstraint(links[i].m1, links[i].m2, spr.restlen); //lenconstraints.Add(lcon); //} } if (stiffnessSprings) { //int gap = 2; //for ( int i = 0; i < masses.Count - gap; i++ ) //{ // MegaWireSpring spr = new MegaWireSpring(i, i + 2, wire.stiffrate, wire.stiffdamp, this, wire.stretch); // springs.Add(spr); //} } // Apply fixed end constraints //MegaWirePointConstraint pcon = new MegaWirePointConstraint(0, start.transform, outOffset); //constraints.Add(pcon); //pcon = new MegaWirePointConstraint(masses.Count - 1, end.transform, inOffset); //constraints.Add(pcon); masspos = new Vector3[masses.Count + 2]; for (int i = 0; i < masses.Count; i++) { masspos[i + 1] = masses[i].pos; } masspos[0] = masses[0].pos - (masses[1].pos - masses[0].pos); masspos[masspos.Length - 1] = masses[masses.Count - 1].pos + (masses[masses.Count - 1].pos - masses[masses.Count - 2].pos); }