diff --git a/05-SDHGame/Inventory & Synthesis文档.md b/05-SDHGame/Inventory & Synthesis文档.md new file mode 100644 index 0000000..fe4ebe9 --- /dev/null +++ b/05-SDHGame/Inventory & Synthesis文档.md @@ -0,0 +1,50 @@ +--- +title: Inventory & Synthesis文档 +date: 2022-08-12 14:18:31 +excerpt: +tags: + - SDHGame +rating: ⭐ +--- +# 目录 +- [[#Inventory]] + - [[#数据结构]] + - [[#物品类型]] + - [[#如何添加一个物品] +- [[#Synthesis]] + +# Inventory +使用Lyra的 **Entry - Instance - Definition - Fragment**结构以及FFastArraySerializer/FFastArraySerializerItem网络同步结构。并针对一些设计做出改动。可以参考:https://zhuanlan.zhihu.com/p/552480961 + +## 数据结构 +- URPGInventoryComponent + - FRPGItemList & FRPGItemEntry:解决网络同步问题用结构。其中`FRPGItemEntry存储StackNum(堆叠数量)信息`。 + - URPGItemInstance:物品实例以及存储动态数据。 + - URPGItemDefinition:物品定义以及存储静态数据。 + - `TObjectPtr`:类型Fragment + - `TArray>`:物品其他信息Fragment + +主要的物品操作逻辑位于URPGInventoryComponent。 +## 物品类型 +记录物品类型以及类型对应的行为 & 动作。存储于`URPGItemDefinition`中的`TObjectPtr ItemTypeFragments`,可在构建URPGItemDefinition资产时挂载对应的URPGItemTypeFragment。Fragment逻辑位于Inventory/Item/RPGItemTypeFragment.h & cpp中。 +- CanBeUse:消耗品或者可以被使用的物品。 +- Weapon:武器。可以附带词条以及镶嵌物。 +- Equip:装备。可以附带词条以及镶嵌物。 +- Material:材料。用于合成各种东西的材料;或者为卖钱道具。 +- Token:凭证。钥匙、信物;各种钱。 +- Attachable:镶嵌物。宝石、附魔之类东西。 +- Formulas:已经学会的配方。 + +## 如何添加一个物品 +相关物品定义位于Items目录下。 +1. 新建一个父类为RPGItemDefinition的蓝图类。前缀为ID_XXXX。 +2. 按照物品类型选择ItemTypeFragments,并且填入相关信息即可。 + +PS. Formulas类除了定义物品信息之外还需要定义父类为RPGSynthesisDefinition的配方类,明明方式为ID_XXXX_SD。 +# Synthesis +合成逻辑也位于URPGInventoryComponent,主要函数为: +- SynthesisItem():合成物品。 +- SynthesisItems():合成N个物品。 +- ConsumeItemsByDefinition():消耗物品。 +- GetSynthesisNums():计算可以可成的物品数量。 +- GetSynthesisNumsByDefinition():计算可以可成的物品数量。 diff --git a/05-SDHGame/Inventory设计.md b/05-SDHGame/Inventory设计.md deleted file mode 100644 index 4c36fb5..0000000 --- a/05-SDHGame/Inventory设计.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Inventory设计 -date: 2022-08-12 14:18:31 -excerpt: -tags: SDHGame -rating: ⭐ ---- - -## 设计方案 -直接使用Lyra的 **Entry - Instance - Definition - Fragment**结构以及FFastArraySerializer/FFastArraySerializerItem网络同步结构。并针对一些设计做出改动。 - -### 宝石/词条 -- 宝石的基类现在统一改名成Attachment;词条命名为Word。 -- 两者数据存储在ItemInstance中。实现专门的Fragment用来设置ItemInstance的里存储数据。 - -### 可使用物品 -考虑到需要便捷的自定义Use()逻辑,思路有二(目前倾向于第二个): -1. ~~在ItemDefinition里编写对应的几个BlueprintNativeEvent(),并根据需要进行Overrider。之后ItemInstance的对应接口函数调用ItemDefinition中的函数即可实现。~~ -2. 在ItemInstance里放置几个行为的Delegate。创建几个对应行为的Fragment,在创建时将内部的函数函数绑到Delegate上。 - -## 物品列表 -- CanBeUse -- Weapon -- Equip -- Material -- Token - - 灵石 -- Attachable - - 生命宝石 \ No newline at end of file