feat(entities): light_radius + getLightCenter a Entity i Player

This commit is contained in:
JailDesigner committed 2026-05-12 21:06:01 +02:00
1 parent 68be8e55ec
commit ebb161f1f5
5 files changed
+67

No files matched your search

+13
View File
@@ -124,6 +124,12 @@ class Player : public AnimatedSprite {
// creua mentre `jump_z_` és superior a aquest valor, no col·lisionem.
inline static int body_height = 0;
// Radi de la llum emesa pel jugador (en píxels del canvas), llegit
// del bloc opcional `light: { radius: N }` del YAML. 0 = no emet.
// Es declara estàtic com la resta de configs del jugador (immunity,
// jump, ...): tots els jugadors del mateix YAML comparteixen el valor.
inline static int light_radius = 0;
// Ha de cridar-se abans d'instanciar Player; GameScene ho fa al ctor.
static void loadFrom(const std::string& yaml_path);
@@ -132,6 +138,13 @@ class Player : public AnimatedSprite {
// marcador i `Player::resetForJoin` per a re-entrades mid-partida.
[[nodiscard]] static auto getInitialLives() -> int { return death_config.initial_lives; }
// Emissió de llum (mateix paper que `Entity::getLightRadius` per a
// les entitats). El centre puja amb el salt: durant `jump_z_>0` el
// sprite es dibuixa amb `pos_.y - jump_z_`, i la llum ha de seguir-lo
// per a que el cercle "salti" amb el jugador, no es quedi al sòl.
[[nodiscard]] static auto getLightRadius() -> int { return light_radius; }
[[nodiscard]] auto getLightCenter() const -> SDL_FPoint;
Player(const std::string& anim_key, int id, float x, float y, const Controls& controls, const Map::Info& map_info, int paint_tile_index = -1);
// Update en una sola crida: manté l'API anterior per als tests i