private void OnSceneGUI()
 {
     BS.ItemDefinition item = (BS.ItemDefinition)target;
     if (item.customCenterOfMass && modifyCenterOfMass)
     {
         item.transform.GetComponent <Rigidbody>().centerOfMass = Handles.PositionHandle(item.transform.GetComponent <Rigidbody>().centerOfMass + item.transform.position, Quaternion.identity) - item.transform.position;
         item.centerOfMass = item.transform.GetComponent <Rigidbody>().centerOfMass * 10;
     }
 }
        public override void OnInspectorGUI()
        {
            BS.DamagerDefinition damager = (BS.DamagerDefinition)target;
            BS.ItemDefinition    item    = damager.transform.GetComponentInParent <BS.ItemDefinition>();
            damager.transform.localScale = Vector3.one;

            bool buttonsPressed = false;

            if (centerTransform)
            {
                GUI.enabled = !pointToPointDisabled;
                if (GUILayout.Button("Enable Point to Point transforms"))
                {
                    centerTransform             = false;
                    buttonsPressed              = true;
                    damager.transform.hideFlags = HideFlags.NotEditable;
                }
                GUI.enabled = true;
            }
            else
            {
                if (GUILayout.Button("Enable Center Transform"))
                {
                    centerTransform             = true;
                    buttonsPressed              = true;
                    damager.transform.hideFlags = 0;
                }
            }

            EditorGUILayout.HelpBox("This Damager is set up for " + damagerType + " damage.", MessageType.Info);

            base.OnInspectorGUI();

            if (damager.colliderGroupName == "")
            {
                EditorGUILayout.HelpBox("Do not forget to assign a valid Collider Group.", MessageType.Error);
            }
            else
            {
                bool ColliderGroupExists = false;
                for (int i = 0; i < item.colliderGroups.Count; i++)
                {
                    if (item.colliderGroups[i].name == damager.colliderGroupName)
                    {
                        ColliderGroupExists = true;
                    }
                }
                if (!ColliderGroupExists)
                {
                    EditorGUILayout.HelpBox("The assigned Collider Group does not exist.", MessageType.Error);
                }
            }

            if (damager.penetrationDepth < 0)
            {
                EditorGUILayout.HelpBox("Penetration Depth can not be a negative number.", MessageType.Error);
            }
            if (damager.penetrationLength < 0)
            {
                EditorGUILayout.HelpBox("Penetration Length can not be a negative number.", MessageType.Error);
            }

            if (damager.penetrationLength == 0 && damager.penetrationDepth == 0)
            {
                damagerType = "Blunt";
                if (damager.direction != BS.DamagerDefinition.Direction.All)
                {
                    EditorGUILayout.HelpBox("Direction for Blunt damagers should be set to 'All'", MessageType.Warning);
                }
            }
            else if (damager.penetrationLength == 0 && damager.penetrationDepth != 0)
            {
                damagerType = "Piercing";
                if (damager.direction != BS.DamagerDefinition.Direction.Forward)
                {
                    EditorGUILayout.HelpBox("Direction for Piercing damagers should be set to 'Forward'", MessageType.Warning);
                }
            }
            else
            {
                damagerType = "Slashing";
                if (damager.direction == BS.DamagerDefinition.Direction.All)
                {
                    EditorGUILayout.HelpBox("Direction for Slicing damagers should be set to 'Forward' or 'Forward and Backward'", MessageType.Warning);
                }
                if (damager.penetrationDepth == 0)
                {
                    EditorGUILayout.HelpBox("Slashing damagers must have Depth greater than zero.", MessageType.Warning);
                }
            }

            if (pointToPointDisabled)
            {
                foreach (Transform parent in damager.transform.GetComponentsInParent <Transform>())
                {
                    if (parent.rotation != Quaternion.identity && parent.gameObject != damager.gameObject)
                    {
                        EditorGUILayout.HelpBox("Object " + parent.name + " is rotated. Please make sure all the parents of the damagers have rotation set to 0. Point-to-Point transform has been disabled.", MessageType.Warning);
                        damager.transform.hideFlags = 0;
                    }
                }
            }

            //POINTER POINT
            if (damager.transform.hasChanged || GUI.changed || centerTransform || !buttonsPressed)
            {
                depthPoint   = damager.transform.rotation * new Vector3(0, 0, -damager.penetrationDepth) + damager.transform.position;
                lengthPoint1 = damager.transform.rotation * new Vector3(0, -damager.penetrationLength / 2, 0) + damager.transform.position;
                lengthPoint2 = damager.transform.rotation * new Vector3(0, damager.penetrationLength / 2, 0) + damager.transform.position;
                damager.transform.hasChanged = false;
            }
        }
Example #3
0
        public override void OnInspectorGUI()
        {
            BS.HandleDefinition handle = (BS.HandleDefinition)target;
            BS.ItemDefinition   item   = handle.transform.GetComponentInParent <BS.ItemDefinition>();

            bool buttonsPressed = false;

            if (centerTransform)
            {
                GUI.enabled = !pointToPointDisabled;
                if (GUILayout.Button("Enable Point to Point transforms"))
                {
                    centerTransform            = false;
                    buttonsPressed             = true;
                    handle.transform.hideFlags = HideFlags.NotEditable;
                }
                GUI.enabled = true;
            }
            else
            {
                if (GUILayout.Button("Enable Center Transform"))
                {
                    centerTransform            = true;
                    buttonsPressed             = true;
                    handle.transform.hideFlags = 0;
                }
            }

            base.OnInspectorGUI();

            if (GUILayout.Button("Calculate Reach") && item)
            {
                handle.CalculateReach();
            }

            if (handle.transform.localScale != Vector3.one)
            {
                EditorGUILayout.HelpBox("Handle object scale must be set to 1.", MessageType.Error);
            }

            if (handle.axisLength < 0)
            {
                EditorGUILayout.HelpBox("Handle axis length must be a positive number or zero.", MessageType.Error);
            }

            if (handle.touchRadius <= 0)
            {
                EditorGUILayout.HelpBox("Handle touch radius must be a positive number.", MessageType.Error);
            }

            if (handle.reach <= 0)
            {
                EditorGUILayout.HelpBox("Handle reach must be a positive number.", MessageType.Error);
            }

            if (handle.slideToHandleOffset <= 0)
            {
                EditorGUILayout.HelpBox("Slide to handle offset must be a positive number.", MessageType.Error);
            }

            foreach (BS.HandleDefinition.Orientation orientations in handle.allowedOrientations)
            {
                for (int i = 0; i < handle.allowedOrientations.Count; i++)
                {
                    if (handle.allowedOrientations.IndexOf(orientations) < i && handle.allowedOrientations[i].rotation == handle.allowedOrientations[handle.allowedOrientations.IndexOf(orientations)].rotation && handle.allowedOrientations[i].allowedHand == handle.allowedOrientations[handle.allowedOrientations.IndexOf(orientations)].allowedHand && handle.allowedOrientations[i].isDefault == handle.allowedOrientations[handle.allowedOrientations.IndexOf(orientations)].isDefault)
                    {
                        EditorGUILayout.HelpBox("Allowed orientations " + handle.allowedOrientations.IndexOf(orientations) + " and " + i + " are equal.", MessageType.Warning);
                    }
                }
            }

            for (int i = 0; i < handle.allowedOrientations.Count; i++)
            {
                if (handle.allowedOrientations[i].allowedHand == BS.HandleDefinition.HandSide.Left && (handle.allowedOrientations[i].isDefault == BS.HandleDefinition.HandSide.Right || handle.allowedOrientations[i].isDefault == BS.HandleDefinition.HandSide.Both))
                {
                    EditorGUILayout.HelpBox("Handle orientation " + i + " must have 'Is Default' set to None or Left if 'Allowed Hand' is set to Left.", MessageType.Warning);
                }
                if (handle.allowedOrientations[i].allowedHand == BS.HandleDefinition.HandSide.Right && (handle.allowedOrientations[i].isDefault == BS.HandleDefinition.HandSide.Left || handle.allowedOrientations[i].isDefault == BS.HandleDefinition.HandSide.Both))
                {
                    EditorGUILayout.HelpBox("Handle orientation " + i + " must have 'Is Default' set to None or Right if 'Allowed Hand' is set to Right.", MessageType.Warning);
                }
            }

            if (pointToPointDisabled)
            {
                foreach (Transform parent in handle.transform.GetComponentsInParent <Transform>())
                {
                    if (parent.rotation != Quaternion.identity && parent.gameObject != handle.gameObject)
                    {
                        EditorGUILayout.HelpBox("Object " + parent.name + " is rotated. Please make sure all the parents of the damagers have rotation set to 0. Point-to-Point transform has been disabled.", MessageType.Warning);
                        handle.transform.hideFlags = 0;
                    }
                }
            }

            //POINT TO POINT HANDLE TRANSFORM
            if (handle.transform.hasChanged || GUI.changed || centerTransform || !buttonsPressed)
            {
                HandlePoint1 = handle.transform.rotation * new Vector3(0, handle.axisLength / 2, 0) + handle.transform.position;
                HandlePoint2 = handle.transform.rotation * new Vector3(0, -handle.axisLength / 2, 0) + handle.transform.position;
            }
        }