]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/bd.qc
Merge branch 'terencehill/csqc_input_stuff' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / bd.qc
index 744dab71af518124cae264d9708fde3f47c189d2..50054edb96b53d73f4693b8ee74e9351c6a43820 100644 (file)
@@ -437,7 +437,7 @@ void bd_editor_place(entity minigame, entity player, string pos, int thetile, st
                        }
                        else
                        {
-                               entity piece = msle_spawn(minigame,"minigame_board_piece");
+                               entity piece = msle_spawn(minigame,new(minigame_board_piece));
                                piece.team = 1;
                                piece.netname = strzone(pos);
                                piece.bd_tiletype = thetile;
@@ -711,7 +711,7 @@ void bd_load_piece(entity minigame, string s)
        }
        else
        {
-               entity e = msle_spawn(minigame,"minigame_board_piece");
+               entity e = msle_spawn(minigame,new(minigame_board_piece));
                e.netname = tilename;
                e.team = 1;
                e.bd_dir = dir;
@@ -1143,9 +1143,10 @@ void bd_hud_status(vector pos, vector mySize)
                        string thepiece = "bd/dozer";
                        if(active_minigame.minigame_flags & BD_TURN_EDIT)
                                thepiece = bd_get_tile_pic(bd_curr_tile);
-                       drawpic( mypos,
+                       const float tile_scale = 0.7;
+                       drawpic( mypos + tile_size * 0.5 * (1 - tile_scale),
                                        minigame_texture(thepiece),
-                                       tile_size * 0.7, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
+                                       tile_size * tile_scale, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
 
                        mypos_x += tile_size_x;
 
@@ -1211,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);
@@ -1256,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, ...)
 {
@@ -1322,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;
@@ -1343,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;
                                }