Prevent move on right button.
This commit is contained in:
parent
359076563b
commit
eaf95f8eba
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user