feat(animation): 添加动画状态回调支持
refactor(character): 重构角色动作处理逻辑 feat(swordman): 实现剑士基础攻击和技能1处理 refactor(state): 优化状态机与动作上下文管理 feat(input): 改进输入系统支持动作请求队列 refactor(movement): 重构移动系统支持行走/奔跑模式
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#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
|
||||
@@ -1,6 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "character/states/CharacterStateBase.h"
|
||||
#include "character/states/jobs/swordman/SwordmanActionHandler.h"
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
@@ -18,6 +22,11 @@ public:
|
||||
void OnExit(CharacterStateMachine& machine,
|
||||
CharacterStateContext& context,
|
||||
CharacterStateId nextState) override;
|
||||
|
||||
private:
|
||||
ISwordmanActionHandler* FindHandler(const std::string& actionId) const;
|
||||
|
||||
std::unordered_map<std::string, std::unique_ptr<ISwordmanActionHandler>> handlers_;
|
||||
};
|
||||
|
||||
} // namespace frostbite2D
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "character/states/jobs/swordman/SwordmanActionHandler.h"
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
class SwordmanBasicAttackHandler : public SwordmanActionHandlerBase {
|
||||
public:
|
||||
SwordmanBasicAttackHandler();
|
||||
|
||||
void OnEnter(CharacterStateContext& context,
|
||||
const CharacterActionDefinition& action) override;
|
||||
SwordmanActionUpdateResult OnUpdate(CharacterStateContext& context,
|
||||
const CharacterActionDefinition& action) override;
|
||||
void OnExit(CharacterStateContext& context,
|
||||
const CharacterActionDefinition& action) override;
|
||||
|
||||
private:
|
||||
void BeginComboStep(CharacterStateContext& context, int comboStep);
|
||||
|
||||
int comboStep_ = 0;
|
||||
};
|
||||
|
||||
} // namespace frostbite2D
|
||||
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "character/states/jobs/swordman/SwordmanActionHandler.h"
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
class SwordmanSkill1Handler : public SwordmanActionHandlerBase {
|
||||
public:
|
||||
SwordmanSkill1Handler();
|
||||
|
||||
void OnEnter(CharacterStateContext& context,
|
||||
const CharacterActionDefinition& action) override;
|
||||
SwordmanActionUpdateResult OnUpdate(CharacterStateContext& context,
|
||||
const CharacterActionDefinition& action) override;
|
||||
};
|
||||
|
||||
} // namespace frostbite2D
|
||||
Reference in New Issue
Block a user