No a sistemi diversi per ogni tipo, ciò sta tagliando troppo bene la divisione delle responsabilità.
Questo è quello che sto facendo nel mio attuale progetto personale:
Esistono molti modi per gestire lo stato, ma probabilmente hai bisogno di uno che abbia un senso per gli umani, o almeno un ponte tra umano e codice. Devi pensare al sistema di animazione come a un grande frullatore anziché a uno stato discreto, ad esempio vai da inattivo a camminare lentamente aggiungendo il 50% di camminata al sistema e successivamente aggiungi il 100% di corsa.
All'esterno del sistema di animazione è possibile utilizzare le stringhe per rendere piacevole e facile la scrittura di script e codici con il sistema. All'interno del sistema in cui si crea una mappatura tra quella stringa e i dati di animazione , questo può essere fatto con un archivio di valori-chiave come una hashmap (per evitare del tutto gli enumerando i dati di animazione come archivio) o con una stringa-en-enum cerca se ti piace lavorare in quel modo. È tutta una questione di gusti a quel punto. Preferisco il valore-chiave poiché può essere totalmente guidato dai dati da file XML o INI.
Per gestire tipi diversi puoi, a livello di sistema, consentire la creazione di set di mapping delle animazioni in modo che set per "minion" e "run" per "minion" sia diverso dal set per "run" e "female player" genere.
In sintesi: il sistema di animazione è generico e hai un solo sistema; il mondo esterno ha bisogno di un'interfaccia amichevole; il mondo interno deve mappare stati generici a tipi di entità.
E la mia lista di cose che voglio fare ma che non rientrano ancora nel mio design:
TODO : mappatura automatica della velocità di movimento al tipo di animazione, quindi invece di avere il programma principale a conoscenza di "walk" anziché "run" il sistema di animazione può convertire "move at x speed" nell'animazione corretta.
TODO : dividere le animazioni come il monitoraggio della testa e del busto in modo trasparente.
TODO : animazioni di reazione (come farsi dare un pugno in faccia) gestite dal sistema e non dal programma principale.
if
all'interno del sistema di animazione; In precedenza ero scettico sull'uso dei dizionari di stringhe (in C ++), per quanto riguarda la memoria. Avendo letto oggi sugli hashtabili però, trovo la tua risposta abbastanza semplice. Per quanto riguarda la parte "frullatore": "aggiungere il 50% di camminata" significa sostituire alcuni fotogrammi con quelli di "camminata" al 50% delle volte?