public RuntimeWeapon WeaponToRuntimeWeapon(Weapon w, bool isLeft = false)
        {
            GameObject    go   = new GameObject();
            RuntimeWeapon inst = go.AddComponent <RuntimeWeapon>();

            go.name = w.itemName;

            inst.instance = new Weapon();
            StaticFunctions.DeepCopyWeapon(w, inst.instance);

            inst.weapon_Model = Instantiate(inst.instance.modelPrefab);
            Transform p = states.anim.GetBoneTransform((isLeft) ? HumanBodyBones.LeftHand : HumanBodyBones.RightHand);

            inst.weapon_Model.transform.parent = p;

            inst.weapon_Model.transform.localPosition =
                (isLeft) ? inst.instance.l_model_equiped_pos : inst.instance.r_model_equiped_pos;
            inst.weapon_Model.transform.localEulerAngles =
                (isLeft) ? inst.instance.l_model_equiped_eulers : inst.instance.r_model_equiped_eulers;

            inst.weapon_Model.transform.localScale = inst.instance.model_scale;

            inst.weapon_Hook = inst.weapon_Model.GetComponentInChildren <WeaponHook>();
            inst.weapon_Hook.InitDamageColliders(states);

            if (isLeft)
            {
                r_lh_weapons.Add(inst);
            }
            else
            {
                r_rh_weapons.Add(inst);
            }

            inst.weapon_Model.SetActive(false);
            return(inst);
        }
        public void EquipWeapon(RuntimeWeapon w, bool isLeft = false)
        {
            if (isLeft)
            {
                if (leftHandWeapon != null)
                {
                    leftHandWeapon.weapon_Model.SetActive(false);
                    //  leftHandWeapon.weapon_Model.transform.localPosition = leftHandWeapon.instance.l_model_unequiped_pos;
                    // leftHandWeapon.weapon_Model.transform.localEulerAngles = leftHandWeapon.instance.l_model_unequiped_eulers;
                }
                leftHandWeapon = w;
            }
            else
            {
                if (rightHandWeapon != null)
                {
                    rightHandWeapon.weapon_Model.SetActive(false);
                    //  rightHandWeapon.weapon_Model.transform.localPosition = rightHandWeapon.instance.r_model_unequiped_pos;
                    // rightHandWeapon.weapon_Model.transform.localEulerAngles = rightHandWeapon.instance.r_model_unequiped_eulers;
                }
                rightHandWeapon = w;
            }

            string targetIdle = w.instance.oh_idle;

            targetIdle += (isLeft) ? "_l" : "_r";
            states.anim.SetBool(StaticStrings.mirror, isLeft);
            states.anim.Play(StaticStrings.changeWeapon);
            states.anim.Play(targetIdle);

            UI.QuickSlot uiSlot = UI.QuickSlot.singleton;
            uiSlot.UpdateSlot(
                (isLeft) ?
                UI.QSlotType.lh : UI.QSlotType.rh, w.instance.icon);

            w.weapon_Model.SetActive(true);
        }
        public void LoadInventory()
        {
            for (int i = 0; i < rh_weapons.Count; i++)
            {
                WeaponToRuntimeWeapon(
                    ResourcesManager.singleton.GetWeapon(rh_weapons[i])
                    );
            }
            for (int i = 0; i < lh_weapons.Count; i++)
            {
                WeaponToRuntimeWeapon(
                    ResourcesManager.singleton.GetWeapon(lh_weapons[i])
                    , true);
            }

            if (r_rh_weapons.Count > 0)
            {
                if (r_index > r_rh_weapons.Count - 1)
                {
                    r_index = 0;
                }
                rightHandWeapon = r_rh_weapons[r_index];
            }
            if (r_lh_weapons.Count > 0)
            {
                if (r_index > r_lh_weapons.Count - 1)
                {
                    r_index = 0;
                }
                leftHandWeapon = r_lh_weapons[l_index];
            }


            if (rightHandWeapon != null)
            {
                EquipWeapon(rightHandWeapon, false);
            }

            if (leftHandWeapon != null)
            {
                EquipWeapon(leftHandWeapon, true);
                hasLeftHandWeapon = true;
            }


            for (int i = 0; i < spell_items.Count; i++)
            {
                SpellToRuntimeSpell(
                    ResourcesManager.singleton.GetSpell(spell_items[i])
                    );
            }

            if (r_spells.Count > 0)
            {
                if (s_index > r_spells.Count - 1)
                {
                    s_index = 0;
                }

                EquipSpell(r_spells[s_index]);
            }

            InitAllDamageColliders(states);
            CloseAllDamageColliders();
        }