using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using BITKit.Entities; using static UnityEditor.Progress; using Google.Apis.Sheets.v4.Data; namespace BITFALL { public interface IPlayerEquipCallback { void OnEquip(IEquipmentSlot slot,IBasicItem item); void DeEquip(IEquipmentSlot slot, IBasicItem item); } public interface IPlayerEquipContainer { bool TryDeEquip(IEquipmentSlot slot); } /// /// 玩家装备容器 /// 支持,护甲,头盔和背包等 /// public class PlayerEquipContainer : EntityComponent, IExcutor, IPlayerEquipContainer { Dictionary dictionary = new(); IBasicItemContainer inventory; public override void Initialize(IEntity entity) { base.Initialize(entity); entity.Set(this); entity.RegisterCallback>(this); } public override void OnStart() { base.OnStart(); inventory = entity.Get(); } public bool TryDeEquip(IEquipmentSlot slot) { if (dictionary.TryGetValue(slot, out var equipable)) { if (inventory.Add(equipable)) { DeEquip(slot, equipable); } } return false; } bool Equip(IEquipmentSlot slot, IBasicItem item) { dictionary.Add(slot, item); foreach (var x in entity.GetCallbacks()) { x.OnEquip(slot, item); } return true; } bool DeEquip(IEquipmentSlot slot, IBasicItem item) { dictionary.Remove(slot); foreach (var x in entity.GetCallbacks()) { x.DeEquip(slot, item); } return true; } public bool TryExcute(IBasicItem value) { var asset = value.GetAssetable(); ///尝试获取可装备信息 if (asset.TryGetProperty(out var equipable)) { ///已装备物品 if (dictionary.TryGetValue(equipable.slot, out var equipedItem)) { ///尝试将装配放回背包 if (inventory.Add(equipedItem)) { ///移除已装备物品 DeEquip(equipable.slot, value); } } ///从库存中移除物品 if (inventory.Remove(value)) { ///装配物品 Equip(equipable.slot, value); } } return false; } } }