Пример #1
0
        /// <summary>Promotes the specified object into a physical connector object.</summary>
        /// <remarks>
        /// The physics will immediately start on the object. If it doesn't have a rigidbody, the one will
        /// be created.
        /// </remarks>
        /// <param name="ownerModule">The part's module which will control the connector.</param>
        /// <param name="obj">The object to be promoted.</param>
        /// <param name = "interactionDistance"></param>
        public static KASInternalPhysicalConnector Promote(
            PartModule ownerModule, GameObject obj, float interactionDistance = 0)
        {
            var connectorRb = obj.GetComponent <Rigidbody>() ?? obj.AddComponent <Rigidbody>();

            connectorRb.useGravity      = false;
            connectorRb.isKinematic     = ownerModule.part.packed;
            connectorRb.velocity        = ownerModule.part.rb.velocity;
            connectorRb.angularVelocity = ownerModule.part.rb.angularVelocity;
            connectorRb.ResetInertiaTensor();
            connectorRb.ResetCenterOfMass();
            var connectorModule = obj.AddComponent <KASInternalPhysicalConnector>();

            connectorModule.ownerModule = ownerModule;

            // Create the interaction collider if requested.
            if (interactionDistance > 0)
            {
                // This mesh is placed on a special layer which is not rendered in the game. It's only
                // used to detect the special zones triggers, so keep it simple.
                var interactionTriggerObj = Meshes.CreatePrimitive(
                    PrimitiveType.Quad, Vector3.one, null, obj.transform);
                //interactionTriggerObj.SetActive(true);
                interactionTriggerObj.name = InteractionAreaCollider;
                var collider = interactionTriggerObj.AddComponent <SphereCollider>();
                collider.isTrigger          = true;
                collider.radius             = interactionDistance;
                interactionTriggerObj.layer = (int)KspLayer.TriggerCollider;
                interactionTriggerObj.gameObject.GetComponent <Collider>().isTrigger = true;
                connectorModule.interactionTriggerObj = interactionTriggerObj;
            }

            return(connectorModule);
        }