载入中...
搜索中...
未找到
Effect.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5// 效果系统:数据驱动的 Effect "定义/模板"(类似 GAS 的 GameplayEffect)。
6//
7// 一个 EffectDefinition 描述"施加后会发生什么",本身不含运行时状态;
8// 施加到具体 actor 后由 StatusSystem 产生 StatusInstance(见 StatusTypes.h)。
9//
10// 灵活性/可定制点:
11// - 完全数据驱动:C++ 侧 registerEffect() 或脚本侧 loadFromJson() 均可定义新效果,
12// 无需修改引擎代码;effect id、属性名、tag、op 全部是字符串。
13// - durationPolicy / stackPolicy 同样是字符串,方便未来扩展新策略而不破坏 ABI;
14// 未知 stackPolicy 可走 StatusSystem::registerStackPolicy 注册的自定义策略。
15// - period > 0 的周期效果不会自动改属性,而是产生 tick 事件交给上层处理,
16// 从而可以让周期伤害/治疗完整走 Settlement 结算流水线(见 Settlement.h)。
17// - extra 字段是任意 string→string 自定义数据(图标、VFX、脚本钩子名……),
18// 无需为每个新效果特性修改引擎结构体。
19
20#include <string>
21#include <unordered_map>
22#include <vector>
23
24namespace eve::rpg {
25
28 std::string attribute;
29 std::string op = "add";
30 double value = 0.0;
31 int priority = 0;
32};
33
36 std::string id;
37
39 std::string durationPolicy = "instant";
40 float duration = 0.f;
41
43 float period = 0.f;
44
49 std::string stackPolicy = "none";
50 int maxStacks = 1;
51
53 std::vector<EffectModifierSpec> modifiers;
54
55 std::vector<std::string> tags;
56
58 std::unordered_map<std::string, std::string> extra;
59
61 bool hasTag(const std::string &tag) const;
63 std::string getExtra(const std::string &key, const std::string &fallback = {}) const;
64};
65
68public:
70 static void registerEffect(const EffectDefinition &def);
79 static const EffectDefinition *find(const std::string &id);
81 static bool remove(const std::string &id);
83 static void clear();
85 static int count();
86
98 static int loadFromJson(const std::string &json, std::string *error = nullptr);
99
100private:
101 static std::unordered_map<std::string, EffectDefinition> &table();
102};
103
104} // namespace eve::rpg
float duration
#define EVENGINE_API_PLATFORM
Definition Export.h:107
std::uint32_t key
const std::string * tag
std::string error
Definition Package.cpp:60
std::uint32_t count
全局效果定义表:进程级单例,供任意模块 / 脚本按 id 引用。
Definition Effect.h:67
RPG 模块的基础实体:把属性 / 状态 / 技能三张表挂到一个 ECS 实体上。
std::unordered_map< std::string, SkillDefinition > & table()
Definition Skill.cpp:65
EVENGINE_API_PLATFORM public API.
Definition Effect.h:35
std::unordered_map< std::string, std::string > extra
游戏自定义附加数据(图标路径、特效名、脚本钩子……)。
Definition Effect.h:58
std::vector< std::string > tags
Definition Effect.h:55
std::vector< EffectModifierSpec > modifiers
durationPolicy 为 duration/infinite 且 period<=0 时,apply 会直接写入这些修改器。
Definition Effect.h:53
效果里携带的一条属性修改规格(应用到 AttributeSystem::addModifier)。
Definition Effect.h:27