Fix select handling for pool and alt.

This commit is contained in:
yukirij 2025-02-05 12:56:51 -08:00
parent d3838afbdd
commit ff4cba6775

View File

@ -303,9 +303,10 @@ const INTERFACE = {
// 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 + GAME_DATA.config.rules.reverse) & 1) || !GAME_DATA.config.rules.turn))) {
if(INTERFACE_DATA.select !== null) {
let tile_state = INTERFACE_DATA.Game.board_state[INTERFACE_DATA.hover.tile][1];
result = +(tile_state == INTERFACE.TileStatus.Valid || tile_state == INTERFACE.TileStatus.Threat);
if(INTERFACE_DATA.select.source == 1) {
@ -325,17 +326,19 @@ const INTERFACE = {
}
}
}
}
// Alt move selection.
else if(INTERFACE_DATA.hover.source == 2) {
if(INTERFACE_DATA.select !== null) {
if(INTERFACE_DATA.select.source == 0) {
let alt_piece = INTERFACE.selection_has_alt(INTERFACE_DATA.select);
if(alt_piece !== null) {
INTERFACE_DATA.alt_mode = !INTERFACE_DATA.alt_mode;
}
}
result = 2;
}
result = 2;
}
// Handle player action.
@ -364,15 +367,16 @@ const INTERFACE = {
INTERFACE_DATA.select = null;
INTERFACE_DATA.alt_mode = false;
switch(INTERFACE_DATA.hover.source) {
// Select tile on board.
if(INTERFACE_DATA.hover.source == 0) {
case 0: {
if(GAME_DATA.board.tiles[INTERFACE_DATA.hover.tile].piece !== null) {
INTERFACE_DATA.select = INTERFACE_DATA.hover;
}
}
} break;
// Select tile in pools.
else {
case 1: {
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; }
@ -382,6 +386,7 @@ const INTERFACE = {
if(GAME_DATA.pools[pool_player].pieces[pool_piece] > 0) {
INTERFACE_DATA.select = INTERFACE_DATA.hover;
}
} break;
}
} break;
}
@ -1278,8 +1283,8 @@ const INTERFACE = {
if(is_select) {
border_color = INTERFACE.Color.HintSelectLight;
background_color = INTERFACE.Color.HintSelect;
}
if(is_hover) { border_color = INTERFACE.Color.HintHover; }
// Draw border