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