Je me demandais si je pouvais coder un type de FSM "générique" pour un jeu en C++?FSM générique pour le jeu en C++?
Mon jeu a une conception orientée composants, donc j'utilise un composant FSM. Mon composant Machine à états finis (FSM), ressemble plus ou moins de cette manière. Je voudrais entendre vos opinions/idées ou suggestions sur la façon de faire ce composant FSM, générique. Avec générique, je veux dire:
1) Créer la fsmTable à partir d'un fichier xml est vraiment facile, je veux dire que c'est juste un tas d'entiers qui peuvent être chargés pour créer une matrice MAX_STATESxMAX_ACTION.
void gecFSM::setRule(kEntityState initialState, int inputAction, kEntityState resultingState)
{
fsmTable[initialState][inputAction] = resultingState;
}
2) Mais qu'en est-il de la méthode «Effectuer une action»?
void gecFSM::performAction(int action)
{
switch(smTable[ ownerEntity->getState() ][ action ])
{
case WALK:
/*Walk action*/
break;
case STAND:
/*Stand action*/
break;
case JUMP:
/*Jump action*/
break;
case RUN:
/*Run action*/
break;
}
}
si je voulais faire les « actions » et le commutateur générique?
Ceci afin d'éviter de créer une classe de composant FSM différente pour chaque GameEntity
? (gecFSMZombie
, gecFSMDryad
, gecFSMBoss
etc?). Cela me permettrait d'aller "Data Driven" et de construire mes FSM génériques à partir de fichiers par exemple.
Que proposez-vous?
Avez-vous regardé la bibliothèque de la machine d'état boost? –