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; } }
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; } }