68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "flop.h"
|
|
|
|
void _pokerGameActionFlopOnStart(
|
|
queue_t *queue, queueaction_t *action, uint8_t i
|
|
) {
|
|
pokergame_t *game = (pokergame_t *)action->data;
|
|
pokerdiscussiondata_t discussion;
|
|
queueaction_t *next;
|
|
|
|
// Prep convo
|
|
discussion.poker = game;
|
|
|
|
// Get how many players are left in the round.
|
|
if(pokerPlayerGetCountInRound(game->poker.players) > 1) {// Still more than 1
|
|
// Add the actual flop action.
|
|
next = pokerActionNextFlopAdd(queue, &game->poker);
|
|
|
|
// Is there any flop "left to do" ?
|
|
if(next != NULL) {
|
|
// Talk about it.
|
|
discussion.reason = POKER_DISCUSSION_REASON_FLOP;
|
|
pokerDiscussionQueue(&discussion);
|
|
|
|
// Now, get the count of players left to bet. If "everyone is all in" then
|
|
// this will be 0 and no actual betting needs to happen.
|
|
if(pokerBetGetRemainingPlayerCount(
|
|
&game->poker.bet, game->poker.players
|
|
) > 1) {
|
|
// Reset the better to the betting round initial.
|
|
pokerBetResetBetter(
|
|
&game->poker.bet, game->poker.players, game->poker.roundSmallBlind
|
|
);
|
|
|
|
// Begin betting.
|
|
pokerGameActionLookAdd(game, game->poker.bet.better);
|
|
pokerGameActionBetAdd(game);
|
|
} else {
|
|
//No actual players to bet, so add the following flop instead.
|
|
pokerGameActionFlopAdd(game);
|
|
}
|
|
|
|
// Do next action.
|
|
queueNext(queue);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Done betting
|
|
printf("All betting is done, reveal\n");
|
|
pokerGameActionRestackAdd(game);
|
|
pokerGameActionWinnerAdd(game);
|
|
|
|
// Do next action
|
|
queueNext(queue);
|
|
}
|
|
|
|
queueaction_t * pokerGameActionFlopAdd(pokergame_t *game) {
|
|
queueaction_t *action = pokerGameActionAdd(game);
|
|
action->onStart = &_pokerGameActionFlopOnStart;
|
|
return action;
|
|
} |