]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/ps.qc
Minigames: fix mouse buttons acting on the current keyboard selection (if changed...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / ps.qc
index 8bf8cabe75738713164856171a1bc75b98817aa0..c976819dc4dfe2afff2f4baf0cce03cb1ada5570 100644 (file)
@@ -124,7 +124,7 @@ void ps_setup_pieces(entity minigame)
                        continue;
                if(i == floor(PS_NUM_CNT * 0.5) && t == floor(PS_LET_CNT * 0.5))
                        continue; // middle piece is empty
-               entity piece = msle_spawn(minigame,"minigame_board_piece");
+               entity piece = msle_spawn(minigame,new(minigame_board_piece));
                piece.team = 1; // init default team?
                piece.netname = strzone(minigame_tile_buildname(t,i));
                minigame_server_sendflags(piece,MINIG_SF_ALL);
@@ -532,17 +532,26 @@ int ps_client_event(entity minigame, string event, ...)
                {
                        ps_set_curr_pos("");
                        ps_curr_piece = NULL;
-                       minigame.message = ps_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, ps_turn_to_string(minigame.minigame_flags));
+                       return false;
+               }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
                        return false;
                }
                case "key_pressed":
+               case "key_released":
                {
-                       //if((minigame.minigame_flags & PS_TURN_TEAM) == minigame_self.team)
+                       bool event_blocked = (event == "key_released");
+                       if (!(minigame.minigame_flags & PS_TURN_WIN) && !(minigame.minigame_flags & PS_TURN_DRAW))
                        {
                                switch ( ...(0,int) )
                                {
                                        case K_RIGHTARROW:
                                        case K_KP_RIGHTARROW:
+                                               if (event_blocked)
+                                                       return true;
                                                if ( ! ps_curr_pos )
                                                        ps_set_curr_pos("a3");
                                                else
@@ -550,6 +559,8 @@ int ps_client_event(entity minigame, string event, ...)
                                                return true;
                                        case K_LEFTARROW:
                                        case K_KP_LEFTARROW:
+                                               if (event_blocked)
+                                                       return true;
                                                if ( ! ps_curr_pos )
                                                        ps_set_curr_pos("c3");
                                                else
@@ -557,6 +568,8 @@ int ps_client_event(entity minigame, string event, ...)
                                                return true;
                                        case K_UPARROW:
                                        case K_KP_UPARROW:
+                                               if (event_blocked)
+                                                       return true;
                                                if ( ! ps_curr_pos )
                                                        ps_set_curr_pos("a1");
                                                else
@@ -564,6 +577,8 @@ int ps_client_event(entity minigame, string event, ...)
                                                return true;
                                        case K_DOWNARROW:
                                        case K_KP_DOWNARROW:
+                                               if (event_blocked)
+                                                       return true;
                                                if ( ! ps_curr_pos )
                                                        ps_set_curr_pos("a3");
                                                else
@@ -572,6 +587,8 @@ int ps_client_event(entity minigame, string event, ...)
                                        case K_ENTER:
                                        case K_KP_ENTER:
                                        case K_SPACE:
+                                               if (event_blocked)
+                                                       return true;
                                                ps_make_move(minigame);
                                                return true;
                                }
@@ -583,6 +600,7 @@ int ps_client_event(entity minigame, string event, ...)
                {
                        if(...(0,int) == K_MOUSE1)
                        {
+                               ps_client_event(minigame, "mouse_moved");
                                ps_make_move(minigame);
                                return true;
                        }
@@ -609,7 +627,7 @@ int ps_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = ps_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, ps_turn_to_string(sent.minigame_flags));
                                        //if ( sent.minigame_flags & minigame_self.team )
                                                //minigame_prompt();
                                }