using UnityEditor; using UnityEngine; namespace CreatureControl { public class Leg_Editor { private static bool showfield = false; public static bool Inspector(SerializedProperty legProp, TargetLeg targetLeg, Leg leg) { bool somethingChanged = false; GUIStyle foldoutStyle = new(EditorStyles.foldout) { margin = EditorStyles.objectField.margin }; EditorGUILayout.BeginHorizontal(); string legName = ConvertCamelCase(legProp.name); showfield = EditorGUILayout.Foldout(showfield, legName, true, foldoutStyle); bool femurChanged = FemurInspector(leg); if (femurChanged) { Debug.Log("Check"); leg.DetectBones(leg.femur); } somethingChanged |= femurChanged; EditorGUILayout.EndHorizontal(); if (leg.femur != null && leg.tibia == null) showfield = true; if (showfield) { EditorGUI.indentLevel++; somethingChanged |= TibiaInspector(leg); somethingChanged |= TarsusInspector(leg); somethingChanged |= PhalangesInspector(leg); EditorGUI.indentLevel--; } return somethingChanged; } protected static bool FemurInspector(Leg leg) { Transform oldFemur = leg.femur; leg.femur = (Transform)EditorGUILayout.ObjectField(leg.femur, typeof(Transform), true); return leg.femur != oldFemur; } protected static bool TibiaInspector(Leg leg) { Transform oldTibia = leg.tibia; leg.tibia = (Transform)EditorGUILayout.ObjectField("Lower leg", leg.tibia, typeof(Transform), true); return leg.tibia != oldTibia; } protected static bool TarsusInspector(Leg leg) { Transform oldTarsus = leg.tarsus; leg.tarsus = (Transform)EditorGUILayout.ObjectField("Foot", leg.tarsus, typeof(Transform), true); return leg.tarsus != oldTarsus; } protected static bool PhalangesInspector(Leg leg) { Transform oldPhalanges = leg.phalanges; leg.phalanges = (Transform)EditorGUILayout.ObjectField("Toes", leg.phalanges, typeof(Transform), true); return leg.phalanges != oldPhalanges; } private static string ConvertCamelCase(string text) { if (string.IsNullOrEmpty(text)) return text; System.Text.StringBuilder result = new(); for (int i = 0; i < text.Length; i++) { // Add a space before uppercase characters if (char.IsUpper(text[i]) && i > 0) result.Append(' '); // Add the character to the result result.Append(text[i]); } // Capitalize the first character of the result if (result.Length > 0) result[0] = char.ToUpper(result[0]); return result.ToString(); } } }