using System; using UnityEngine; [Serializable] public class Spring2D { public int p1; public int p2; public float restLen; public float ks; public float kd; public float len; public Spring2D(int _p1, int _p2, float _ks, float _kd, MegaSoft2D mod) { p1 = _p1; p2 = _p2; ks = _ks; kd = _kd; restLen = Vector2.Distance(mod.masses[p1].pos, mod.masses[p2].pos); len = restLen; } public void doCalculateSpringForce(MegaSoft2D mod) { Vector2 vector = mod.masses[p1].pos - mod.masses[p2].pos; float magnitude = vector.magnitude; float num = (magnitude - restLen) * ks; Vector2 lhs = mod.masses[p1].vel - mod.masses[p2].vel; float num2 = Vector2.Dot(lhs, vector) * kd / magnitude; Vector2 vector2 = vector * (1f / magnitude); vector2 *= 0f - (num + num2); mod.masses[p1].force += vector2; mod.masses[p2].force -= vector2; } public void doCalculateSpringForce1(MegaSoft2D mod) { Vector2 vector = mod.masses[p1].pos - mod.masses[p2].pos; if (vector != Vector2.zero) { float magnitude = vector.magnitude; vector = vector.normalized; Vector2 vector2 = (0f - ks) * ((magnitude - restLen) * vector); mod.masses[p1].force += vector2; mod.masses[p2].force -= vector2; len = magnitude; } } public void doCalculateSpringForce2(MegaSoft2D mod) { Vector2 vector = mod.masses[p1].pos - mod.masses[p2].pos; float magnitude = vector.magnitude; float num = (magnitude - restLen) * ks; float num2 = magnitude - len; float num3 = num2 * kd / magnitude; Vector2 vector2 = vector * (1f / magnitude); vector2 *= 0f - (num + num3); mod.masses[p1].force += vector2; mod.masses[p2].force -= vector2; } }