public static void DrawSpring(SpringHandler.spring ss, ref SpringHandler.particle[] ps, Color col) { Debug.DrawLine(ps[ss.connectionA].position, ps[ss.connectionB].position, col); }
void Update() { if (clothHandler != null) { clothComputeShader.SetVector("fixedPos", clothHandler.transform.position); } clothComputeShader.SetFloat("globalStiffness", globalStiffness); clothComputeShader.SetFloat("globalDamping", damping); clothComputeShader.SetFloat("mass", mass); clothComputeShader.SetFloat("gravityMul", gravityMul); clothComputeShader.SetVector("spherePos", sphereCollider.transform.position); clothComputeShader.SetFloat("sphereRadius", sphereCollider.transform.lossyScale.y / 2); for (int i = 0; i < solverSteps; i++) { clothComputeShader.SetFloat("deltaTime", Time.deltaTime / solverSteps); clothComputeShader.Dispatch(mainClothKernelHandler, count / 8, 1, 1); } SpringHandler.particle[] ps = new SpringHandler.particle[count]; SpringHandler.spring[] ss = new SpringHandler.spring[springCount]; particleBuffer.GetData(ps); springBuffer.GetData(ss); if (drawCloth) { DrawAllConnections(ps, ss); } if (drawVelocities) { SpringHandler.DrawVelocity(ps); } if (printDebug) { Print("Velocities", ps); printDebug = false; } for (int i = 0; i < ss.Length; i++) { SpringHandler.spring s = ss[i]; switch ((SpringHandler.SpringType)s.springType) { case (SpringHandler.SpringType.StructuralSpring): s = SpringHandler.ApplyChanges(s, structuralSpringVars); break; case (SpringHandler.SpringType.ShearSpring): s = SpringHandler.ApplyChanges(s, shearSpringVars); break; case (SpringHandler.SpringType.StructuralBendingSpring): s = SpringHandler.ApplyChanges(s, structuralBendingSpringVars); break; case (SpringHandler.SpringType.ShearBendingSpring): s = SpringHandler.ApplyChanges(s, shearBendingSpringVars); break; } ss[i] = s; } particleBuffer.SetData(ps); springBuffer.SetData(ss); }