89 lines
2.2 KiB
C

/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "bet.h"
void _pokerGameActionBetOnStart(
queue_t *queue, queueaction_t *action, uint8_t i
) {
bool isHuman;
pokergame_t *game = (pokergame_t *)action->data;
// Reset the UI state.
isHuman = game->poker.better == POKER_WORLD_HUMAN_INDEX;
// if(isHuman) pokerUiBetShow(&game->ui);
}
void _pokerGameActionBetOnUpdate(
queue_t *queue, queueaction_t *action, uint8_t i
) {
// Restack
bool isHuman;
bool turnMade = false;
pokerturn_t turn;
pokergame_t *game = (pokergame_t *)action->data;
pokerdiscussiondata_t discussion;
// Are they human?
isHuman = game->poker.better == POKER_WORLD_HUMAN_INDEX;
// Handle as an AI
if(isHuman) {
// turn = game->ui.betTurn;
// turnMade = game->ui.betTurnMade;
turn = pokerTurnGetForPlayer(&game->poker, game->poker.better);
turnMade = true;
} else {
turn = pokerTurnGetForPlayer(&game->poker, game->poker.better);
turnMade = true;
}
// Now decide if we should do something.
if(!turnMade) return;
// Perform the action
pokerTurnAction(&game->poker, game->poker.better, turn);
// Speak
discussion.reason = pokerDiscussionGetTypeFromTurnType(turn.type);
discussion.poker = game;
discussion.playerCause = game->poker.better;
pokerDiscussionQueue(&discussion);
// Next.
queueNext(queue);
}
void _pokerGameActionBetOnEnd(
queue_t *queue, queueaction_t *action, uint8_t i
) {
pokergame_t *game = (pokergame_t *)action->data;
// // Get which player is remaining to move.
game->poker.better = pokerBetGetNextPlayer(&game->poker);
// Restack
pokerGameActionRestackAdd(game);
// Are we waiting on any players?
if(game->poker.better != 0xFF) {
pokerGameActionLookAdd(game, game->poker.better);
pokerGameActionBetAdd(game);
return;
}
// Not waiting, do next action.
pokerGameActionFlopAdd(game);
}
queueaction_t * pokerGameActionBetAdd(pokergame_t *game) {
queueaction_t *action = pokerGameActionAdd(game);
action->onStart = &_pokerGameActionBetOnStart;
action->onUpdate = &_pokerGameActionBetOnUpdate;
action->onEnd = &_pokerGameActionBetOnEnd;
return action;
}