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
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
|
||||
@@ -13,10 +15,18 @@
|
||||
// algun dia aterri l'art definitiu, el renderer consultarà `currentFrame()`
|
||||
// i traduirà l'índex al rectangle del sprite corresponent. De moment els
|
||||
// placeholders tenen un únic frame i `currentFrame()` retorna sempre 0.
|
||||
//
|
||||
// El flip (H/V) és propietat de l'animació, no del codi del joc: el YAML
|
||||
// declara `flip_h`/`flip_v` al bloc d'animació i el component els exposa
|
||||
// via `flipMode()`. Les entitats apliquen aquest valor al seu `flip_` quan
|
||||
// canvien d'animació, sense decidir-lo per direcció. Així una mòmia que va
|
||||
// cap a l'oest reprodueix `walk_west` (frames de l'est + `flip_h: true`)
|
||||
// sense que el codi de la mòmia toqui flip directament.
|
||||
class AnimationComponent {
|
||||
public:
|
||||
AnimationComponent() = default;
|
||||
AnimationComponent(std::vector<int> frames, float fps, bool loop);
|
||||
AnimationComponent(std::vector<int> frames, float fps, bool loop, bool flip_h, bool flip_v);
|
||||
|
||||
// Avanç del temps. Si `frames_` està buit o té un sol element, no fa
|
||||
// res. En mode loop, `current_frame_` rebota a 0 en passar del final;
|
||||
@@ -37,10 +47,19 @@ class AnimationComponent {
|
||||
[[nodiscard]] auto completed() const -> bool { return completed_; }
|
||||
[[nodiscard]] auto loops() const -> bool { return loop_; }
|
||||
|
||||
[[nodiscard]] auto flipH() const -> bool { return flip_h_; }
|
||||
[[nodiscard]] auto flipV() const -> bool { return flip_v_; }
|
||||
// Combinació dels dos flags al `SDL_FlipMode` que entén el render.
|
||||
// SDL3 no admet bitmask: si fos VH simultani, prioritzem H (cap cas
|
||||
// pràctic actual el necessita combinat).
|
||||
[[nodiscard]] auto flipMode() const -> SDL_FlipMode;
|
||||
|
||||
private:
|
||||
std::vector<int> frames_;
|
||||
float fps_{1.0F};
|
||||
bool loop_{true};
|
||||
bool flip_h_{false};
|
||||
bool flip_v_{false};
|
||||
int current_{0};
|
||||
float accumulator_{0.0F};
|
||||
bool completed_{false};
|
||||
|
||||
Reference in new issue
Block a user