feat(player): direcció preferida al HURT segons l'offset d'impacte

This commit is contained in:
JailDesigner committed 2026-04-25 15:29:48 +02:00
1 parent 4667e0abf9
commit c38c80753a
2 files changed
+108 -64

No files matched your search

+24 -7
View File
@@ -411,13 +411,30 @@ class Player : public AnimatedSprite {
static void readHurtBlock(const fkyaml::node& yaml);
// Activa l'estat HURT: el jugador queda projectat amb velocitat
// inicial `hurt_config.initial_speed_px_per_s` cap a la direcció que
// doni més recorregut lliure (provem els 4 cardinals i triem el de
// major distància fins a topar amb un mur). Decelera linealment fins
// a parar i, en eixe instant, torna a GROUNDED. Sense col·lisió amb
// altres jugadors mentre dura — ja que es travessa l'eventual
// solapament inicial.
void enterHurt();
// inicial `hurt_config.initial_speed_px_per_s`. La direcció es tria
// així:
// - Si `preferred != NONE` i hi cap el recorregut natural complet
// (sense topar amb mur abans d'esgotar la inèrcia), s'usa
// `preferred`.
// - Altrament (o si `preferred == NONE`), prova els 4 cardinals
// i tria el que dóna més recorregut lliure.
// Decelera linealment fins a parar i, en eixe instant, torna a
// GROUNDED. Sense col·lisió amb altres jugadors mentre dura.
void enterHurt(Cardinal preferred = Cardinal::NONE);
// Tria la direcció definitiva del HURT. Si `preferred` cabe el
// recorregut natural complet, la retorna; d'altra manera tria la
// direcció amb més recorregut lliure entre els 4 cardinals.
[[nodiscard]] auto chooseHurtDirection(Cardinal preferred) const -> Cardinal;
// Recorregut lliure (en píxels, fins a `max_px`) en la direcció
// (dx, dy) abans de topar amb un mur o eixir del playfield. La
// base-box es projecta `i` píxels i es comprova; retorna `i-1` al
// primer xoc.
[[nodiscard]] auto reachInDirection(float dx, float dy, int max_px) const -> int;
// Vectors unitaris dels 4 cardinals. `NONE` retorna (0, 0).
[[nodiscard]] static auto deltasFor(Cardinal c) -> std::pair<float, float>;
// Estat de la màquina d'estats. Mutat per `tick`/`applyMovement`. Per
// defecte GROUNDED al spawn.