/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "action.h" void holdemActionInit() { // Free up all actions memset(HOLDEM_GAME_STATE.actionQueue, (int32_t)NULL, sizeof(holdemaction_t) * HOLDEM_GAME_ACTION_QUEUE_SIZE ); // Free up all data memset(HOLDEM_GAME_STATE.actionData, (int32_t)NULL, sizeof(void *) * HOLDEM_GAME_ACTION_DATA_SIZE * HOLDEM_GAME_ACTION_QUEUE_SIZE ); } int32_t holdemActionAdd(holdemaction_t action) { int32_t i = -1; int32_t j = -1; for(i = 0; i < HOLDEM_GAME_ACTION_QUEUE_SIZE; i++) { if(HOLDEM_GAME_STATE.actionQueue[i].init != NULL) continue; j = i; break; } if(j == -1) return j; HOLDEM_GAME_STATE.actionQueue[j] = action; HOLDEM_GAME_STATE.actionInitState[j] = false; return j; } void holdemActionRemove(int32_t index) { if(HOLDEM_GAME_STATE.actionQueue[index].dispose != NULL) { HOLDEM_GAME_STATE.actionQueue[index].dispose( index, HOLDEM_GAME_STATE.actionData + index ); } memset(HOLDEM_GAME_STATE.actionQueue+index, (int32_t)NULL, sizeof(holdemaction_t) ); memset(HOLDEM_GAME_STATE.actionData+index, (int32_t)NULL, sizeof(void *) * HOLDEM_GAME_ACTION_DATA_SIZE ); } void holdemActionUpdate() { int32_t i; void **data; holdemaction_t *action; for(i = 0; i < HOLDEM_GAME_ACTION_QUEUE_SIZE; i++) { action = HOLDEM_GAME_STATE.actionQueue + i; data = HOLDEM_GAME_STATE.actionData + i; if(action->init != NULL && !HOLDEM_GAME_STATE.actionInitState[i]) { HOLDEM_GAME_STATE.actionInitState[i] = true; action->init(i, data); } if(action->update != NULL) { action->update(i, data); } } } void holdemActionDispose() { int32_t i; for(i = 0; i < HOLDEM_GAME_ACTION_QUEUE_SIZE; i++) { if(HOLDEM_GAME_STATE.actionQueue[i].dispose == NULL) continue; HOLDEM_GAME_STATE.actionQueue[i].dispose(i, HOLDEM_GAME_STATE.actionData+i); } }