public override void OnInspectorGUI() { MeleeWeaponItem invItem = (MeleeWeaponItem)target; GUI.changed = false; invItem.meleeWeaponType = (MeleeWeaponItem.MeleeWeaponEnum)EditorGUILayout.EnumPopup("ItemType", invItem.meleeWeaponType); DrawDefaultInspector(); if (GUI.changed) { int newType = 0; switch (invItem.meleeWeaponType) { case MeleeWeaponItem.MeleeWeaponEnum.Weapon1H: newType = (int)InventoryItemType.Weapon1H; break; case MeleeWeaponItem.MeleeWeaponEnum.Weapon2H: newType = (int)InventoryItemType.Weapon2H; break; } // modify private field SerializedProperty sp = serializedObject.FindProperty("m_ItemType"); if (sp == null) { Debug.LogError("Cannot find variable: m_ItemType"); return; } sp.intValue = (int)newType; EditorUtility.SetDirty(invItem); serializedObject.ApplyModifiedProperties(); } if (invItem.itemType == InventoryItemType.Weapon1H) { bool loadDefaults = GUILayout.Button("Load Default One Handed Weapon Clips & Sounds"); if (loadDefaults) { Utils.LoadDefaultWeapon1HSoundsAndClips(invItem); } } else if (invItem.itemType == InventoryItemType.Weapon2H) { bool loadDefaults = GUILayout.Button("Load Default Two Handed Weapon Clips & Sounds"); if (loadDefaults) { Utils.LoadDefaultWeapon2HSoundsAndClips(invItem); } } if (GUI.changed) { EditorUtility.SetDirty(invItem); serializedObject.ApplyModifiedProperties(); } }
/// <summary> /// load default two handed weapon animation clips /// </summary> /// <param name="weaponItem">weapon item to assign clips to</param> public static void LoadDefaultWeapon2HSoundsAndClips(MeleeWeaponItem weaponItem) { WeaponAudio wa = weaponItem.GetComponent <WeaponAudio>(); if (!wa) { wa = Undo.AddComponent <WeaponAudio>(weaponItem.gameObject); } AudioClip swoosh1 = Resources.Load <AudioClip>("Audio/swoosh1"); AudioClip swoosh2 = Resources.Load <AudioClip>("Audio/swoosh2"); AudioClip metal_clang = Resources.Load <AudioClip>("Audio/metal_clang"); AudioClip sword_hit = Resources.Load <AudioClip>("Audio/blade_slash_hit"); if (!swoosh1) { Debug.LogWarning("Unable to load clip: 'Audio/swoosh1'"); } if (!swoosh2) { Debug.LogWarning("Unable to load clip: 'Audio/swoosh2'"); } if (!metal_clang) { Debug.LogWarning("Unable to load clip: 'Audio/metal_clang'"); } if (!sword_hit) { Debug.LogWarning("Unable to load clip: 'Audio/blade_slash_hit'"); } wa.attackSwingSounds = new AudioClip[] { swoosh1, swoosh2 }; wa.attackHitSounds = new AudioClip[] { sword_hit }; wa.blockSounds = new AudioClip[] { metal_clang }; AnimationClip defaultAttack = null; AnimationClip defaultBlock = null; System.Collections.Generic.List <AnimationClip> blockHitClips = new System.Collections.Generic.List <AnimationClip>(); AnimationClip[] twohandedclips = Resources.LoadAll <AnimationClip>("Animations/c_Weapon2H"); if (twohandedclips.Length == 0) { Debug.LogWarning("Cannot find animations from 'Resources/Animations/c_Weapon2H"); } foreach (AnimationClip clip in twohandedclips) { if (clip.name == "c_Weapon2HCombo01") { defaultAttack = clip; } if (clip.name == "c_Weapon2HBlockStance01") { defaultBlock = clip; } if (clip.name.StartsWith("c_W2HBlockHit")) { blockHitClips.Add(clip); } } if (defaultAttack) { weaponItem.attackClip.original_name = "default_attack_walk_fast"; weaponItem.attackClip.clip = defaultAttack; } if (defaultBlock) { weaponItem.blockClip.original_name = "default_block_stance"; weaponItem.blockClip.clip = defaultBlock; } weaponItem.blockHitClips = new System.Collections.Generic.List <AnimationClipReplacementInfo>(5); for (int i = 0; i < blockHitClips.Count; i++) { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "default_block_hit" + i; info.clip = blockHitClips[i]; weaponItem.blockHitClips.Add(info); } AnimationClip[] locomotionClips = Resources.LoadAll <AnimationClip>("Animations/DefaultLocomotions/c_TwoHanded_Locomotion"); if (locomotionClips.Length == 0) { Debug.LogWarning("Cannot find animations from 'Resources/Animations/DefaultLocomotions/c_Locomotion2HMain"); } weaponItem.locomotionClips = new System.Collections.Generic.List <AnimationClipReplacementInfo>(15); for (int i = 0; i < locomotionClips.Length; i++) { AnimationClip clip = locomotionClips[i]; if (!clip) { continue; } if (clip.name == "c_Item2H_Idle") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_Idle"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_Walk") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_Walk"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_Run") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_Run"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_TurnRightQuarter") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_TurnRightQuarter"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_TurnRightHalf") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_TurnRightHalf"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_TurnLeftQuarter") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_TurnLeftQuarter"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_TurnLeftHalf") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_TurnLeftHalf"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_WalkRightSharp") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_WalkRightSharp"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_WalkLeftSharp") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_WalkLeftSharp"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_WalkRightWide") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_WalkRightWide"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_WalkLeftWide") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_WalkLeftWide"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_RunRightSharp") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_RunRightSharp"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_RunLeftSharp") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_RunLeftSharp"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_RunRightWide") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_RunRightWide"; info.clip = clip; weaponItem.locomotionClips.Add(info); } else if (clip.name == "c_Item2H_RunLeftWide") { AnimationClipReplacementInfo info = new AnimationClipReplacementInfo(); info.original_name = "Default_RunLeftWide"; info.clip = clip; weaponItem.locomotionClips.Add(info); } } }