diff options
| author | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 10:16:53 +0100 |
|---|---|---|
| committer | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 10:16:53 +0100 |
| commit | 6dad43a768646ef0d8f06958446761eb8a1b3f93 (patch) | |
| tree | 444e202b636e5f119dacb81dfcbcb3060ae5aae4 /src/client_game_states.c | |
| parent | 2d8d54e988ced2aaf485c9640ef0a38526a4eb44 (diff) | |
Refactored client game states into separate functions instead of handling them in a huge switch() statement.
Diffstat (limited to 'src/client_game_states.c')
| -rw-r--r-- | src/client_game_states.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/client_game_states.c b/src/client_game_states.c new file mode 100644 index 0000000..651c06d --- /dev/null +++ b/src/client_game_states.c @@ -0,0 +1,108 @@ +#include "game_states.h" +#include "net/comm.h" +#include "ui.h" +#include "global.h" + +game_state_t state_client_wait_for_hand_cards(const int sock, const uint8_t round) +{ + data_store *d = datamodel(); + + if(round == 1) + { + // Receive and display table stacks + net_recv(sock, msg_type_initial_stacks); + ui_display_wnd_table_cards(&d->table_stacks, false, 0); + ui_display_wnd_stack_points(&d->table_stacks, false, 0); + } + + // Wait for hand cards from server and display them + net_recv(sock, msg_type_deal_hand); + ui_display_wnd_hand_cards(&d->hand, false, 0); + + return STATE_CLIENT_SELECT_OPEN_CARD; +} + +game_state_t state_client_select_open_card(const int sock) +{ + data_store *d = datamodel(); + uint8_t open_card_idx; + + // Select open card + open_card_idx = ui_choose_card(&d->hand); + d->selected_card = d->hand.cards[open_card_idx]; + + // Send open card to server + net_send(sock, msg_type_selected_card, NULL); + + // Remove picked open card from hand + hand_remove_card(&d->hand, open_card_idx); + ui_display_wnd_hand_cards(&d->hand, false, 0); + + return STATE_CLIENT_WAIT_FOR_OPEN_CARDS; +} + +game_state_t state_client_wait_for_open_cards(const int sock) +{ + data_store *d = datamodel(); + + net_recv(sock, msg_type_selected_card_all); + pnoc_sort(d->players.players, d->players.count); // sort in ascending order + + ui_display_wnd_current_state(d->players.players, d->players.count, true, 0, 0); // TODO fix parameters + + //return STATE_CLIENT_PLAY_CARDS; + return STATE_CLIENT_SELECT_OPEN_CARD;; // just for testing +} + +game_state_t state_client_play_cards(const int sock) +{ +#if 0 + data_store *d = datamodel(); + uint8_t stack_idx; + + foreach(open_card) + { + play_lowest_open_card + { + determine_stack_for_open_card + { + if (stack_has_to_be_picked) + { + if (we_have_to_pick) + { + pick_stack(); + send_stack_to_server(); + } + else // another client has to pick + { + receive_stack(); + } + + clear_stack(stack_id); + } + } + place_card() + { + if(count_stack_cards == 6) + clear_stack(stack_id); + } + } + } + if (we_have_hand_cards) + { + return STATE_CLIENT_SELECT_OPEN_CARD; + } + else + { + receive_next_server_action(); + if (server_action == DEAL_CARDS) + { + round++; + return STATE_CLIENT_WAIT_FOR_CARDS; + } + else if (server_action == GAME_FINISHED) + return STATE_CLIENT_GAME_FINISHED; + } +#endif + return 1337; +} |
