载入中...
搜索中...
未找到
StatusSystem.cpp
浏览该文件的文档.
31void applyModifiersForInstance(RPGActor *actor, const EffectDefinition &def, StatusInstance &inst) {
81void StatusSystem::unregisterStackPolicy(const std::string &name) { stackPolicies().erase(name); }
118int StatusSystem::apply(RPGActor *actor, const std::string &effectId, const std::string &source) {
140 for (const auto &spec : def->modifiers) AttributeSystem::modifyBase(actor, spec.attribute, spec.value);
static std::string addModifier(RPGActor *actor, const std::string &attribute, const std::string &source, const std::string &op, double value, int priority=0)
添加一条修改器,返回自动生成的唯一 id(用于之后精确移除)。 空字符串 id 表示失败(actor 为空)。
Definition AttributeSystem.cpp:102
static void modifyBase(RPGActor *actor, const std::string &attribute, double delta)
增量修改基础值(如自然回蓝、升级加点)。
Definition AttributeSystem.cpp:89
static const EffectDefinition * find(const std::string &id)
Definition Effect.cpp:30
static const std::vector< RPGActor * > & liveActors()
返回所有通过 createActor() 创建、且当前仍存活的 actor。 StatusSystem::update / SkillSystem::update 用它遍历所有 actor 逐帧推进。 ...
Definition RPGActor.cpp:33
static bool setProp(RPGActor *actor, int instanceId, const std::string &key, const std::string &value)
Definition StatusSystem.cpp:423
static void clearStackPolicies()
Definition StatusSystem.cpp:87
static std::string getActiveSource(RPGActor *actor, int index)
Definition StatusSystem.cpp:408
static void unregisterLifecycleHook(const std::string &name)
Definition StatusSystem.cpp:93
static int apply(RPGActor *actor, const std::string &effectId, const std::string &source="")
施加一个效果。返回值: -1 — 失败(actor 为空 / 效果不存在 / 条件拒绝 / stackPolicy 拒绝重复) 0 — durationPolicy=="instant":已立即生效,无...
Definition StatusSystem.cpp:118
std::function< bool(RPGActor *actor, const EffectDefinition &def, const std::string &source, std::string &outReason)> ApplyCondition
施加前条件:返回 false 表示拒绝施加。 全部已注册条件按注册表遍历(AND);任一失败则 apply 返回 -1 并产生 action="reject" 事件。
Definition StatusSystem.h:31
std::function< int(RPGActor *actor, StatusInstance &existing, const EffectDefinition &def, const std::string &source)> StackPolicyFn
自定义叠加策略:当已存在同 effectId 实例且 stackPolicy 名命中本注册表时调用。 返回值约定与 apply() 相同(-1 拒绝 / >0 实例 id)。策略内部可改写 stacks...
Definition StatusSystem.h:40
static void update(float dt)
遍历 RPGActor::liveActors():倒计时长、到期移除、周期效果产生 tick 事件。
Definition StatusSystem.cpp:431
static int getActiveStacks(RPGActor *actor, int index)
Definition StatusSystem.cpp:387
static bool hasApplyCondition(const std::string &name)
Definition StatusSystem.cpp:71
static bool hasStackPolicy(const std::string &name)
Definition StatusSystem.cpp:83
static void pollChanges(std::vector< StatusChangeEvent > &out)
取出并清空自上次调用以来累积的生命周期变更事件。
Definition StatusSystem.cpp:481
static bool hasLifecycleHook(const std::string &name)
Definition StatusSystem.cpp:97
static int getActiveInstanceId(RPGActor *actor, int index)
Definition StatusSystem.cpp:401
static bool hasEffect(RPGActor *actor, const std::string &effectId)
Definition StatusSystem.cpp:358
static void unregisterApplyCondition(const std::string &name)
Definition StatusSystem.cpp:67
static void clearLifecycleHooks()
Definition StatusSystem.cpp:101
static void pollTicks(std::vector< StatusTickEvent > &out)
取出并清空自上次调用以来累积的周期 tick 事件(push/poll 风格,见 event 模块)。
Definition StatusSystem.cpp:475
static bool hasTag(RPGActor *actor, const std::string &tag)
是否存在任一效果定义带有该 tag 的活动实例。
Definition StatusSystem.cpp:366
static int removeBySource(RPGActor *actor, const std::string &source)
移除该 actor 身上所有 source 匹配的实例;返回移除数量。
Definition StatusSystem.cpp:309
static bool remove(RPGActor *actor, int instanceId)
按实例 id 精确移除(撤销其属性修改器);返回是否命中。
Definition StatusSystem.cpp:264
static void registerApplyCondition(const std::string &name, ApplyCondition fn)
Definition StatusSystem.cpp:63
static void registerStackPolicy(const std::string &name, StackPolicyFn fn)
Definition StatusSystem.cpp:77
static int getActiveCount(RPGActor *actor)
Definition StatusSystem.cpp:375
static std::string getProp(RPGActor *actor, int instanceId, const std::string &key, const std::string &fallback={})
按实例 id 读写 props;找不到实例时 get 返回 fallback,set 返回 false。
Definition StatusSystem.cpp:415
static void registerLifecycleHook(const std::string &name, LifecycleHook fn)
Definition StatusSystem.cpp:89
static int removeByEffect(RPGActor *actor, const std::string &effectId)
移除该 actor 身上所有 effectId 匹配的实例;返回移除数量。
Definition StatusSystem.cpp:285
static void unregisterStackPolicy(const std::string &name)
Definition StatusSystem.cpp:81
static void clearApplyConditions()
Definition StatusSystem.cpp:75
std::function< void(const StatusChangeEvent &ev)> LifecycleHook
生命周期钩子:每次产生 StatusChangeEvent 时同步回调(在事件入队之后)。
Definition StatusSystem.h:43
static int removeByTag(RPGActor *actor, const std::string &tag)
移除该 actor 身上所有 tag 匹配(效果定义带该 tag)的实例;返回移除数量。
Definition StatusSystem.cpp:333
static std::string getActiveEffectId(RPGActor *actor, int index)
Definition StatusSystem.cpp:380
static float getActiveRemaining(RPGActor *actor, int index)
Definition StatusSystem.cpp:394
Definition Effect.h:32
std::string durationPolicy
"instant" | "duration" | "infinite"(未知值按 "instant" 处理)。
Definition Effect.h:36
std::string stackPolicy
"none" | "refresh" | "extend" | "stack",或 StatusSystem::registerStackPolicy 注册的名字。 未知且未注册时按 "none" 处理...
Definition Effect.h:46
std::vector< EffectModifierSpec > modifiers
durationPolicy 为 duration/infinite 且 period<=0 时,apply 会直接写入这些修改器。
Definition Effect.h:50
状态生命周期变更事件(施加 / 刷新 / 叠层 / 延长 / 移除 / 到期 / 拒绝)。 与 StatusTickEvent 分开:tick 是周期性数值触发,change 是实例结构变化。
Definition StatusTypes.h:59
std::unordered_map< std::string, std::string > props
运行时自定义键值(图标路径、UI 着色、脚本标记……)。 与 EffectDefinition::extra(定义侧)互补:extra 是模板数据,props 是实例数据。
Definition StatusTypes.h:35
周期性状态触发的 tick 事件。周期效果(period > 0)不会自动修改属性, 而是每个周期产生一个 tick 事件交给上层(脚本或 C++ 结算系统)处理—— 这样伤害/治疗类周期效果可以完整地...
Definition StatusTypes.h:44