Turn starts, a sound (and animation?) plays to alert the player it is their turn
Player hovers hand over their first chip pile
Chips are highlighted as the hand moves up and down, starting at the grab point and moving upward
Player picks up chips by grabbing
The correct number of chips are removed from the pile and are grabbed by the players hand (synced)
Player drops chips in the betting area.
"Call" text on button is replaced with "Bet [value]"
Chips re-stack in correct orientation (synced)
Player realizes they put in too many chips and wants to take two out
Almost the same sequence as steps 2, 3 - except now from betting area back to their chip stack
Player is extremely drunk. so they drop the chips they are holding onto the floor (this is very realistic)
Chips fall with physics - after being on ground for a few seconds, they animate back to the pile they were just at
Player picks up same amount of chips again, brings them from betting area back to their chip stack
"Bet [value]" text lowers in value as chip values are updated inside betting pile and player's stack
Chips re-stack as needed
Player repeats steps 2-4 for two more types of chips in their chip stack, in order to make a funny number
Player finalizes bet by pressing "Bet [value]", ending turn
A confirmation sound plays
PokerGameState.TriggerCallBetRaise() is called, increasing the pot value (and presumably the minimum Call value is updated as well)
Chips animate from betting area to pot
Player chip stack rebalances itself
thoughts on implementation
Player chip stack and player betting area are functionally almost equivalent, just in different directions
When moving chips, we need to remember where we came from in case we drop stuff (and so we can subtract from that pile)
Dropping a stack in an area finalizes the "transaction", moving chips from an origin pile to a destination pile
When grabbing a stack of chips, it acts as one object being grabbed. we want to create one object which has the correct height / number of chips inside of it. look into unity object pools for spawning this maybe?
raising is basically the same as betting. How do we know whether to display "Bet [value]" or "Raise [value]"? we'll need to know a bit about the game state in that case
rebalancing chip stack doesnt need much outside information and can just be done by creating a function with one int value - e.g. rebalance(int amt)
subtasks
16
17
potential edge cases to look out for
If applicable, we can update this later to link to the relevant issue #
what if the player throws their chips into an infinite void?
All-in can be considered a special case of betting, to be addressed later with its own UI.
if a player bets the same amount as the minimum call, we are basically just Calling
the case where the player is betting less than the minimum call - do we just pull a few more chips from them and call?
the case where the player is betting less than the minimum call, but does not have enough chips to meet minimum call - we should make sure we don't accidentally draw too much and give them a negative-valued chip stack
Example use case of betting during a turn
PokerGameState.TriggerCallBetRaise()
is called, increasing the pot value (and presumably the minimum Call value is updated as well)thoughts on implementation
rebalance(int amt)
subtasks
16
17
potential edge cases to look out for
If applicable, we can update this later to link to the relevant issue #