vp_Inventory功能模块及实现方式
1.基本数据结构
(1) 基本组成单位
itemType代表一个物品类型,itemInstance代表它在背包中的一个物品实例
bankType代表一个能储存东西的物品类型(步枪,手枪,冲锋枪),bankInstance代表背包中的一把(步枪,手枪,冲锋枪)实例
vp_ItemType:
1. Name:这种物体的名称
2. Description:这种物体的描述
3. Texture2D Icon:这种物体的图标
4. Space:这种物体占用的空间
UnitBankType :ItemType
1. unit引用:表示这种银行存储的单位对象
2.Capacity:表示这种银行的容量限制(最多装多少库存)
3. Reloadable:这种银行是否允许重载(从背包中读取子弹)
4. RemoveWhenDepleted:这种银行的子弹一旦耗尽,立马将这个银行
的实例从我们背包中移除
vp_ItemInstance:
1.itme引用(与asset文件连接的依据)
2. id
vp_UnitBankInstance :ItemInstance
父类:
1.itme引用(指向bank对象)
2. id
自身:
1.unit引用:表示这个银行的单位对象,从BankType读取
2.Count:这个银行当前的库存量(代表有多少个unit)
3. Capacity:这个银行的容量限制(最多装多少个unit)从BankType读取
4.方法:添加子弹,移除子弹等方法
背包模块:一切都建立在 itemType对象 的层次上
(2) 基本存储结构
List<vp_UnitBankInstance> m_UnitBankInstances
List<vp_ItemInstance> ItemInstances
2.顶层接口
在 OnEnable() 中向目标事件处理器注册的接口功能
1."GetInventory"--GetInventory :获取背包
2."TryGiveItem", TryGiveItem:尝试把一个Item对象加入到我们的库存中
3."TryGiveItems", TryGiveItems:尝试添加多个item对象
4."TryGiveUnitBank", TryGiveUnitBank:尝试添加bank对象
5."TryGiveUnits", TryGiveUnits:尝试添加子弹
6."TryDeduct", TryDeduct:尝试消耗子弹
7."GetItemCount", GetItemCount:这个item对象在我们背包中的数量
3.各个功能模块
1.容量模块
1.数据结构:
(1) List<ItemCap> m_ItemCapInstances
(2) ItemCap:
1.item引用:那种物品的容量
2.Cap:容量
2.设置一个物品的容量
SetItemCap(vp_ItemType type, int cap, bool clamp = false)
1.遍历物体容量集合,寻找m_ItemCapInstances[v].Type == type
2.没有记录:m_ItemCapInstances.Add(new ItemCap(type, cap))
3.如果是unit,设置这种子弹的内部银行的容量
4.如果clamp为true:将超出容量的东西移除
1.子弹在内部银行的最大数量
2.item,bank实例的数量
3.获取一个物品的容量
GetItemCap(vp_ItemType type)
1.遍历m_ItemCapInstances,返回它的Cap的值
2.内部银行
1.数据结构:
(1) List<vp_UnitBankInstance> m_InternalUnitBanks
(2) 内部 bankInstance:
1.unit:指向内部银行保存的子弹类型对象
2.item引用: 内部银行没有item引用
3.Capacity:内部银行中最大子弹容量,从unit对象的itemCap中读取
4.Count:当前内部银行的子弹库存量
对比外部bankInstance我们可以发现,内部bank的容量依赖于子弹的容量,外部