示例#1
0
        /// <summary>
        /// Change the equipment's mounting status.
        /// </summary>
        /// <param name="avatarAddress"></param>
        /// <param name="itemId"></param>
        /// <param name="equip"></param>
        /// <param name="resetState"></param>
        public static void SetItemEquip(
            Address avatarAddress,
            Guid itemId,
            bool equip,
            bool resetState = true)
        {
            var modifier = new AvatarInventoryItemEquippedModifier(itemId, equip);

            LocalLayer.Instance.Add(avatarAddress, modifier);

            if (!TryGetLoadedAvatarState(
                    avatarAddress,
                    out var outAvatarState,
                    out _,
                    out var isCurrentAvatarState)
                )
            {
                return;
            }

            outAvatarState = modifier.Modify(outAvatarState);

            if (!resetState ||
                !isCurrentAvatarState)
            {
                return;
            }

            ReactiveAvatarState.Inventory.SetValueAndForceNotify(outAvatarState.inventory);
        }
示例#2
0
        private bool TryUnequipModify(ItemBase itemBase)
        {
            if (!(itemBase is INonFungibleItem nonFungibleItem) ||
                !(itemBase is IEquippableItem equippableItem))
            {
                return(false);
            }

            var modifier = new AvatarInventoryItemEquippedModifier(nonFungibleItem.ItemId, false);

            modifier.Modify(_avatarState);
            Assert.False(equippableItem.Equipped);

            return(true);
        }