Esempio n. 1
0
        /// <summary>
        ///   Sets the part options.
        /// </summary>
        /// <param name="p">The p.</param>
        /// <param name="autoStrutMode">The automatic strut mode.</param>
        /// <param name="isRoboticHierarchy">if set to <c>true</c> [is robotic hierarchy].</param>
        /// <param name="applyChildren">if set to <c>true</c> [apply to all children].</param>
        private void SetPartOptions(Part p, Part.AutoStrutMode autoStrutMode, bool isRoboticHierarchy, bool applyChildren)
        {
            if (p == null)
            {
                return;
            }

            if (isRoboticHierarchy)
            {
                autoStrutMode = Part.AutoStrutMode.Off;
            }
            else if (Settings.Instance.AutoSelect)
            {
                autoStrutMode = p.parent == null
                          ? Part.AutoStrutMode.Off
                          : p.parent.parent == null
                            ? Part.AutoStrutMode.Root
                            : Part.AutoStrutMode.Grandparent;
            }

            var sameVesselInteraction = Settings.Instance.SameVesselInteraction | (isRoboticHierarchy && Settings.Instance.AutomaticSameVesselInteraction);

            ApplyPartOptions(p: p, autoStrutMode: autoStrutMode, sameVesselInteraction: sameVesselInteraction, applySymmetry: true);

            // ReSharper disable once InvertIf
            if (applyChildren)
            {
                foreach (var child in p.children)
                {
                    SetPartOptions(p: child, autoStrutMode: autoStrutMode, isRoboticHierarchy: isRoboticHierarchy, applyChildren: true);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        ///   Applies the part options.
        /// </summary>
        /// <param name="p">The p.</param>
        /// <param name="autoStrutMode">The automatic strut mode.</param>
        /// <param name="sameVesselInteraction">if set to <c>true</c> [same vessel interaction].</param>
        /// <param name="applySymmetry">if set to <c>true</c> [apply symmetry].</param>
        private void ApplyPartOptions(Part p, Part.AutoStrutMode autoStrutMode, bool sameVesselInteraction, bool applySymmetry)
        {
            p.autoStrutMode = autoStrutMode;
            p.UpdateAutoStrut();
            p.rigidAttachment = Settings.Instance.RigidAttachment;
            p.ApplyRigidAttachment();
            p.SetSameVesselCollision(value: sameVesselInteraction);

            // ReSharper disable once InvertIf
            if (applySymmetry)
            {
                foreach (var symmetryCounterpart in p.symmetryCounterparts)
                {
                    ApplyPartOptions(p: symmetryCounterpart, autoStrutMode: autoStrutMode, sameVesselInteraction: sameVesselInteraction, applySymmetry: false);
                }
            }
        }