summaryrefslogtreecommitdiff
path: root/src/client_game_states.c
diff options
context:
space:
mode:
authorMario Kilies <MarioKilies@GMX.net>2011-01-25 10:16:53 +0100
committerMario Kilies <MarioKilies@GMX.net>2011-01-25 10:16:53 +0100
commit6dad43a768646ef0d8f06958446761eb8a1b3f93 (patch)
tree444e202b636e5f119dacb81dfcbcb3060ae5aae4 /src/client_game_states.c
parent2d8d54e988ced2aaf485c9640ef0a38526a4eb44 (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.c108
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;
+}