From eaf95f8eba21797572f21d0c63918f2b50f4c084 Mon Sep 17 00:00:00 2001 From: yukirij Date: Sun, 29 Sep 2024 21:08:19 -0700 Subject: [PATCH] Prevent move on right button. --- www/js/interface.js | 172 ++++++++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 78 deletions(-) diff --git a/www/js/interface.js b/www/js/interface.js index 6e7058a..b833e0a 100644 --- a/www/js/interface.js +++ b/www/js/interface.js @@ -204,96 +204,111 @@ const INTERFACE = { if(redraw) { INTERFACE.draw(); } }, - click() { - if(INTERFACE_DATA.hover !== null) { - INTERFACE_DATA.clicked = INTERFACE_DATA.hover; + click(event) { + switch(event.button) { + // Main button + case 0: { + if(INTERFACE_DATA.hover !== null) { + INTERFACE_DATA.clicked = INTERFACE_DATA.hover; - if(INTERFACE.Ui.match_select(INTERFACE_DATA.hover, INTERFACE_DATA.select)) { - INTERFACE_DATA.clicked = null; - } else { - // Check if operation can be performed on new tile. - // Otherwise, switch selection. - let result = 0; - if(INTERFACE_DATA.select !== null) { + if(INTERFACE.Ui.match_select(INTERFACE_DATA.hover, INTERFACE_DATA.select)) { + INTERFACE_DATA.clicked = null; + } else { + // Check if operation can be performed on new tile. + // Otherwise, switch selection. + let result = 0; + if(INTERFACE_DATA.select !== null) { - // Play selection. - if(INTERFACE_DATA.hover.source == 0 && (INTERFACE_DATA.mode == INTERFACE.Mode.Local || INTERFACE_DATA.player == (GAME_DATA.turn & 1))) { - let tile_state = INTERFACE_DATA.board_state[INTERFACE_DATA.hover.tile][1]; - result = +(tile_state == INTERFACE.TileStatus.Valid || tile_state == INTERFACE.TileStatus.Threat); - } - - // Alt move selection. - else if(INTERFACE_DATA.select.source == 0 && INTERFACE_DATA.hover.source == 1) { - let alt_piece = INTERFACE.selection_has_alt(INTERFACE_DATA.select); - if(alt_piece !== null) { - let pool_player = Math.floor(INTERFACE_DATA.hover.tile / 7); - pool_player ^= INTERFACE_DATA.player & 1; - if(INTERFACE_DATA.player == 2) { pool_player ^= INTERFACE_DATA.rotate; } - - if((INTERFACE_DATA.hover.tile % 7) == alt_piece.piece && alt_piece.player == pool_player) { - INTERFACE_DATA.alt_mode = !INTERFACE_DATA.alt_mode; - result = 2; + // Play selection. + if(INTERFACE_DATA.hover.source == 0 && (INTERFACE_DATA.mode == INTERFACE.Mode.Local || INTERFACE_DATA.player == (GAME_DATA.turn & 1))) { + let tile_state = INTERFACE_DATA.board_state[INTERFACE_DATA.hover.tile][1]; + result = +(tile_state == INTERFACE.TileStatus.Valid || tile_state == INTERFACE.TileStatus.Threat); } - } - } - } - - // Handle player action. - switch(result) { - case 1: { - let source = INTERFACE_DATA.select.source; - if(source == 0 && INTERFACE_DATA.alt_mode) { - source = 3; - } - - let play = new GAME.Play( - source, - INTERFACE_DATA.select.tile, - INTERFACE_DATA.hover.tile, - INTERFACE_DATA.alt_mode - ); - INTERFACE.process(play); - INTERFACE_DATA.select = null; - INTERFACE_DATA.alt_mode = false; - } break; - - case 0: { - // Handle new selection. - INTERFACE_DATA.select = null; - INTERFACE_DATA.alt_mode = false; - - // Select tile on board. - if(INTERFACE_DATA.hover.source == 0) { - if(GAME_DATA.board.tiles[INTERFACE_DATA.hover.tile].piece !== null) { - INTERFACE_DATA.select = INTERFACE_DATA.hover; - } - } - - // Select tile in pools. - else { - let pool_player = Math.floor(INTERFACE_DATA.hover.tile / 7); - pool_player ^= INTERFACE_DATA.player & 1; - if(INTERFACE_DATA.player == 2) { pool_player ^= INTERFACE_DATA.rotate; } - - let pool_piece = INTERFACE_DATA.hover.tile % 7; - if(GAME_DATA.pools[pool_player].pieces[pool_piece] > 0) { - INTERFACE_DATA.select = INTERFACE_DATA.hover; + // Alt move selection. + else if(INTERFACE_DATA.select.source == 0 && INTERFACE_DATA.hover.source == 1) { + let alt_piece = INTERFACE.selection_has_alt(INTERFACE_DATA.select); + if(alt_piece !== null) { + let pool_player = Math.floor(INTERFACE_DATA.hover.tile / 7); + pool_player ^= INTERFACE_DATA.player & 1; + if(INTERFACE_DATA.player == 2) { pool_player ^= INTERFACE_DATA.rotate; } + + if((INTERFACE_DATA.hover.tile % 7) == alt_piece.piece && alt_piece.player == pool_player) { + INTERFACE_DATA.alt_mode = !INTERFACE_DATA.alt_mode; + result = 2; + } + } } } - } break; + + // Handle player action. + switch(result) { + case 1: { + let source = INTERFACE_DATA.select.source; + if(source == 0 && INTERFACE_DATA.alt_mode) { + source = 3; + } + + let play = new GAME.Play( + source, + INTERFACE_DATA.select.tile, + INTERFACE_DATA.hover.tile, + INTERFACE_DATA.alt_mode + ); + INTERFACE.process(play); + INTERFACE_DATA.select = null; + INTERFACE_DATA.alt_mode = false; + } break; + + case 0: { + // Handle new selection. + INTERFACE_DATA.select = null; + INTERFACE_DATA.alt_mode = false; + + // Select tile on board. + if(INTERFACE_DATA.hover.source == 0) { + if(GAME_DATA.board.tiles[INTERFACE_DATA.hover.tile].piece !== null) { + INTERFACE_DATA.select = INTERFACE_DATA.hover; + } + } + + // Select tile in pools. + else { + let pool_player = Math.floor(INTERFACE_DATA.hover.tile / 7); + pool_player ^= INTERFACE_DATA.player & 1; + if(INTERFACE_DATA.player == 2) { pool_player ^= INTERFACE_DATA.rotate; } + + let pool_piece = INTERFACE_DATA.hover.tile % 7; + + if(GAME_DATA.pools[pool_player].pieces[pool_piece] > 0) { + INTERFACE_DATA.select = INTERFACE_DATA.hover; + } + } + } break; + } + } } - } - } - - // Clear selection if no tile is hovered. - else { - INTERFACE_DATA.select = null; + + // Clear selection if no tile is hovered. + else { + INTERFACE_DATA.select = null; + } + } break; + + // Aux button + case 1: { + INTERFACE_DATA.select = null; + } break; } INTERFACE.draw(); }, + contextmenu(event) { + INTERFACE_DATA.select = null; + return false; + }, + release() { if(INTERFACE_DATA.hover !== null && !INTERFACE.Ui.match_select(INTERFACE_DATA.hover, INTERFACE_DATA.clicked) @@ -1006,6 +1021,7 @@ const INTERFACE = { canvas.addEventListener("mouseout", INTERFACE.unhover); canvas.addEventListener("mousedown", INTERFACE.click); canvas.addEventListener("mouseup", INTERFACE.release); + canvas.addEventListener("contextmenu", INTERFACE.contextmenu); window.addEventListener("resize", INTERFACE.draw); switch(INTERFACE_DATA.mode) {