feat(anim): cardinal WEST i flip totalment governat pel motor d'animació
This commit is contained in:
1 parent
9dc7ff0da3
commit
72384c3113
15 files changed
+183
-182
No files matched your search
@@ -351,9 +351,12 @@ class Player : public AnimatedSprite {
|
||||
void snapToHorizontalLane(float delta_time);
|
||||
void snapToVerticalLane(float delta_time);
|
||||
|
||||
// Nom d'animació per al `facing_` actual. Si `moving` és cert s'usa
|
||||
// la variant `walk*`, altrament la variant `stand*`.
|
||||
[[nodiscard]] auto animationName(bool moving) const -> const char*;
|
||||
// Nom d'animació per al `facing_` actual. Composat com a `prefix +
|
||||
// suffix` via els dos helpers estàtics (declarats junt amb `Facing`
|
||||
// més avall) — el prefix depèn de l'estat (walk/stand/jump/stun/hurt/
|
||||
// attack/recover), el sufix del cardinal (`_north`/`_south`/`_east`/
|
||||
// `_west`).
|
||||
[[nodiscard]] auto animationName(bool moving) const -> std::string;
|
||||
void snapToLane(
|
||||
float delta_time,
|
||||
float base,
|
||||
@@ -428,21 +431,24 @@ class Player : public AnimatedSprite {
|
||||
// reinstanciar-lo.
|
||||
Map::Info map_;
|
||||
|
||||
// Direcció "cap on mira" el jugador. Governa quin conjunt d'animacions
|
||||
// s'aplica (lateral, amunt, avall) i si el sprite es flipeja o no. Els
|
||||
// moviments purament horitzontals o diagonals prenen `EAST` (prevalença
|
||||
// lateral; el flip horitzontal converteix l'animació EAST en la
|
||||
// simètrica oest), els purament verticals fan `NORTH`/`SOUTH`. En
|
||||
// aturar-se es preserva l'última orientació perquè la versió stand
|
||||
// coincideixi.
|
||||
// Direcció "cap on mira" el jugador. Una entrada per cada cardinal: el
|
||||
// codi del joc no toca mai el flip — l'oest reprodueix `*_west`, que al
|
||||
// YAML declara `flip_h: true`, i és el motor d'animació qui aplica el
|
||||
// flip al sprite. Els moviments diagonals prenen el component lateral
|
||||
// (EAST/WEST); en aturar-se es preserva l'última orientació perquè la
|
||||
// versió stand coincideixi.
|
||||
enum class Facing : std::uint8_t { EAST,
|
||||
WEST,
|
||||
NORTH,
|
||||
SOUTH };
|
||||
Facing facing_{Facing::EAST};
|
||||
|
||||
// Helpers de composició de `animationName`. Han de viure ací (després
|
||||
// de la declaració de `Facing`) perquè la signatura el referencia.
|
||||
static auto facingSuffix(Facing facing) -> const char*;
|
||||
static auto statePrefix(State state, bool moving, bool in_attack_swing) -> const char*;
|
||||
|
||||
// Cardinal complet (N/S/E/W) usat per a la detecció de girs de 180°.
|
||||
// El parell (Facing, flip) només té 3+1 estats; aquesta enum n'afegeix
|
||||
// la 4a sense reorganitzar el sistema d'animacions.
|
||||
// Pública perquè el `WhipAttack` la passa a `enterHurt` quan colpeja
|
||||
// un altre jugador (friendly fire).
|
||||
public:
|
||||
@@ -554,9 +560,8 @@ class Player : public AnimatedSprite {
|
||||
// timer `attacking_remaining_ms_` a `swing_ms + cooldown_ms`.
|
||||
void enterAttacking(Cardinal facing);
|
||||
|
||||
// Cardinal que correspon al `(facing_, flip_)` actual del sprite —
|
||||
// la direcció cap on mira el jugador. Si `facing_ == EAST` el
|
||||
// resultat depèn del flip; NORTH/SOUTH són trivials. Mai retorna NONE.
|
||||
// Cardinal corresponent al `facing_` actual del sprite — la direcció
|
||||
// cap on mira el jugador. Mapeig 1:1 amb `Facing` (mai NONE).
|
||||
[[nodiscard]] auto currentFacingCardinal() const -> Cardinal;
|
||||
|
||||
// Activa l'estat HURT: el jugador queda projectat amb velocitat
|
||||
|
||||
Reference in new issue
Block a user