加入状态机

This commit is contained in:
2026-06-05 23:18:54 +08:00
parent 2b6c701a6a
commit efffc5ec9c
6 changed files with 297 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
#include <gai_fsm.h>
static os_int_t FindNextState(gai_fsm_t* self, os_list_t* transitions, void* ud){
os_list_node_t * p_node = 0;
for(p_node = transitions->next; p_node!=transitions; p_node= p_node->next){
gai_fsm_transition_t* p_transition = os_list_member_of(p_node, gai_fsm_transition_t, node);
if(p_transition->evaluator(self, p_transition, ud)){
return p_transition->to_state_id;
}
}
return -1;
}
void gai_fsm_update(gai_fsm_t* self, void* userdata){
if(!self->current_state_p){
return;
}
gai_action_status_t status = gai_fsm_status(self);
if(status==kGaiActionStatus_Running){
gai_action_Update(&self->current_state_p->action, userdata);
}else if(status==kGaiActionStatus_Terminated){
os_int_t to_state_id = FindNextState(self, &self->current_state_p->transition_list, userdata);
gai_fsm_state_t* p_next_state = gai_fsm_find_state(self, to_state_id);
if(p_next_state){
gai_action_Cleanup(&self->current_state_p->action);
self->current_state_p = p_next_state;
gai_action_Initialize(&self->current_state_p->action);
}
}
}