时间:单击230,多击311

This commit is contained in:
godcreator 2024-01-30 15:44:19 +08:00
parent 5eaac008c5
commit 381873a8b3
2 changed files with 13 additions and 10 deletions

View File

@ -47,21 +47,23 @@ void stepBaseFSM(FSM *pFSM)
preload(pFSM);
setEvent(pFSM);
int index = pFSM->privateVars.curState * pFSM->privateVars.numEvent + pFSM->privateVars.curEvent;
int curState = pFSM->privateVars.curState;
FSM **childFSM = pFSM->privateVars.childFSM;
int nextState;
void *data = pFSM->data;
FSMHandler *fcns = &pFSM->privateVars.fcns;
int curState = pFSM->privateVars.curState;
void *data = pFSM->data;
if(fcns->isDelayActionActivated[curState] && fcns->delayActionTable[curState] != NULL ){
if(!fcns->isDelayActionExcuted[curState] && fcns->delayActionTable[curState] != NULL ){
fcns->delayActionTable[curState](data, NULL);
fcns->isDelayActionActivated[curState] = 0;
fcns->isDelayActionExcuted[curState] = 1;
}
FSM **childFSM = pFSM->privateVars.childFSM;
int index = pFSM->privateVars.curState * pFSM->privateVars.numEvent + pFSM->privateVars.curEvent;
int nextState;
if (fcns->transitionTable[index] != NULL)
{
fcns->isDelayActionActivated[curState] = 1;
fcns->isDelayActionExcuted[curState] = 0;
if (fcns->exitActionTable[curState] != NULL)
fcns->exitActionTable[curState](data, childFSM);
@ -100,7 +102,8 @@ FSM* newBaseFSM(int numState, int numEvent, int defaultState){
pFSM->privateVars.preloader.isReady = 0;
pFSM->privateVars.fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
pFSM->privateVars.fcns.isDelayActionActivated = calloc(numState, sizeof(int));
pFSM->privateVars.fcns.isDelayActionExcuted = calloc(numState, sizeof(int));
pFSM->privateVars.fcns.delayActionTable = calloc(numState, sizeof(StateFuncPtr));
pFSM->privateVars.fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
pFSM->privateVars.fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));

View File

@ -46,7 +46,7 @@ typedef struct _FSMHandler{
void (**duringActionTable)(void *data, FSM **cFSM);
void (**exitActionTable)(void *data, FSM **cFSM);
int *isDelayActionActivated;
int *isDelayActionExcuted;
void (**delayActionTable)(void *data, FSM **childFSM);
void (**childFSMStepTable)(FSM **cFSM);