Sistema di Comandi
July 29, 2025 · View on GitHub
Questa cartella contiene gli script necessari per gestire una coda di comandi eseguibili in sequenza.
Classi principali
Command
Classe astratta derivata da ScriptableObject. È sufficiente crearne una sottoclasse e implementare il metodo Execute per definire la logica del comando.
CommandInput
Struttura utilizzata per passare parametri al comando. Contiene:
GameObject Igniter– l'oggetto che ha generato il comando.object[] AdditionalSettings– eventuali parametri aggiuntivi.
CommandTuple
Semplice contenitore per una coppia Command/CommandInput. Viene utilizzato internamente dal CommandManager.
CommandManager
Singleton incaricato di gestire la coda dei comandi. Espone i metodi principali:
AddToQueue(GameObject igniter, Command command, params object[] additionalSettings)– aggiunge un comando alla coda e lo esegue se non è già in corso un altro comando.CommandExecutionComplete()– da richiamare alla fine dell'esecuzione di un comando per avviare il successivo.
Sono inoltre disponibili le proprietà IsCommandPlaying e CurrentCommand per verificare lo stato corrente.
Esempio di utilizzo
public class DrawCardAction : Command
{
public override void Execute(CommandInput input)
{
// Logica del comando
Debug.Log($"Pesca carta da {input.Igniter}");
// Notifica al manager che il comando è terminato
CommandManager.Instance.CommandExecutionComplete();
}
}
// Aggiunta di un comando alla coda
Command drawCard = ScriptableObject.CreateInstance<DrawCardAction>();
CommandManager.Instance.AddToQueue(gameObject, drawCard);