89 lines
2.2 KiB
C
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;
|
|
} |