El addonDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Stewart-DevTeam-Team/stewart_prealpha/llms.txt
Use this file to discover all available pages before exploring further.
state_machine proporciona un sistema de máquina de estados finitos (FSM) reutilizable para cualquier nodo de Godot 4. En lugar de gestionar lógica de comportamiento con variables de bandera o condicionales anidados, cada estado es un nodo independiente con su propio script. La máquina se encarga de las transiciones; los estados se encargan del comportamiento.
Arquitectura
El sistema está formado por dos clases:StateMachine— Nodo que coordina los estados. Se añade como hijo del nodo que quieres controlar (o en cualquier lugar del árbol). Llama aupdateyphysics_updateen el estado activo cada frame.BaseState— Clase abstracta que todo estado debe extender. Define el contrato de ciclo de vida:start,update,physics_updateyexit.
Jerarquía de escena
StateMachine recorre sus nodos hijos en _ready y registra en un diccionario todos los que sean BaseState. La clave es el script del estado, lo que permite solicitar transiciones por tipo en lugar de por referencia directa.
Clase StateMachine
state_machine.gd
Propiedades exportadas
| Propiedad | Tipo | Descripción |
|---|---|---|
controlled_node | Node | El nodo que los estados van a controlar. Se inyecta automáticamente en cada estado al inicio. |
default_state | BaseState | Estado inicial al entrar en la escena. También se usa como fallback si se solicita un estado no registrado. |
Método change_to_state
exit() en el estado actual, busca el nuevo estado en el diccionario por script y llama a _setup_current_state(), que inyecta controlled_node y llama a start(). Si el script solicitado no está registrado, la máquina vuelve al default_state.
Clase BaseState
base_state.gd
Señal y métodos del ciclo de vida
| Nombre | Firma | Descripción |
|---|---|---|
to_state | signal to_state(next_state: Script) | Emite el script del estado destino para solicitar una transición. La StateMachine está conectada a esta señal. |
start() | func start() -> void | Se llama cuando el estado se activa. Úsalo para inicializar animaciones, velocidades o cualquier lógica de entrada. |
update(delta) | func update(delta: float) -> void | Se llama en _process. Lógica que depende de frames, como entrada de usuario no física. |
physics_update(delta) | func physics_update(delta: float) -> void | Se llama en _physics_process. Movimiento y física del personaje. |
exit() | func exit() -> void | Se llama justo antes de salir del estado. Úsalo para limpiar efectos o resetear valores. |
CharacterState: clase intermedia
Los estados de los personajes jugables no extienden directamente BaseState, sino CharacterState, que añade un acceso tipado al nodo controlado.
character_state.gd
character.velocity, character.input_direction, etc., sin castings manuales en cada estado.
Estados del personaje
Idle — reposo
Idle — reposo
idle.gd
sprint.Walk — caminar
Walk — caminar
walk.gd
walk_speed. Transita a Idle al soltar el joystick o a Run al presionar sprint.Run — correr
Run — correr
run.gd
run_speed. Transita a Idle si la velocidad es cero, o a Walk al soltar sprint.Cómo añadir un nuevo estado
Crea el script del estado
Crea un nuevo archivo
.gd que extienda CharacterState (o BaseState si es para otro tipo de nodo). Implementa solo los métodos que necesites.attack.gd
Añade un nodo hijo a StateMachine
En el editor, añade un nodo
Node como hijo de StateMachine. Asígnale el script recién creado desde el inspector.Verifica que StateMachine lo registre
Al ejecutar la escena,
StateMachine._ready() registrará el nuevo estado automáticamente porque es hijo suyo y extiende BaseState. No se requiere ninguna configuración adicional.