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