Files
Dawn/src/games/pokerbackup/pokerdiscussion.c

140 lines
3.9 KiB
C

/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "pokerdiscussion.h"
void pokerDiscussionGet(
pokerdiscussion_t *discussion, pokerdiscussiondata_t *data
) {
discussion->count = 0;
memset(discussion->players, 0xFF,
sizeof(uint8_t) * POKER_DISCUSSION_MESSAGE_COUNT_MAX
);
switch(data->reason) {
// Match Start Conversations
case POKER_DISCUSSION_REASON_MATCH_START:
discussion->count++;
discussion->messages[0] = "Match Start";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
// Round Start Conversations
case POKER_DISCUSSION_REASON_ROUND_START:
discussion->count++;
discussion->messages[0] = "Round Start";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
// Round Start Conversations
case POKER_DISCUSSION_REASON_BLINDS_TAKEN:
discussion->count++;
discussion->messages[0] = "Blinds\nhave been taken.";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
// Deal
case POKER_DISCUSSION_REASON_DEAL:
discussion->count++;
discussion->messages[0] = "Cards dealt.";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
// Betting conversations
case POKER_DISCUSSION_REASON_PLAYER_FOLDING:
discussion->count++;
discussion->messages[0] = "I fold.";
discussion->players[0] = data->playerCause;
break;
case POKER_DISCUSSION_REASON_PLAYER_CHECKING:
discussion->count++;
discussion->messages[0] = "I check.";
discussion->players[0] = data->playerCause;
break;
case POKER_DISCUSSION_REASON_PLAYER_CALLING:
discussion->count++;
discussion->messages[0] = "I call.";
discussion->players[0] = data->playerCause;
break;
case POKER_DISCUSSION_REASON_PLAYER_RAISING:
discussion->count++;
discussion->messages[0] = "I raise.";
discussion->players[0] = data->playerCause;
break;
case POKER_DISCUSSION_REASON_PLAYER_ALL_IN:
discussion->count++;
discussion->messages[0] = "All in.";
discussion->players[0] = data->playerCause;
break;
// Flops
case POKER_DISCUSSION_REASON_FLOP:
discussion->count++;
discussion->messages[0] = "Doing the flop.";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
case POKER_DISCUSSION_REASON_BETTING_DONE:
discussion->count++;
discussion->messages[0] = "Winner Winner Chicken Dinner";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
// Fallback
default:
discussion->count++;
discussion->messages[0] = "Hmm, this seems to be an error message.";
discussion->players[0] = POKER_WORLD_DEALER_INDEX;
break;
}
}
uint8_t pokerDiscussionGetTypeFromTurnType(uint8_t winningType) {
switch(winningType) {
case POKER_TURN_TYPE_BET:
return POKER_DISCUSSION_REASON_PLAYER_RAISING;
case POKER_TURN_TYPE_CALL:
return POKER_DISCUSSION_REASON_PLAYER_CALLING;
case POKER_TURN_TYPE_ALL_IN:
return POKER_DISCUSSION_REASON_PLAYER_ALL_IN;
case POKER_TURN_TYPE_FOLD:
return POKER_DISCUSSION_REASON_PLAYER_FOLDING;
break;
case POKER_TURN_TYPE_CHECK:
return POKER_DISCUSSION_REASON_PLAYER_CHECKING;
default:
return POKER_DISCUSSION_REASON_TEST;
}
}
void pokerDiscussionQueue(pokerdiscussiondata_t *data) {
pokerdiscussion_t discussion;
uint8_t i, player;
// Fetch the discussion item for the given data.
pokerDiscussionGet(&discussion, data);
// Now for each discussion item, queue a task.
for(i = 0; i < discussion.count; i++) {
player = discussion.players[i];
pokerGameActionLookAdd(data->poker, player);
vnConversationTalk(&data->poker->scene.conversation,
discussion.messages[i],
data->poker->scene.characters + player
);
}
}