/// <summary>Initializes the struct with default values.</summary>
        public static HingeJointDrive Default()
        {
            HingeJointDrive value = new HingeJointDrive();

            value.speed      = 0f;
            value.forceLimit = 3.40282347E+38f;
            value.gearRatio  = 1f;
            value.freeSpin   = false;

            return(value);
        }
Beispiel #2
0
        /// <summary>
        /// Creates GUI elements for fields specific to the hinge joint.
        /// </summary>
        protected void BuildGUI(HingeJoint joint)
        {
            enableLimitField.OnChanged += x =>
            {
                joint.SetFlag(HingeJointFlag.Limit, x);
                MarkAsModified();
                ConfirmModify();

                ToggleLimitFields(x);
            };

            enableDriveField.OnChanged += x =>
            {
                joint.SetFlag(HingeJointFlag.Drive, x);
                MarkAsModified();
                ConfirmModify();

                ToggleDriveFields(x);
            };

            speedField.OnChanged += x =>
            {
                HingeJointDrive driveData = joint.Drive;
                driveData.speed = x;
                joint.Drive     = driveData;

                MarkAsModified();
            };
            speedField.OnFocusLost += ConfirmModify;
            speedField.OnConfirmed += ConfirmModify;

            forceLimitField.OnChanged += x =>
            {
                HingeJointDrive driveData = joint.Drive;
                driveData.forceLimit = x;
                joint.Drive          = driveData;

                MarkAsModified();
            };
            forceLimitField.OnFocusLost += ConfirmModify;
            forceLimitField.OnConfirmed += ConfirmModify;

            gearRatioField.OnChanged += x =>
            {
                HingeJointDrive driveData = joint.Drive;
                driveData.gearRatio = x;
                joint.Drive         = driveData;

                MarkAsModified();
            };
            gearRatioField.OnFocusLost += ConfirmModify;
            gearRatioField.OnConfirmed += ConfirmModify;

            freeSpinField.OnChanged += x =>
            {
                HingeJointDrive driveData = joint.Drive;
                driveData.freeSpin = x;
                joint.Drive        = driveData;

                MarkAsModified();
                ConfirmModify();
            };

            Layout.AddElement(enableLimitField);
            limitLayout = Layout.AddLayoutX();
            {
                limitLayout.AddSpace(10);

                GUILayoutY limitContentsLayout = limitLayout.AddLayoutY();
                limitGUI            = new LimitAngularRangeGUI(joint.Limit, limitContentsLayout, Persistent);
                limitGUI.OnChanged += (x, y) =>
                {
                    joint.Limit = x;
                    joint.Limit.SetBase(y);

                    MarkAsModified();
                };
                limitGUI.OnConfirmed += ConfirmModify;
            }

            Layout.AddElement(enableDriveField);
            driveLayout = Layout.AddLayoutX();
            {
                driveLayout.AddSpace(10);

                GUILayoutY driveContentsLayout = driveLayout.AddLayoutY();
                driveContentsLayout.AddElement(speedField);
                driveContentsLayout.AddElement(forceLimitField);
                driveContentsLayout.AddElement(gearRatioField);
                driveContentsLayout.AddElement(freeSpinField);
            }

            ToggleLimitFields(joint.HasFlag(HingeJointFlag.Limit));
            ToggleDriveFields(joint.HasFlag(HingeJointFlag.Drive));

            base.BuildGUI(joint, true);
        }
Beispiel #3
0
 private static extern void Internal_setDrive(IntPtr thisPtr, ref HingeJointDrive drive);
Beispiel #4
0
 private static extern void Internal_getDrive(IntPtr thisPtr, out HingeJointDrive __output);