Dawn/src/card/poker/action/action.c

80 lines
2.0 KiB
C

/**
* 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);
}
}