Files
combattest/CharacterAction.h
2026-11-08 07:45:01 -05:00

64 lines
2.4 KiB
C

#ifndef CHARACTER_ACTION_CLASS
#define CHARACTER_ACTION_CLASS
#include <glm/glm.hpp>
enum class CharacterActionType {
Move, // walk along direction, or stand still if it's zero
Attack, // the next swing of its combo along direction
Jump, // up into the air, if it's standing on something
Dash, // a quick burst along direction, or the way it faces if that's zero
Ability // its ability in slot, aimed at point
};
// Something a character's mind wants it to do this frame. Minds produce these, the body carries them out.
struct CharacterAction {
CharacterActionType type = CharacterActionType::Move;
glm::vec3 direction = glm::vec3(0.0f); // Move and Attack, world space, only x and z are used
glm::vec3 facing = glm::vec3(0.0f); // Move only, keep facing this way and walk any way. Zero turns to face where it walks.
glm::vec3 point = glm::vec3(0.0f); // Ability only, world space, what it's aimed at
int slot = -1; // Ability only, which of its abilities, 0 for the one on 1
bool sprint = false; // Move only, run instead of walking
static CharacterAction Move(const glm::vec3& direction, const glm::vec3& facing = glm::vec3(0.0f), bool sprint = false) {
CharacterAction action;
action.type = CharacterActionType::Move;
action.direction = direction;
action.facing = facing;
action.sprint = sprint;
return action;
}
static CharacterAction Attack(const glm::vec3& direction) {
CharacterAction action;
action.type = CharacterActionType::Attack;
action.direction = direction;
return action;
}
static CharacterAction Jump() {
CharacterAction action;
action.type = CharacterActionType::Jump;
return action;
}
static CharacterAction Dash(const glm::vec3& direction) {
CharacterAction action;
action.type = CharacterActionType::Dash;
action.direction = direction;
return action;
}
// Turns to face along direction and uses the ability in slot, aimed at point
static CharacterAction UseAbility(int slot, const glm::vec3& direction, const glm::vec3& point) {
CharacterAction action;
action.type = CharacterActionType::Ability;
action.slot = slot;
action.direction = direction;
action.point = point;
return action;
}
};
#endif