]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/bd.qc
Merge branch 'master' into terencehill/csqc_input_stuff
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / bd.qc
index a7a123243dc2a193a4bee1d12a01ecc5936f3600..50054edb96b53d73f4693b8ee74e9351c6a43820 100644 (file)
@@ -1212,31 +1212,6 @@ void bd_set_curr_pos(string s)
        bd_curr_pos = s;
 }
 
-bool bd_normal_move(entity minigame, int themove)
-{
-       switch ( themove )
-       {
-               case K_RIGHTARROW:
-               case K_KP_RIGHTARROW:
-                       bd_make_move(minigame, "r");
-                       return true;
-               case K_LEFTARROW:
-               case K_KP_LEFTARROW:
-                       bd_make_move(minigame, "l");
-                       return true;
-               case K_UPARROW:
-               case K_KP_UPARROW:
-                       bd_make_move(minigame, "u");
-                       return true;
-               case K_DOWNARROW:
-               case K_KP_DOWNARROW:
-                       bd_make_move(minigame, "d");
-                       return true;
-       }
-
-       return false;
-}
-
 bool bd_change_dozer_angle(entity minigame)
 {
        entity dozer = bd_find_piece(minigame, bd_curr_pos, false);
@@ -1257,54 +1232,6 @@ bool bd_change_dozer_angle(entity minigame)
        return true;
 }
 
-bool bd_editor_move(entity minigame, int themove)
-{
-       switch ( themove )
-       {
-               case K_RIGHTARROW:
-               case K_KP_RIGHTARROW:
-                       if ( ! bd_curr_pos )
-                               bd_set_curr_pos("a3");
-                       else
-                               bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,1,0,BD_NUM_CNT,BD_LET_CNT));
-                       return true;
-               case K_LEFTARROW:
-               case K_KP_LEFTARROW:
-                       if ( ! bd_curr_pos )
-                               bd_set_curr_pos("c3");
-                       else
-                               bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,-1,0,BD_NUM_CNT,BD_LET_CNT));
-                       return true;
-               case K_UPARROW:
-               case K_KP_UPARROW:
-                       if ( ! bd_curr_pos )
-                               bd_set_curr_pos("a1");
-                       else
-                               bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,1,BD_NUM_CNT,BD_LET_CNT));
-                       return true;
-               case K_DOWNARROW:
-               case K_KP_DOWNARROW:
-                       if ( ! bd_curr_pos )
-                               bd_set_curr_pos("a3");
-                       else
-                               bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,-1,BD_NUM_CNT,BD_LET_CNT));
-                       return true;
-               case K_ENTER:
-               case K_KP_ENTER:
-                       bd_editor_make_move(minigame, "");
-                       return true;
-               case K_SPACE:
-                       if(bd_change_dozer_angle(minigame))
-                               return true;
-                       bd_curr_tile += 1;
-                       if(bd_curr_tile > BD_TILE_LAST)
-                               bd_curr_tile = 1;
-                       return true;
-       }
-
-       return false;
-}
-
 // Required function, handle client events
 int bd_client_event(entity minigame, string event, ...)
 {
@@ -1323,17 +1250,97 @@ int bd_client_event(entity minigame, string event, ...)
                        return false;
                }
                case "key_pressed":
+               case "key_released":
                {
-                       if(minigame.minigame_flags & BD_TURN_MOVE)
+                       bool event_blocked = ((event == "key_released")
+                               || !(minigame.minigame_flags & BD_TURN_MOVE));
+                       if (!(minigame.minigame_flags & BD_TURN_WIN) && !(minigame.minigame_flags & BD_TURN_LOSS))
                        {
-                               if(bd_normal_move(minigame, ...(0,int)))
-                                       return true;
+                               switch ( ...(0,int) )
+                               {
+                                       case K_RIGHTARROW:
+                                       case K_KP_RIGHTARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               bd_make_move(minigame, "r");
+                                               return true;
+                                       case K_LEFTARROW:
+                                       case K_KP_LEFTARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               bd_make_move(minigame, "l");
+                                               return true;
+                                       case K_UPARROW:
+                                       case K_KP_UPARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               bd_make_move(minigame, "u");
+                                               return true;
+                                       case K_DOWNARROW:
+                                       case K_KP_DOWNARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               bd_make_move(minigame, "d");
+                                               return true;
+                               }
                        }
 
                        if(minigame.minigame_flags & BD_TURN_EDIT)
                        {
-                               if(bd_editor_move(minigame, ...(0,int)))
-                                       return true;
+                               switch ( ...(0,int) )
+                               {
+                                       case K_RIGHTARROW:
+                                       case K_KP_RIGHTARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               if ( ! bd_curr_pos )
+                                                       bd_set_curr_pos("a3");
+                                               else
+                                                       bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,1,0,BD_NUM_CNT,BD_LET_CNT));
+                                               return true;
+                                       case K_LEFTARROW:
+                                       case K_KP_LEFTARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               if ( ! bd_curr_pos )
+                                                       bd_set_curr_pos("c3");
+                                               else
+                                                       bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,-1,0,BD_NUM_CNT,BD_LET_CNT));
+                                               return true;
+                                       case K_UPARROW:
+                                       case K_KP_UPARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               if ( ! bd_curr_pos )
+                                                       bd_set_curr_pos("a1");
+                                               else
+                                                       bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,1,BD_NUM_CNT,BD_LET_CNT));
+                                               return true;
+                                       case K_DOWNARROW:
+                                       case K_KP_DOWNARROW:
+                                               if (event_blocked)
+                                                       return true;
+                                               if ( ! bd_curr_pos )
+                                                       bd_set_curr_pos("a3");
+                                               else
+                                                       bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,-1,BD_NUM_CNT,BD_LET_CNT));
+                                               return true;
+                                       case K_ENTER:
+                                       case K_KP_ENTER:
+                                               if (event_blocked)
+                                                       return true;
+                                               bd_editor_make_move(minigame, "");
+                                               return true;
+                                       case K_SPACE:
+                                               if (event_blocked)
+                                                       return true;
+                                               if(bd_change_dozer_angle(minigame))
+                                                       return true;
+                                               bd_curr_tile += 1;
+                                               if(bd_curr_tile > BD_TILE_LAST)
+                                                       bd_curr_tile = 1;
+                                               return true;
+                               }
                        }
 
                        return false;
@@ -1344,12 +1351,14 @@ int bd_client_event(entity minigame, string event, ...)
                        {
                                if(...(0,int) == K_MOUSE1)
                                {
+                                       bd_client_event(minigame, "mouse_moved");
                                        bd_editor_make_move(minigame, "");
                                        return true;
                                }
 
                                if(...(0,int) == K_MOUSE2)
                                {
+                                       bd_client_event(minigame, "mouse_moved");
                                        bd_editor_fill(minigame);
                                        return true;
                                }