载入中...
搜索中...
未找到
RPGActor.h
浏览该文件的文档.
1#pragma once
2
16#include "common/ECS.h"
17#include "rpg/AttributeTypes.h"
18#include "rpg/StatusTypes.h"
19#include "rpg/SkillTypes.h"
20
21#include <string>
22#include <unordered_map>
23#include <vector>
24
25namespace eve::rpg {
26
28class RPGActor : public ecs::Entity {
29public:
30 ENTITY(RPGActor, ecs::Entity)
31
32 void release() override { ecs::DestroyEntity(this); }
33
35 struct Attributes {
36 std::unordered_map<std::string, AttributeValue> values;
37 };
38
40 struct Statuses {
41 std::vector<StatusInstance> active;
43 };
44
46 struct Skills {
47 std::unordered_map<std::string, SkillRuntime> known;
49 };
50
51 COMPONENT(Attributes, attributes)
52 COMPONENT(Statuses, statuses)
53 COMPONENT(Skills, skills)
54
55
56 static RPGActor *createActor();
57
66 void setBaseAttribute(const std::string &attribute, double value);
67 double getBaseAttribute(const std::string &attribute);
68 void modifyBaseAttribute(const std::string &attribute, double delta);
69 bool hasAttribute(const std::string &attribute);
70 std::string addAttributeModifier(const std::string &attribute, const std::string &source,
71 const std::string &op, double value, int priority = 0);
72 bool removeAttributeModifier(const std::string &attribute, const std::string &modifierId);
73 int removeAttributeModifiersBySource(const std::string &attribute, const std::string &source);
74 int removeAllAttributeModifiersBySource(const std::string &source);
75 double getFinalAttribute(const std::string &attribute);
76
78 int applyEffect(const std::string &effectId, const std::string &source = "");
79 bool removeStatus(int instanceId);
80 int removeStatusByEffect(const std::string &effectId);
81 int removeStatusBySource(const std::string &source);
82 int removeStatusByTag(const std::string &tag);
83 bool hasEffect(const std::string &effectId);
84 bool hasStatusTag(const std::string &tag);
85 int getStatusCount();
86 std::string getStatusEffectId(int index);
87 int getStatusStacks(int index);
88 float getStatusRemaining(int index);
89 int getStatusInstanceId(int index);
90 std::string getStatusSource(int index);
91 std::string getStatusProp(int instanceId, const std::string &key,
92 const std::string &fallback = {});
93 bool setStatusProp(int instanceId, const std::string &key, const std::string &value);
94
96 int applyBuff(const std::string &effectId, const std::string &source = "");
97 bool removeBuff(int instanceId);
98 int removeBuffByEffect(const std::string &effectId);
99 int removeBuffBySource(const std::string &source);
100 int removeBuffByTag(const std::string &tag);
101 bool hasBuff(const std::string &effectId);
102 bool hasBuffTag(const std::string &tag);
103 int getBuffCount();
104 std::string getBuffEffectId(int index);
105 int getBuffStacks(int index);
106 float getBuffRemaining(int index);
107 int getBuffInstanceId(int index);
108 std::string getBuffSource(int index);
109 std::string getBuffProp(int instanceId, const std::string &key,
110 const std::string &fallback = {});
111 bool setBuffProp(int instanceId, const std::string &key, const std::string &value);
112
114 void learnSkill(const std::string &skillId);
115 bool knowsSkill(const std::string &skillId);
116 bool forgetSkill(const std::string &skillId);
117 float getSkillCooldown(const std::string &skillId);
118 void setSkillCooldown(const std::string &skillId, float seconds);
119 bool canCastSkill(const std::string &skillId);
121 std::string canCastSkillReason(const std::string &skillId);
123 bool beginCastSkill(const std::string &skillId, RPGActor *target = nullptr);
125 void cancelCastSkill();
127 bool isCastingSkill();
128 std::string getCastingSkillId();
129 float getCastProgress();
130
141 static const std::vector<RPGActor *> &liveActors();
142};
143
144} // namespace eve::rpg
int priority
std::string value
属性 / 状态 / 技能三表合一的 ECS 实体。
Definition RPGActor.h:28
bool beginCastSkill(const std::string &skillId, RPGActor *target=nullptr)
开始读条释放;false 表示不满足条件。
Definition RPGActor.cpp:202
std::string getCastingSkillId()
Definition RPGActor.cpp:210
bool isCastingSkill()
读条状态查询。
Definition RPGActor.cpp:208
double getBaseAttribute(const std::string &attribute)
Definition RPGActor.cpp:54
bool removeBuff(int instanceId)
Definition RPGActor.cpp:139
bool removeStatus(int instanceId)
Definition RPGActor.cpp:94
static const std::vector< RPGActor * > & liveActors()
返回所有通过 createActor() 创建、且当前仍存活的 actor。 StatusSystem::update / SkillSystem::update 用它遍历所有 actor 逐帧推进。 ...
Definition RPGActor.cpp:33
int getBuffStacks(int index)
Definition RPGActor.cpp:159
std::string canCastSkillReason(const std::string &skillId)
不能释放的原因("" = 可以)。
Definition RPGActor.cpp:196
std::string getStatusEffectId(int index)
Definition RPGActor.cpp:114
int removeAttributeModifiersBySource(const std::string &attribute, const std::string &source)
Definition RPGActor.cpp:75
void release() override
Definition RPGActor.h:32
void cancelCastSkill()
取消读条。
Definition RPGActor.cpp:206
int removeAllAttributeModifiersBySource(const std::string &source)
Definition RPGActor.cpp:80
static RPGActor * createActor()
创建一个空白 actor(三张表均为空,按需惰性写入),并纳入 liveActors() 跟踪。
Definition RPGActor.cpp:23
int removeStatusByTag(const std::string &tag)
Definition RPGActor.cpp:104
void setSkillCooldown(const std::string &skillId, float seconds)
Definition RPGActor.cpp:188
int removeStatusBySource(const std::string &source)
Definition RPGActor.cpp:100
std::string getBuffEffectId(int index)
Definition RPGActor.cpp:157
bool hasAttribute(const std::string &attribute)
Definition RPGActor.cpp:62
bool forgetSkill(const std::string &skillId)
Definition RPGActor.cpp:182
float getCastProgress()
Definition RPGActor.cpp:212
void learnSkill(const std::string &skillId)
技能:学习 / 查询 / 冷却。
Definition RPGActor.cpp:178
int getBuffInstanceId(int index)
Definition RPGActor.cpp:163
std::string getBuffProp(int instanceId, const std::string &key, const std::string &fallback={})
Definition RPGActor.cpp:167
int applyBuff(const std::string &effectId, const std::string &source="")
Buff 别名(与 Status API 等价,便于游戏侧按习惯命名)。
Definition RPGActor.cpp:135
bool canCastSkill(const std::string &skillId)
Definition RPGActor.cpp:192
float getBuffRemaining(int index)
Definition RPGActor.cpp:161
void setBaseAttribute(const std::string &attribute, double value)
便捷成员方法(转发到 AttributeSystem / StatusSystem / SkillSystem)。 提供这一层薄封装主要是为了让脚本可以写 actor....
Definition RPGActor.cpp:50
int getStatusStacks(int index)
Definition RPGActor.cpp:118
void modifyBaseAttribute(const std::string &attribute, double delta)
Definition RPGActor.cpp:58
bool knowsSkill(const std::string &skillId)
Definition RPGActor.cpp:180
int removeBuffByEffect(const std::string &effectId)
Definition RPGActor.cpp:141
bool hasStatusTag(const std::string &tag)
Definition RPGActor.cpp:110
std::string addAttributeModifier(const std::string &attribute, const std::string &source, const std::string &op, double value, int priority=0)
Definition RPGActor.cpp:66
int removeStatusByEffect(const std::string &effectId)
Definition RPGActor.cpp:96
int removeBuffBySource(const std::string &source)
Definition RPGActor.cpp:145
bool setBuffProp(int instanceId, const std::string &key, const std::string &value)
Definition RPGActor.cpp:172
bool hasBuff(const std::string &effectId)
Definition RPGActor.cpp:151
int getStatusInstanceId(int index)
Definition RPGActor.cpp:122
bool setStatusProp(int instanceId, const std::string &key, const std::string &value)
Definition RPGActor.cpp:131
std::string getStatusSource(int index)
Definition RPGActor.cpp:124
bool hasBuffTag(const std::string &tag)
Definition RPGActor.cpp:153
double getFinalAttribute(const std::string &attribute)
Definition RPGActor.cpp:84
std::string getStatusProp(int instanceId, const std::string &key, const std::string &fallback={})
Definition RPGActor.cpp:126
float getStatusRemaining(int index)
Definition RPGActor.cpp:120
int applyEffect(const std::string &effectId, const std::string &source="")
状态(buff/debuff)—— Statuses ECS 组件的薄封装。
Definition RPGActor.cpp:90
bool hasEffect(const std::string &effectId)
Definition RPGActor.cpp:108
int removeBuffByTag(const std::string &tag)
Definition RPGActor.cpp:149
std::string getBuffSource(int index)
Definition RPGActor.cpp:165
float getSkillCooldown(const std::string &skillId)
Definition RPGActor.cpp:184
bool removeAttributeModifier(const std::string &attribute, const std::string &modifierId)
Definition RPGActor.cpp:71
RPG 模块入口:属性 / 效果 / 状态 / 技能 / 结算五套系统的脚本绑定与帧调度点。
施法状态:同一时间每个 actor 只有一个进行中的引导/读条(可按需扩展为多槽)。
Definition SkillTypes.h:16
属性表:任意字符串 -> AttributeValue(base + modifiers)。
Definition RPGActor.h:35
std::unordered_map< std::string, AttributeValue > values
Definition RPGActor.h:36
已学会技能的冷却状态 + 当前读条状态。
Definition RPGActor.h:46
std::unordered_map< std::string, SkillRuntime > known
Definition RPGActor.h:47
状态(buff/debuff)运行时列表 —— ECS 组件,游戏侧常称 Buffs。
Definition RPGActor.h:40
std::vector< StatusInstance > active
Definition RPGActor.h:41