feat(enemy): els enemics poden disparar bales via tick d'IA

This commit is contained in:
2026-05-25 20:05:01 +02:00
parent 5ad433e63a
commit 14295ce859
18 changed files with 361 additions and 92 deletions
+16 -8
View File
@@ -1,26 +1,34 @@
// bullet_registry.hpp - Registre estàtic de la configuració de la bala
// bullet_registry.hpp - Registre estàtic de configuracions de bala
// © 2026 JailDesigner
//
// Una única instància per a tota la sessió. Es manté el patró registry
// (paral·lel a EnemyRegistry) tot i ser una sola entitat: si el dia de demà
// hi ha més tipus de bala (laser/plasma/etc.) només cal estendre-ho.
// Diverses configuracions per nom (data/entities/<name>/<name>.yaml). El
// config "bullet" es manté com a default històric (player) i es carrega via
// load(). Els altres (ex. "bullet_long" per a bales d'enemic) es carreguen
// peresosament la primera vegada que algú els demana per nom.
#pragma once
#include <string>
#include <unordered_map>
#include "game/entities/bullet_config.hpp"
class BulletRegistry {
public:
BulletRegistry() = delete;
// Carrega data/entities/bullet/bullet.yaml. Retorna false si falla.
// Carrega data/entities/bullet/bullet.yaml com a default. Retorna false si falla.
static auto load() -> bool;
// Accés a la configuració. Avorta amb log fatal si load() no s'ha cridat
// o ha fallat.
// Accés a la configuració per defecte ("bullet"). Avorta amb log fatal si
// load() no s'ha cridat o ha fallat. Mantingut per a backwards compat del Bullet ctor.
static auto get() -> const BulletConfig&;
// Accés a una configuració per nom. Lazy-load: si no està al map, intenta
// carregar data/entities/<name>/<name>.yaml. Retorna nullptr si no es pot.
static auto get(const std::string& name) -> const BulletConfig*;
private:
static BulletConfig config;
static std::unordered_map<std::string, BulletConfig> configs;
static bool loaded;
};