Files
Frostbite2D/Game/include/character/states/jobs/swordman/SwordmanActionHandler.h
Lenheart 5e80df040b feat(animation): 添加动画状态回调支持
refactor(character): 重构角色动作处理逻辑

feat(swordman): 实现剑士基础攻击和技能1处理

refactor(state): 优化状态机与动作上下文管理

feat(input): 改进输入系统支持动作请求队列

refactor(movement): 重构移动系统支持行走/奔跑模式
2026-04-04 14:45:41 +08:00

67 lines
1.8 KiB
C++

#pragma once
#include "character/states/CharacterStateBase.h"
#include <string>
namespace frostbite2D {
struct SwordmanActionUpdateResult {
enum class Type {
Running,
Finished,
Transition,
};
static SwordmanActionUpdateResult Running() {
return {};
}
static SwordmanActionUpdateResult Finished() {
SwordmanActionUpdateResult result;
result.type = Type::Finished;
return result;
}
static SwordmanActionUpdateResult TransitionTo(const std::string& requestedActionId,
bool requireBufferedInput = true) {
SwordmanActionUpdateResult result;
result.type = Type::Transition;
result.requestedActionId = requestedActionId;
result.requireBufferedInput = requireBufferedInput;
return result;
}
Type type = Type::Running;
std::string requestedActionId;
bool requireBufferedInput = true;
};
class ISwordmanActionHandler {
public:
virtual ~ISwordmanActionHandler() = default;
virtual const std::string& GetActionId() const = 0;
virtual void OnEnter(CharacterStateContext& context,
const CharacterActionDefinition& action) = 0;
virtual SwordmanActionUpdateResult OnUpdate(CharacterStateContext& context,
const CharacterActionDefinition& action) = 0;
virtual void OnExit(CharacterStateContext& context,
const CharacterActionDefinition& action) {
(void)context;
(void)action;
}
};
class SwordmanActionHandlerBase : public ISwordmanActionHandler {
public:
explicit SwordmanActionHandlerBase(std::string actionId);
~SwordmanActionHandlerBase() override = default;
const std::string& GetActionId() const override { return actionId_; }
protected:
std::string actionId_;
};
} // namespace frostbite2D