private Counterparts GetMenInTheMiddle(Counterparts list) { Counterparts c = new Counterparts(); if (!part) { return(c); } foreach (Tosh_AutoStrut m in list) { foreach (Strut s2 in m.mStruts) { foreach (Strut s1 in mStruts) { Vector3 v = s2.position - s1.position; foreach (RaycastHit r in Physics.RaycastAll(s1.position, v.normalized, v.magnitude)) { Part p = FromCollider(r.collider); if (p && p != part && p.vessel == part.vessel) { Tosh_AutoStrut a = GetMe(p); if (a && !list.Contains(a) && !c.Contains(a)) { c.Add(a); } } } } } } return(c); }
// And here's where we get ALL the parts we can connect to. private Counterparts GetCounterparts() { Counterparts s = new Counterparts(); if (!part) { return(s); } if (connectToCounterparts) { foreach (Part p in part.symmetryCounterparts) { Tosh_AutoStrut m = GetMe(p); if (m && !s.Contains(m)) { s.Add(m); } } } if (connectToParent && GetMe(part.parent)) { s.Add(GetMe(part.parent)); } Tosh_AutoStrut a; foreach (Part p in part.children) { a = GetMe(p); if (a && a.connectToParent) { s.Add(a); } } if (detectManInTheMiddle) { Counterparts middle = GetMenInTheMiddle(s); ReviveMen(middle); s.AddRange(middle); RemoveDeadMen(); s.AddRange(mMenInMiddle); } return(s); }