示例#1
0
        private void Unequip(EquipmentSlot slot, bool considerInventoryOnly)
        {
            if (Game.Game.instance.Stage.IsInStage)
            {
                return;
            }

            Find <ItemInformationTooltip>().Close();

            if (slot.IsEmpty)
            {
                foreach (var item in inventory.SharedModel.Equipments)
                {
                    item.GlowEnabled.Value =
                        item.ItemBase.Value.ItemSubType == slot.ItemSubType;
                }

                return;
            }

            var currentAvatarState = Game.Game.instance.States.CurrentAvatarState;
            var characterSheet     = Game.Game.instance.TableSheets.CharacterSheet;
            var costumeStatSheet   = Game.Game.instance.TableSheets.CostumeStatSheet;
            var prevCp             = CPHelper.GetCPV2(currentAvatarState, characterSheet, costumeStatSheet);

            var slotItem = slot.Item;

            slot.Clear();
            LocalStateItemEquipModify(slotItem, false);

            var currentCp = CPHelper.GetCPV2(currentAvatarState, characterSheet, costumeStatSheet);

            cpTextValueTweener.Play(prevCp, currentCp);

            var player = considerInventoryOnly
                ? null
                : Game.Game.instance.Stage.GetPlayer();

            switch (slotItem)
            {
            default:
                return;

            case Costume costume:
            {
                if (!inventory.SharedModel.TryGetCostume(costume, out var inventoryItem))
                {
                    return;
                }

                inventoryItem.EquippedEnabled.Value = false;

                if (considerInventoryOnly)
                {
                    break;
                }

                UpdateStatViews();

                var armor  = (Armor)_armorSlot.Item;
                var weapon = (Weapon)_weaponSlot.Item;
                player.UnequipCostume(costume, true);
                player.EquipEquipmentsAndUpdateCustomize(armor, weapon);
                Game.Event.OnUpdatePlayerEquip.OnNext(player);

                if (costume.ItemSubType == ItemSubType.Title)
                {
                    titleText.text = "";
                }

                break;
            }

            case Equipment equipment:
            {
                if (!inventory.SharedModel.TryGetEquipment(equipment, out var inventoryItem))
                {
                    return;
                }

                inventoryItem.EquippedEnabled.Value = false;

                if (considerInventoryOnly)
                {
                    break;
                }

                UpdateStatViews();

                switch (slot.ItemSubType)
                {
                case ItemSubType.Armor:
                {
                    var armor  = (Armor)_armorSlot.Item;
                    var weapon = (Weapon)_weaponSlot.Item;
                    player.EquipEquipmentsAndUpdateCustomize(armor, weapon);
                    break;
                }

                case ItemSubType.Weapon:
                    player.EquipWeapon((Weapon)_weaponSlot.Item);
                    break;
                }

                Game.Event.OnUpdatePlayerEquip.OnNext(player);
                break;
            }
            }

            PostEquipOrUnequip(slot);
        }