Exemple #1
0
        // 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);
        }
Exemple #2
0
        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);
        }