FlagsManager es un singleton autoload que proporciona un almacén centralizado de banderas booleanas con nombre. Úsalo para realizar el seguimiento del estado persistente del juego: completar el tutorial, funciones desbloqueadas, flujos de primera ejecución y cualquier otra condición binaria que deba leerse en diferentes escenas y sistemas.
FlagsManagerestá registrado como un autoload, por lo que está disponible desde cualquier script del proyecto. Todos los valores de las banderas son de tipobool; no hay enteros, cadenas u otros tipos.
Resumen de la clase
Al iniciar, FlagsManager carga un recurso Flags (flags.tres) desde uid://calw1rmsghoh8. Cada entrada en flags.tres es un valor booleano con nombre.
Inicialización
func _ready():
_flags.expected_type = TYPE_BOOL
_flags.check_item_types()
_ready() obliga a que cada entrada en flags.tres sea estrictamente un booleano. Si se asigna accidentalmente un valor no booleano a una bandera, check_item_types() registra un error al iniciar.
La validación
TYPE_BOOLes más estricta que la deSceneManageryMusicManager, que utilizanTYPE_OBJECT. Esto significa que incluso un entero0o1enflags.tresprovocará un error: cada entrada debe ser unboolreal de Godot.
Referencia de la API
get_flag(flag: String) -> bool
Devuelve el valor actual de la bandera indicada.
- flag (
String): El nombre de la bandera tal como está registrada enflags.tres. Sensible a mayúsculas y minúsculas. - Retorno (
bool): El valor booleano actual de la bandera. Devuelvefalsepor defecto para las banderas que existen pero no han sido establecidas explícitamente atrue.
set_flag(flag: String, value: bool) -> void
Actualiza el valor de la bandera indicada y emite un mensaje de registro de depuración.
- flag (
String): El nombre de la bandera tal como está registrada enflags.tres. Sensible a mayúsculas y minúsculas. - value (
bool): El nuevo valor booleano. Pasatruepara activar la bandera,falsepara desactivarla.
Registro de depuración (logging)
Cada llamada a set_flag imprime un mensaje con print_debug:
Bandera activada: tutorial_completed
Ejemplos de uso
Comprobar una bandera
if FlagsManager.get_flag("tutorial_completed"):
SceneManager.change_to_scene("battle")
else:
SceneManager.change_to_scene("tutorial")
Establecer una bandera
func _on_tutorial_finished() -> void:
FlagsManager.set_flag("tutorial_completed", true)
SceneManager.change_to_scene("battle")
El recurso Flags
Todos los nombres de banderas y sus valores iniciales se definen en flags.tres. Abre este archivo en el Inspector de Godot para ver la lista completa de banderas.
flags.treses la única fuente de verdad para los nombres de banderas válidos. No puedes llamar aget_flagoset_flagcon un nombre que no exista en este recurso.
Añadir una nueva bandera
- Abre flags.tres en el Inspector: Busca
flags.tresen la pestaña Sistema de Archivos y ábrelo. - Añade una nueva entrada: Añade un nuevo par clave-valor (nombre → bool).
- Verifica al iniciar: Ejecuta el proyecto y comprueba que no haya errores de tipo.
- Utiliza la bandera en el código:
FlagsManager.set_flag("first_battle_won", true)
Casos de uso de las banderas
- Seguimiento de finalización del tutorial: Dirigir a los nuevos jugadores al tutorial.
- Alternancia de funciones (feature toggles): Activar o desactivar funciones opcionales.
- Hitos de progreso: Hacer el seguimiento de logros únicos.
- Banderas de depuración: Añadir banderas temporales para agilizar las pruebas.