/// <summary> /// /// </summary> public override void OnInspectorGUI() { DrawDefaultInspector(); PlayerControlTopDown pc = (PlayerControlTopDown)target; GUI.changed = false; bool enter = (Event.current.type == EventType.KeyDown) && (Event.current.keyCode == KeyCode.Return); // { dualWeaponsFoldout = EditorGUILayout.Foldout(dualWeaponsFoldout, "Dual Item Clips"); if (dualWeaponsFoldout) { // --- attack --- EditorGUI.indentLevel++; showAttackFoldout = EditorGUILayout.Foldout(showAttackFoldout, "Attack Clip"); if (showAttackFoldout) { if (pc.dualWeaponAttackClip == null) { pc.dualWeaponAttackClip = new AnimationClipReplacementInfo(); } EditorGUI.indentLevel++; pc.dualWeaponAttackClip.original_name = EditorGUILayout.TextField("Original_name", pc.dualWeaponAttackClip.original_name); pc.dualWeaponAttackClip.clip = (AnimationClip)EditorGUILayout.ObjectField("Clip", pc.dualWeaponAttackClip.clip, typeof(AnimationClip), false); EditorGUI.indentLevel--; } // --- block stance --- showBlockStanceFoldout = EditorGUILayout.Foldout(showBlockStanceFoldout, "Block Stance Clip"); if (showBlockStanceFoldout) { if (pc.dualWeaponBlockStance == null) { pc.dualWeaponBlockStance = new AnimationClipReplacementInfo(); } EditorGUI.indentLevel++; pc.dualWeaponBlockStance.original_name = EditorGUILayout.TextField("Original_name", pc.dualWeaponBlockStance.original_name); pc.dualWeaponBlockStance.clip = (AnimationClip)EditorGUILayout.ObjectField("Clip", pc.dualWeaponBlockStance.clip, typeof(AnimationClip), false); EditorGUI.indentLevel--; } // --- block hit --- showBlockHitFoldout = EditorGUILayout.Foldout(showBlockHitFoldout, "Block Hit Clips"); if (showBlockHitFoldout) { if (pc.dualWeaponBlockHitClips == null) { pc.dualWeaponBlockHitClips = new System.Collections.Generic.List <AnimationClipReplacementInfo>(pc.dualWeaponBlockHitListSize); } EditorGUI.indentLevel++; int prevSize = pc.dualWeaponBlockHitListSize; pc.dualWeaponBlockHitListSize = EditorGUILayout.IntField("Size", pc.dualWeaponBlockHitListSize); if (prevSize != pc.dualWeaponBlockHitListSize) { changeBlockHitListSize = true; } prevSize = pc.dualWeaponBlockHitListSize; if (enter) { if (changeBlockHitListSize) { if (pc.dualWeaponBlockHitListSize >= pc.dualWeaponBlockHitClips.Count) { for (int i = pc.dualWeaponBlockHitClips.Count; i < pc.dualWeaponBlockHitListSize; i++) { pc.dualWeaponBlockHitClips.Add(new AnimationClipReplacementInfo()); } } if (pc.dualWeaponBlockHitListSize < pc.dualWeaponBlockHitClips.Count) { pc.dualWeaponBlockHitClips.RemoveRange(pc.dualWeaponBlockHitListSize, pc.dualWeaponBlockHitClips.Count - pc.dualWeaponBlockHitListSize); } } changeBlockHitListSize = false; } EditorGUI.indentLevel++; for (int i = 0; i < pc.dualWeaponBlockHitClips.Count; i++) { string labelText = pc.dualWeaponBlockHitClips[i].original_name == null ? "Element" + i.ToString() : pc.dualWeaponBlockHitClips[i].original_name; pc.dualWeaponBlockHitClips[i].inspectorFoldout = EditorGUILayout.Foldout(pc.dualWeaponBlockHitClips[i].inspectorFoldout, labelText); if (pc.dualWeaponBlockHitClips[i].inspectorFoldout) { EditorGUI.indentLevel++; pc.dualWeaponBlockHitClips[i].original_name = EditorGUILayout.TextField("Original_name", pc.dualWeaponBlockHitClips[i].original_name); pc.dualWeaponBlockHitClips[i].clip = (AnimationClip)EditorGUILayout.ObjectField("Clip", pc.dualWeaponBlockHitClips[i].clip, typeof(AnimationClip), false); EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; EditorGUI.indentLevel--; } // --- locomotion ---- showLocomotionFoldout = EditorGUILayout.Foldout(showLocomotionFoldout, "Locomotion Clips"); if (showLocomotionFoldout) { if (pc.dualWeaponLocomotionClips == null) { pc.dualWeaponLocomotionClips = new System.Collections.Generic.List <AnimationClipReplacementInfo>(pc.dualWeaponBlockHitListSize); } EditorGUI.indentLevel++; int prevSize = pc.dualWeaponLocomotionListSize; pc.dualWeaponLocomotionListSize = EditorGUILayout.IntField("Size", pc.dualWeaponLocomotionListSize); if (prevSize != pc.dualWeaponLocomotionListSize) { changeLocomotionListSize = true; } prevSize = pc.dualWeaponLocomotionListSize; if (enter) { if (changeLocomotionListSize) { if (pc.dualWeaponLocomotionListSize > pc.dualWeaponLocomotionClips.Count) { for (int i = pc.dualWeaponLocomotionClips.Count; i < pc.dualWeaponLocomotionListSize; i++) { pc.dualWeaponLocomotionClips.Add(new AnimationClipReplacementInfo()); } } if (pc.dualWeaponLocomotionListSize < pc.dualWeaponLocomotionClips.Count) { pc.dualWeaponLocomotionClips.RemoveRange(pc.dualWeaponLocomotionListSize, pc.dualWeaponLocomotionClips.Count - pc.dualWeaponLocomotionListSize); } } changeLocomotionListSize = false; } EditorGUI.indentLevel++; for (int i = 0; i < pc.dualWeaponLocomotionClips.Count; i++) { string labelText = pc.dualWeaponLocomotionClips[i].original_name == null ? "Element" + i.ToString() : pc.dualWeaponLocomotionClips[i].original_name; pc.dualWeaponLocomotionClips[i].inspectorFoldout = EditorGUILayout.Foldout(pc.dualWeaponLocomotionClips[i].inspectorFoldout, labelText); if (pc.dualWeaponLocomotionClips[i].inspectorFoldout) { EditorGUI.indentLevel++; pc.dualWeaponLocomotionClips[i].original_name = EditorGUILayout.TextField("Original_name", pc.dualWeaponLocomotionClips[i].original_name); pc.dualWeaponLocomotionClips[i].clip = (AnimationClip)EditorGUILayout.ObjectField("Clip", pc.dualWeaponLocomotionClips[i].clip, typeof(AnimationClip), false); EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; EditorGUI.indentLevel--; } // other replacement clips showOtherFoldout = EditorGUILayout.Foldout(showOtherFoldout, "Replacement Clips"); if (showOtherFoldout) { if (pc.dualWeaponReplacementClips == null) { pc.dualWeaponReplacementClips = new System.Collections.Generic.List <AnimationClipReplacementInfo>(pc.dualWeaponReplacementListSize); } EditorGUI.indentLevel++; int prevSize = pc.dualWeaponReplacementListSize; pc.dualWeaponReplacementListSize = EditorGUILayout.IntField("Size", pc.dualWeaponReplacementListSize); if (prevSize != pc.dualWeaponReplacementListSize) { changeOtherClipsListSize = true; } prevSize = pc.dualWeaponReplacementListSize; if (enter) { if (changeOtherClipsListSize) { if (pc.dualWeaponReplacementListSize > pc.dualWeaponReplacementClips.Count) { for (int i = pc.dualWeaponReplacementClips.Count; i < pc.dualWeaponReplacementListSize; i++) { pc.dualWeaponReplacementClips.Add(new AnimationClipReplacementInfo()); } } if (pc.dualWeaponReplacementListSize < pc.dualWeaponReplacementClips.Count) { pc.dualWeaponReplacementClips.RemoveRange( pc.dualWeaponReplacementListSize, pc.dualWeaponReplacementClips.Count - pc.dualWeaponReplacementListSize); } } changeOtherClipsListSize = false; } EditorGUI.indentLevel++; for (int i = 0; i < pc.dualWeaponReplacementClips.Count; i++) { string labelText = pc.dualWeaponReplacementClips[i].original_name == null ? "Element" + i.ToString() : pc.dualWeaponReplacementClips[i].original_name; pc.dualWeaponReplacementClips[i].inspectorFoldout = EditorGUILayout.Foldout(pc.dualWeaponReplacementClips[i].inspectorFoldout, labelText); if (pc.dualWeaponReplacementClips[i].inspectorFoldout) { EditorGUI.indentLevel++; pc.dualWeaponReplacementClips[i].original_name = EditorGUILayout.TextField("Original_name", pc.dualWeaponReplacementClips[i].original_name); pc.dualWeaponReplacementClips[i].clip = (AnimationClip)EditorGUILayout.ObjectField("Clip", pc.dualWeaponReplacementClips[i].clip, typeof(AnimationClip), false); EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; EditorGUI.indentLevel--; } } bool loadDefaults = GUILayout.Button("Load Default Dual Weapons Clips"); if (loadDefaults) { Utils.LoadDefaultDualWeaponsClips( ref pc.dualWeaponAttackClip, ref pc.dualWeaponBlockStance, ref pc.dualWeaponBlockHitClips, ref pc.dualWeaponLocomotionClips); pc.dualWeaponBlockHitListSize = pc.dualWeaponBlockHitClips.Count; pc.dualWeaponLocomotionListSize = pc.dualWeaponLocomotionClips.Count; } if (GUI.changed || enter) { EditorUtility.SetDirty(pc); serializedObject.ApplyModifiedProperties(); } }
bool _createPlayerControl() { switch (CharacterType) { case CharacterTypes.Default: { PlayerControlDefault pc = character.GetComponent <PlayerControlDefault>(); if (!pc) { pc = Undo.AddComponent <PlayerControlDefault>(character); } } break; case CharacterTypes.ThirdPerson: { PlayerControl pc = character.GetComponent <PlayerControl>(); if (!pc) { pc = Undo.AddComponent <PlayerControl>(character); } Transform sweepCapsule = Utils.FindChildTransformByName(character.transform, "AttackSweepCapsule"); Rigidbody sweepBody = null; if (!sweepCapsule) { Debug.Log("Creating attack sweep capsule"); sweepBody = Resources.Load <Rigidbody>("AttackSweepCapsule"); sweepBody = Instantiate(sweepBody); sweepBody.transform.SetParent(pc.transform); sweepBody.transform.localPosition = new Vector3(0.0f, 1.276f, 0.0f); sweepBody.name = "AttackSweepCapsule"; } if (!sweepBody) { Debug.LogError("Cannot find Rigidbody on 'AttackSweepCapsule'" + " < " + this.ToString() + ">"); return(false); } pc.attackSweepBody = sweepBody; Utils.LoadDefaultDualWeaponsClips(ref pc.dualWeaponAttackClip, ref pc.dualWeaponBlockStance, ref pc.dualWeaponBlockHitClips, ref pc.dualWeaponLocomotionClips); } break; case CharacterTypes.TopDown: { PlayerControlTopDown pc = character.GetComponent <PlayerControlTopDown>(); if (!pc) { pc = Undo.AddComponent <PlayerControlTopDown>(character); } Rigidbody sweepBody = Resources.Load <Rigidbody>("AttackSweepCapsule"); sweepBody = Instantiate(sweepBody); sweepBody.transform.SetParent(pc.transform); sweepBody.transform.localPosition = new Vector3(0.0f, 1.276f, 0.0f); sweepBody.name = "AttackSweepCapsule"; pc.attackSweepBody = sweepBody; Utils.LoadDefaultDualWeaponsClips(ref pc.dualWeaponAttackClip, ref pc.dualWeaponBlockStance, ref pc.dualWeaponBlockHitClips, ref pc.dualWeaponLocomotionClips); } break; default: { PlayerControlDefault pc = character.GetComponent <PlayerControlDefault>(); if (!pc) { pc = Undo.AddComponent <PlayerControlDefault>(character); } } break; } return(true); }