载入中...
搜索中...
未找到
SkillSystem.h
浏览该文件的文档.
1#pragma once
2
3// 技能释放流程:冷却 / 消耗 / 读条 / 授予效果。
4//
5// 可定制点:registerCastCondition() 允许 C++ 侧插入任意额外的"能否释放"判断
6// (例如"沉默状态不能施法"),无需修改 SkillSystem 本身——引擎不内置任何
7// 状态互斥概念(沉默/眩晕等完全是游戏自定义的 tag/effect)。
8
9#include "rpg/SkillTypes.h"
10
11#include <functional>
12#include <string>
13#include <vector>
14
15namespace eve::rpg {
16
17class RPGActor;
18struct SkillDefinition;
19
21public:
24 std::function<bool(RPGActor *actor, const SkillDefinition &def, std::string &outReason)>;
25
26 static void registerCastCondition(const std::string &name, CastCondition fn);
27 static void unregisterCastCondition(const std::string &name);
28 static void clearCastConditions();
29
30 static void learn(RPGActor *actor, const std::string &skillId);
31 static bool knows(RPGActor *actor, const std::string &skillId);
32 static bool forget(RPGActor *actor, const std::string &skillId);
33
34 static float getCooldownRemaining(RPGActor *actor, const std::string &skillId);
35 static void setCooldownRemaining(RPGActor *actor, const std::string &skillId, float seconds);
36
38 static bool canCast(RPGActor *actor, const std::string &skillId, std::string *reason = nullptr);
39
45 static bool beginCast(RPGActor *actor, const std::string &skillId, RPGActor *target = nullptr,
46 std::string *reason = nullptr);
47
49 static void cancelCast(RPGActor *actor);
50
51 static bool isCasting(RPGActor *actor);
52 static std::string getCastingSkillId(RPGActor *actor);
53 static float getCastProgress(RPGActor *actor);
54
56 static void update(float dt);
57
58 static void pollCastEvents(std::vector<SkillCastEvent> &out);
59};
60
61} // namespace eve::rpg
const char * name
Definition RockMesh.cpp:21
SettlementPipeline::Stage fn
属性 / 状态 / 技能三表合一的 ECS 实体。
Definition RPGActor.h:28
static bool forget(RPGActor *actor, const std::string &skillId)
static void update(float dt)
遍历 RPGActor::liveActors():冷却倒计时 + 读条推进/结算。
static void cancelCast(RPGActor *actor)
打断当前读条(不退还已扣除的消耗/冷却)。
static std::string getCastingSkillId(RPGActor *actor)
static float getCastProgress(RPGActor *actor)
0..1,非读条状态返回 0
static void setCooldownRemaining(RPGActor *actor, const std::string &skillId, float seconds)
static bool isCasting(RPGActor *actor)
static void clearCastConditions()
static void unregisterCastCondition(const std::string &name)
static float getCooldownRemaining(RPGActor *actor, const std::string &skillId)
static void learn(RPGActor *actor, const std::string &skillId)
std::function< bool(RPGActor *actor, const SkillDefinition &def, std::string &outReason)> CastCondition
返回 false 表示禁止释放;通过 outReason 说明原因。
Definition SkillSystem.h:24
static bool knows(RPGActor *actor, const std::string &skillId)
static void registerCastCondition(const std::string &name, CastCondition fn)
static bool canCast(RPGActor *actor, const std::string &skillId, std::string *reason=nullptr)
检查冷却/消耗/学会状态/自定义条件,不产生任何副作用。
static bool beginCast(RPGActor *actor, const std::string &skillId, RPGActor *target=nullptr, std::string *reason=nullptr)
尝试释放技能:通过 canCast 检查后立即扣除消耗并进入冷却; castTime<=0 时立即结算(授予效果 + 产生 SkillCastEvent), 否则进入读条状态,由 update() 在读...
static void pollCastEvents(std::vector< SkillCastEvent > &out)
RPG 模块入口:属性 / 效果 / 状态 / 技能 / 结算五套系统的脚本绑定与帧调度点。