Prevent move on right button.

This commit is contained in:
yukirij 2024-09-29 21:08:19 -07:00
parent 359076563b
commit eaf95f8eba

View File

@ -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);
}
// 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;
}
}
}
}
// 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;
}
}
}
// 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;
}
}
}
} break;
// Clear selection if no tile is hovered.
else {
INTERFACE_DATA.select = null;
// 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) {