refactor(character): 重构角色动作处理逻辑 feat(swordman): 实现剑士基础攻击和技能1处理 refactor(state): 优化状态机与动作上下文管理 feat(input): 改进输入系统支持动作请求队列 refactor(movement): 重构移动系统支持行走/奔跑模式
67 lines
1.8 KiB
C++
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
|