Add interface configurations.
This commit is contained in:
parent
3df4224448
commit
b43c90f2a9
@ -1,5 +1,97 @@
|
|||||||
let INTERFACE_DATA = null;
|
let INTERFACE_DATA = null;
|
||||||
|
|
||||||
|
function INTERFACE_STYLE(id) {
|
||||||
|
switch(id) {
|
||||||
|
case 0: return {
|
||||||
|
Background: "#101010",
|
||||||
|
|
||||||
|
Text: "#c0c0c0",
|
||||||
|
TextDark: "#848484",
|
||||||
|
|
||||||
|
TileBorder: "#606060",
|
||||||
|
TileLight: "#383838",
|
||||||
|
TileMedium: "#242424",
|
||||||
|
TileDark: "#101010",
|
||||||
|
|
||||||
|
Promote: "#a52121",
|
||||||
|
|
||||||
|
Dawn: "#ffe082",
|
||||||
|
DawnShade: "#a59154",
|
||||||
|
DawnMedium: "#fca03f",
|
||||||
|
DawnDark: "#ff6d00",
|
||||||
|
DawnDarkest: "#4c3422",
|
||||||
|
|
||||||
|
Dusk: "#f6a1bd",
|
||||||
|
DuskShade: "#a56b7f",
|
||||||
|
DuskMedium: "#e84a79",
|
||||||
|
DuskDark: "#c51162",
|
||||||
|
DuskDarkest: "#4c2235",
|
||||||
|
|
||||||
|
HintHover: "#b8f1fc",
|
||||||
|
HintSelect: "#4a148c",
|
||||||
|
HintSelectLight: "#cda6fc",
|
||||||
|
HintValid: "#1d268c",
|
||||||
|
HintValidLight: "#6e9de5",
|
||||||
|
HintValidTint: "#3786fc",
|
||||||
|
HintValidDark: "#151c66",
|
||||||
|
HintThreat: "#054719",
|
||||||
|
HintThreatDark: "#023311",
|
||||||
|
HintOpponent: "#49136b",
|
||||||
|
HintOpponentDark: "#2a0b3f",
|
||||||
|
HintInvalid: "#660d0d",
|
||||||
|
HintInvalidLight: "#fc5050",
|
||||||
|
HintInvalidTint: "#fc3737",
|
||||||
|
HintInvalidDark: "#4c0909",
|
||||||
|
HintPlay: "#307c7f",
|
||||||
|
HintCheck: "#C62828",
|
||||||
|
};
|
||||||
|
|
||||||
|
case 1: return {
|
||||||
|
Background: "rgba(0,0,0,0)",
|
||||||
|
|
||||||
|
Text: "#222222",
|
||||||
|
TextDark: "#444444",
|
||||||
|
|
||||||
|
TileBorder: "#444444",
|
||||||
|
TileLight: "#ffffff",
|
||||||
|
TileMedium: "#ffffff",
|
||||||
|
TileDark: "#ffffff",
|
||||||
|
|
||||||
|
Promote: "#888888",
|
||||||
|
|
||||||
|
Dawn: "#ff6d00",
|
||||||
|
DawnShade: "#ffffff",
|
||||||
|
DawnMedium: "#ffffff",
|
||||||
|
DawnDark: "#444444",
|
||||||
|
DawnDarkest: "#ffffff",
|
||||||
|
|
||||||
|
Dusk: "#c51162",
|
||||||
|
DuskShade: "#ffffff",
|
||||||
|
DuskMedium: "#ffffff",
|
||||||
|
DuskDark: "#444444",
|
||||||
|
DuskDarkest: "#ffffff",
|
||||||
|
|
||||||
|
HintHover: "#222222",
|
||||||
|
HintSelect: "#ffffff",
|
||||||
|
HintSelectLight: "#444444",
|
||||||
|
HintValid: "#AAAAAA",
|
||||||
|
HintValidLight: "#444444",
|
||||||
|
HintValidTint: "#444444",
|
||||||
|
HintValidDark: "#DDDDDD",
|
||||||
|
HintThreat: "#ffffff",
|
||||||
|
HintThreatDark: "#000000",
|
||||||
|
HintOpponent: "#ffffff",
|
||||||
|
HintOpponentDark: "#000000",
|
||||||
|
HintInvalid: "#ffffff",
|
||||||
|
HintInvalidLight: "#444444",
|
||||||
|
HintInvalidTint: "#444444",
|
||||||
|
HintInvalidDark: "#DDDDDD",
|
||||||
|
HintPlay: "#ffffff",
|
||||||
|
HintCheck: "#ffffff",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const INTERFACE = {
|
const INTERFACE = {
|
||||||
Mode: {
|
Mode: {
|
||||||
Local: 0,
|
Local: 0,
|
||||||
@ -7,50 +99,16 @@ const INTERFACE = {
|
|||||||
Review: 2,
|
Review: 2,
|
||||||
},
|
},
|
||||||
|
|
||||||
Color: {
|
Config: {
|
||||||
Background: "#101010",
|
DisablePool: false,
|
||||||
|
DisableHint: false,
|
||||||
Text: "#c0c0c0",
|
DisableNumbers: false,
|
||||||
TextDark: "#848484",
|
DisableText: false,
|
||||||
|
DisableInvalid: false,
|
||||||
TileBorder: "#606060",
|
|
||||||
TileLight: "#383838",
|
|
||||||
TileMedium: "#242424",
|
|
||||||
TileDark: "#101010",
|
|
||||||
|
|
||||||
Promote: "#a52121",
|
|
||||||
|
|
||||||
Dawn: "#ffe082",
|
|
||||||
DawnShade: "#a59154",
|
|
||||||
DawnMedium: "#fca03f",
|
|
||||||
DawnDark: "#ff6d00",
|
|
||||||
DawnDarkest: "#4c3422",
|
|
||||||
|
|
||||||
Dusk: "#f6a1bd",
|
|
||||||
DuskShade: "#a56b7f",
|
|
||||||
DuskMedium: "#e84a79",
|
|
||||||
DuskDark: "#c51162",
|
|
||||||
DuskDarkest: "#4c2235",
|
|
||||||
|
|
||||||
HintHover: "#b8f1fc",
|
|
||||||
HintSelect: "#4a148c",
|
|
||||||
HintSelectLight: "#cda6fc",
|
|
||||||
HintValid: "#1d268c",
|
|
||||||
HintValidLight: "#6e9de5",
|
|
||||||
HintValidTint: "#3786fc",
|
|
||||||
HintValidDark: "#151c66",
|
|
||||||
HintThreat: "#054719",
|
|
||||||
HintThreatDark: "#023311",
|
|
||||||
HintOpponent: "#49136b",
|
|
||||||
HintOpponentDark: "#2a0b3f",
|
|
||||||
HintInvalid: "#660d0d",
|
|
||||||
HintInvalidLight: "#fc5050",
|
|
||||||
HintInvalidTint: "#fc3737",
|
|
||||||
HintInvalidDark: "#4c0909",
|
|
||||||
HintPlay: "#307c7f",
|
|
||||||
HintCheck: "#C62828",
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Color: INTERFACE_STYLE(0),
|
||||||
|
|
||||||
TileStatus: {
|
TileStatus: {
|
||||||
Valid: 1,
|
Valid: 1,
|
||||||
Threat: 2,
|
Threat: 2,
|
||||||
@ -177,7 +235,7 @@ const INTERFACE = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle pool area
|
// Handle pool area
|
||||||
else if(mouse_x >= INTERFACE_DATA.Render.pool_offset && mouse_x < INTERFACE_DATA.Render.offset.x + INTERFACE_DATA.Render.area.x) {
|
else if(!INTERFACE.Config.DisablePool && mouse_x >= INTERFACE_DATA.Render.pool_offset && mouse_x < INTERFACE_DATA.Render.offset.x + INTERFACE_DATA.Render.area.x) {
|
||||||
|
|
||||||
let basis_x = INTERFACE_DATA.Render.pool_offset + halfradius;
|
let basis_x = INTERFACE_DATA.Render.pool_offset + halfradius;
|
||||||
let basis_y = INTERFACE_DATA.Render.offset.y + (3 * apothem);
|
let basis_y = INTERFACE_DATA.Render.offset.y + (3 * apothem);
|
||||||
@ -348,7 +406,11 @@ const INTERFACE = {
|
|||||||
|
|
||||||
default: {
|
default: {
|
||||||
if(!event.ctrlKey) {
|
if(!event.ctrlKey) {
|
||||||
INTERFACE_DATA.select = null;
|
if(!event.altKey) {
|
||||||
|
INTERFACE_DATA.select = null;
|
||||||
|
} else {
|
||||||
|
INTERFACE_DATA.alt_mode = !INTERFACE_DATA.alt_mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
@ -374,7 +436,9 @@ const INTERFACE = {
|
|||||||
|
|
||||||
contextmenu(event) {
|
contextmenu(event) {
|
||||||
if(!event.ctrlKey) {
|
if(!event.ctrlKey) {
|
||||||
INTERFACE_DATA.select = null;
|
if(!event.altKey) {
|
||||||
|
INTERFACE_DATA.select = null;
|
||||||
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@ -416,21 +480,37 @@ const INTERFACE = {
|
|||||||
let height = INTERFACE_DATA.canvas.height = INTERFACE_DATA.canvas.clientHeight * (window.devicePixelRatio || 1);
|
let height = INTERFACE_DATA.canvas.height = INTERFACE_DATA.canvas.clientHeight * (window.devicePixelRatio || 1);
|
||||||
|
|
||||||
INTERFACE_DATA.Render.margin.t = Math.floor(Math.min(width, height) / 96);
|
INTERFACE_DATA.Render.margin.t = Math.floor(Math.min(width, height) / 96);
|
||||||
INTERFACE_DATA.Render.margin.l = 1.75 * INTERFACE_DATA.Render.margin.t;
|
|
||||||
INTERFACE_DATA.Render.margin.r = INTERFACE_DATA.Render.margin.t;
|
INTERFACE_DATA.Render.margin.r = INTERFACE_DATA.Render.margin.t;
|
||||||
INTERFACE_DATA.Render.margin.b = 3 * INTERFACE_DATA.Render.margin.t;
|
if(!INTERFACE.Config.DisableNumbers) {
|
||||||
|
INTERFACE_DATA.Render.margin.l = 1.75 * INTERFACE_DATA.Render.margin.t;
|
||||||
|
INTERFACE_DATA.Render.margin.b = 3 * INTERFACE_DATA.Render.margin.t;
|
||||||
|
} else {
|
||||||
|
INTERFACE_DATA.Render.margin.l = INTERFACE_DATA.Render.margin.t;
|
||||||
|
INTERFACE_DATA.Render.margin.b = INTERFACE_DATA.Render.margin.t;
|
||||||
|
}
|
||||||
let margin = INTERFACE_DATA.Render.margin;
|
let margin = INTERFACE_DATA.Render.margin;
|
||||||
|
|
||||||
let gui_width = width - (margin.l + margin.r);
|
let gui_width = width - (margin.l + margin.r);
|
||||||
let gui_height = height - (margin.t + margin.b);
|
let gui_height = height - (margin.t + margin.b);
|
||||||
|
|
||||||
if(gui_width < gui_height * INTERFACE.Ratio) {
|
if(!INTERFACE.Config.DisablePool) {
|
||||||
gui_height = Math.floor(gui_width / INTERFACE.Ratio);
|
if(gui_width < gui_height * INTERFACE.Ratio) {
|
||||||
|
gui_height = Math.floor(gui_width / INTERFACE.Ratio);
|
||||||
|
} else {
|
||||||
|
gui_width = Math.floor(gui_height * INTERFACE.Ratio);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
gui_width = Math.floor(gui_height * INTERFACE.Ratio);
|
if(gui_width < gui_height * INTERFACE.BoardRatio) {
|
||||||
|
gui_height = Math.floor(gui_width / INTERFACE.BoardRatio);
|
||||||
|
} else {
|
||||||
|
gui_width = Math.floor(gui_height * INTERFACE.BoardRatio);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let gui_scale = gui_height * INTERFACE.Scale;
|
let gui_scale = gui_height * INTERFACE.Scale;
|
||||||
|
if(INTERFACE.Config.DisablePool) {
|
||||||
|
gui_scale = gui_height / 18;
|
||||||
|
}
|
||||||
|
|
||||||
INTERFACE_DATA.Render.area.x = gui_width;
|
INTERFACE_DATA.Render.area.x = gui_width;
|
||||||
INTERFACE_DATA.Render.area.y = gui_height;
|
INTERFACE_DATA.Render.area.y = gui_height;
|
||||||
@ -580,9 +660,14 @@ const INTERFACE = {
|
|||||||
let hover_state = INTERFACE_DATA.Game.board_state[i][0];
|
let hover_state = INTERFACE_DATA.Game.board_state[i][0];
|
||||||
|
|
||||||
let piece = null;
|
let piece = null;
|
||||||
if(tile.piece !== null) { piece = GAME_DATA.board.pieces[tile.piece]; }
|
let draw_piece = false;
|
||||||
|
if(tile.piece !== null) {
|
||||||
|
piece = GAME_DATA.board.pieces[tile.piece];
|
||||||
|
if(piece.piece < 8) {
|
||||||
|
draw_piece = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let draw_piece = true;
|
|
||||||
if(INTERFACE_DATA.Animation.piece !== null) {
|
if(INTERFACE_DATA.Animation.piece !== null) {
|
||||||
let play = INTERFACE_DATA.Animation.piece.play;
|
let play = INTERFACE_DATA.Animation.piece.play;
|
||||||
draw_piece = draw_piece && !((play.source == 0 || play.source == 2) && (play.from == i || play.to == i));
|
draw_piece = draw_piece && !((play.source == 0 || play.source == 2) && (play.from == i || play.to == i));
|
||||||
@ -624,13 +709,13 @@ const INTERFACE = {
|
|||||||
switch(hover_state) {
|
switch(hover_state) {
|
||||||
case INTERFACE.TileStatus.Valid: background_color = INTERFACE.Color.HintValidDark; break;
|
case INTERFACE.TileStatus.Valid: background_color = INTERFACE.Color.HintValidDark; break;
|
||||||
case INTERFACE.TileStatus.Threat: background_color = INTERFACE.Color.HintThreatDark; break;
|
case INTERFACE.TileStatus.Threat: background_color = INTERFACE.Color.HintThreatDark; break;
|
||||||
case INTERFACE.TileStatus.Invalid: background_color = INTERFACE.Color.HintInvalidDark; break;
|
case INTERFACE.TileStatus.Invalid: if(!INTERFACE.Config.DisableInvalid) { background_color = INTERFACE.Color.HintInvalidDark; } break;
|
||||||
case INTERFACE.TileStatus.Opponent: background_color = INTERFACE.Color.HintOpponentDark; break;
|
case INTERFACE.TileStatus.Opponent: background_color = INTERFACE.Color.HintOpponentDark; break;
|
||||||
}
|
}
|
||||||
switch(tile_state) {
|
switch(tile_state) {
|
||||||
case INTERFACE.TileStatus.Valid: background_color = INTERFACE.Color.HintValid; break;
|
case INTERFACE.TileStatus.Valid: background_color = INTERFACE.Color.HintValid; break;
|
||||||
case INTERFACE.TileStatus.Threat: background_color = INTERFACE.Color.HintThreat; break;
|
case INTERFACE.TileStatus.Threat: background_color = INTERFACE.Color.HintThreat; break;
|
||||||
case INTERFACE.TileStatus.Invalid: background_color = INTERFACE.Color.HintInvalid; break;
|
case INTERFACE.TileStatus.Invalid: if(!INTERFACE.Config.DisableInvalid) { background_color = INTERFACE.Color.HintInvalid; } break;
|
||||||
case INTERFACE.TileStatus.Opponent: background_color = INTERFACE.Color.HintOpponent; break;
|
case INTERFACE.TileStatus.Opponent: background_color = INTERFACE.Color.HintOpponent; break;
|
||||||
}
|
}
|
||||||
if(is_select) {
|
if(is_select) {
|
||||||
@ -750,25 +835,26 @@ const INTERFACE = {
|
|||||||
opponent_color = INTERFACE.Color.Dawn;
|
opponent_color = INTERFACE.Color.Dawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Player pool
|
if(!INTERFACE.Config.DisablePool) {
|
||||||
draw.pool(
|
// Player pool
|
||||||
basis_x + (14 * radius),
|
draw.pool(
|
||||||
basis_y - gui_scale,
|
basis_x + (14 * radius),
|
||||||
0,
|
basis_y - gui_scale,
|
||||||
player_identity,
|
0,
|
||||||
);
|
player_identity,
|
||||||
|
);
|
||||||
|
|
||||||
// Opponent pool
|
// Opponent pool
|
||||||
draw.pool(
|
draw.pool(
|
||||||
basis_x + (14 * radius),
|
basis_x + (14 * radius),
|
||||||
basis_y - (9 * gui_scale),
|
basis_y - (9 * gui_scale),
|
||||||
7,
|
7,
|
||||||
player_identity ^ 1,
|
player_identity ^ 1,
|
||||||
INTERFACE_DATA.mode == INTERFACE.Mode.Local && INTERFACE_DATA.mirror
|
INTERFACE_DATA.mode == INTERFACE.Mode.Local && INTERFACE_DATA.mirror
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw informational text
|
// Draw informational text
|
||||||
|
|
||||||
let handle_pos = [
|
let handle_pos = [
|
||||||
new MATH.Vec2(
|
new MATH.Vec2(
|
||||||
basis_x + (radius * 12),
|
basis_x + (radius * 12),
|
||||||
@ -809,121 +895,126 @@ const INTERFACE = {
|
|||||||
ctx.fillText(INTERFACE_DATA.Session.Client.Dusk.handle, pos.x, pos.y);
|
ctx.fillText(INTERFACE_DATA.Session.Client.Dusk.handle, pos.x, pos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Tile information
|
// Tile information
|
||||||
ctx.font = Math.ceil(gui_scale / 2) + "px sans-serif";
|
ctx.font = Math.ceil(gui_scale / 2) + "px sans-serif";
|
||||||
|
|
||||||
if(INTERFACE_DATA.hover !== null) {
|
if(!INTERFACE.Config.DisableText) {
|
||||||
let text = "";
|
if(INTERFACE_DATA.hover !== null) {
|
||||||
if(INTERFACE_DATA.hover.source == 0) {
|
let text = "";
|
||||||
text = INTERFACE.Ui.hex_to_alnum(INTERFACE_DATA.hover.hex);
|
if(INTERFACE_DATA.hover.source == 0) {
|
||||||
let piece_id = GAME_DATA.board.tiles[INTERFACE_DATA.hover.tile].piece;
|
text = INTERFACE.Ui.hex_to_alnum(INTERFACE_DATA.hover.hex);
|
||||||
if(piece_id !== null) {
|
let piece_id = GAME_DATA.board.tiles[INTERFACE_DATA.hover.tile].piece;
|
||||||
let piece = GAME_DATA.board.pieces[piece_id];
|
if(piece_id !== null) {
|
||||||
text += " " + LANG(GAME.Const.Piece[piece.piece].name);
|
let piece = GAME_DATA.board.pieces[piece_id];
|
||||||
if(piece.promoted) { text += "+"; }
|
text += " " + LANG(GAME.Const.Piece[piece.piece].name);
|
||||||
|
if(piece.promoted) { text += "+"; }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
text = " " + GAME.Const.Piece[INTERFACE_DATA.hover.tile % 7].name;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
text = " " + GAME.Const.Piece[INTERFACE_DATA.hover.tile % 7].name;
|
ctx.fillStyle = INTERFACE.Color.Text;
|
||||||
|
ctx.textBaseline = "top";
|
||||||
|
ctx.textAlign = "left";
|
||||||
|
ctx.fillText(text, gui_margin.t, gui_margin.t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Number of moves
|
||||||
ctx.fillStyle = INTERFACE.Color.Text;
|
ctx.fillStyle = INTERFACE.Color.Text;
|
||||||
ctx.textBaseline = "top";
|
ctx.textBaseline = "top";
|
||||||
ctx.textAlign = "left";
|
|
||||||
ctx.fillText(text, gui_margin.t, gui_margin.t);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Number of moves
|
|
||||||
ctx.fillStyle = INTERFACE.Color.Text;
|
|
||||||
ctx.textBaseline = "top";
|
|
||||||
ctx.textAlign = "right";
|
|
||||||
ctx.fillText(GAME_DATA.turn, width - gui_margin.t, gui_margin.t);
|
|
||||||
|
|
||||||
// Number of spectators
|
|
||||||
if(INTERFACE_DATA.mode == INTERFACE.Mode.Player || INTERFACE_DATA.mode == INTERFACE.Mode.Review) {
|
|
||||||
ctx.fillStyle = INTERFACE.Color.Text;
|
|
||||||
ctx.textBaseline = "bottom";
|
|
||||||
ctx.textAlign = "right";
|
ctx.textAlign = "right";
|
||||||
ctx.fillText("⚇" + INTERFACE_DATA.Session.Client.Spectators.count, width - gui_margin.t, height - gui_margin.t);
|
ctx.fillText(GAME_DATA.turn, width - gui_margin.t, gui_margin.t);
|
||||||
}
|
|
||||||
|
|
||||||
// Game state message
|
// Number of spectators
|
||||||
let message = null;
|
if(INTERFACE_DATA.mode == INTERFACE.Mode.Player || INTERFACE_DATA.mode == INTERFACE.Mode.Review) {
|
||||||
ctx.fillStyle = INTERFACE.Color.Text;
|
ctx.fillStyle = INTERFACE.Color.Text;
|
||||||
|
ctx.textBaseline = "bottom";
|
||||||
|
ctx.textAlign = "right";
|
||||||
|
ctx.fillText("⚇" + INTERFACE_DATA.Session.Client.Spectators.count, width - gui_margin.t, height - gui_margin.t);
|
||||||
|
}
|
||||||
|
|
||||||
switch(INTERFACE_DATA.Game.auto) {
|
// Game state message
|
||||||
case 1: message = LANG("cpu") + " " + LANG("dawn"); break;
|
let message = null;
|
||||||
case 2: message = LANG("cpu") + " " + LANG("dusk"); break;
|
ctx.fillStyle = INTERFACE.Color.Text;
|
||||||
case 3: message = LANG("cpu"); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(GAME_DATA.state.code) {
|
switch(INTERFACE_DATA.Game.auto) {
|
||||||
case GAME.Const.State.Resign: {
|
case 1: message = LANG("cpu") + " " + LANG("dawn"); break;
|
||||||
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
case 2: message = LANG("cpu") + " " + LANG("dusk"); break;
|
||||||
message = LANG("resign");
|
case 3: message = LANG("cpu"); break;
|
||||||
} break;
|
}
|
||||||
case GAME.Const.State.Checkmate: {
|
|
||||||
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
switch(GAME_DATA.state.code) {
|
||||||
message = LANG("checkmate");
|
case GAME.Const.State.Resign: {
|
||||||
} break;
|
|
||||||
default: {
|
|
||||||
if(GAME_DATA.state.check != 0) {
|
|
||||||
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
||||||
message = LANG("check");
|
message = LANG("resign");
|
||||||
|
} break;
|
||||||
|
case GAME.Const.State.Checkmate: {
|
||||||
|
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
||||||
|
message = LANG("checkmate");
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
if(GAME_DATA.state.check != 0) {
|
||||||
|
ctx.fillStyle = INTERFACE.Color.HintCheck;
|
||||||
|
message = LANG("check");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(message !== null) {
|
||||||
|
ctx.textBaseline = "bottom";
|
||||||
|
ctx.textAlign = "left";
|
||||||
|
ctx.fillText(message, gui_margin.t, height - gui_margin.t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(message !== null) {
|
if(!INTERFACE.Config.DisableNumbers) {
|
||||||
ctx.textBaseline = "bottom";
|
// Draw tile numbers
|
||||||
ctx.textAlign = "left";
|
let letters = [ "A", "B", "C", "D", "E", "F", "G", "H", "I"];
|
||||||
ctx.fillText(message, gui_margin.t, height - gui_margin.t);
|
let numbers = [ "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
||||||
}
|
|
||||||
|
|
||||||
// Draw tile numbers
|
if((INTERFACE_DATA.player & 1) ^ INTERFACE_DATA.rotate != 0) {
|
||||||
let letters = [ "A", "B", "C", "D", "E", "F", "G", "H", "I"];
|
letters.reverse();
|
||||||
let numbers = [ "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
numbers.reverse();
|
||||||
|
}
|
||||||
|
|
||||||
if((INTERFACE_DATA.player & 1) ^ INTERFACE_DATA.rotate != 0) {
|
ctx.fillStyle = INTERFACE.Color.TextDark;
|
||||||
letters.reverse();
|
ctx.textBaseline = "top";
|
||||||
numbers.reverse();
|
ctx.textAlign = "center";
|
||||||
}
|
for(let i = 0; i < 5; ++i) {
|
||||||
|
let x = basis_x + (1.5 * radius * i);
|
||||||
|
let y = basis_y + (gui_scale * (1.1 + i));
|
||||||
|
ctx.fillText(letters[i], x, y);
|
||||||
|
}
|
||||||
|
for(let i = 0; i < 4; ++i) {
|
||||||
|
let x = basis_x + (1.5 * radius * (5 + i));
|
||||||
|
let y = basis_y + (gui_scale * (4.15 - i));
|
||||||
|
ctx.fillText(letters[i + 5], x, y);
|
||||||
|
}
|
||||||
|
|
||||||
ctx.fillStyle = INTERFACE.Color.TextDark;
|
let number_offset_x = -1.15 * radius;
|
||||||
ctx.textBaseline = "top";
|
let number_offset_y = -0.75 * gui_scale;
|
||||||
ctx.textAlign = "center";
|
|
||||||
for(let i = 0; i < 5; ++i) {
|
|
||||||
let x = basis_x + (1.5 * radius * i);
|
|
||||||
let y = basis_y + (gui_scale * (1.1 + i));
|
|
||||||
ctx.fillText(letters[i], x, y);
|
|
||||||
}
|
|
||||||
for(let i = 0; i < 4; ++i) {
|
|
||||||
let x = basis_x + (1.5 * radius * (5 + i));
|
|
||||||
let y = basis_y + (gui_scale * (4.15 - i));
|
|
||||||
ctx.fillText(letters[i + 5], x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
let number_offset_x = -1.15 * radius;
|
ctx.textAlign = "center";
|
||||||
let number_offset_y = -0.75 * gui_scale;
|
for(let i = 0; i < 5; ++i) {
|
||||||
|
let y = basis_y - (gui_scale * 2 * i);
|
||||||
|
|
||||||
ctx.textAlign = "center";
|
ctx.save();
|
||||||
for(let i = 0; i < 5; ++i) {
|
ctx.translate(basis_x + number_offset_x, y + number_offset_y);
|
||||||
let y = basis_y - (gui_scale * 2 * i);
|
ctx.rotate(-Math.PI / 3);
|
||||||
|
ctx.fillText(numbers[i], 0, 0);
|
||||||
|
ctx.restore();
|
||||||
|
}
|
||||||
|
for(let i = 0; i < 4; ++i) {
|
||||||
|
let x = basis_x + (1.5 * radius * (1 + i));
|
||||||
|
let y = basis_y - (gui_scale * (9 + i));
|
||||||
|
|
||||||
ctx.save();
|
ctx.save();
|
||||||
ctx.translate(basis_x + number_offset_x, y + number_offset_y);
|
ctx.translate(x + number_offset_x, y + number_offset_y);
|
||||||
ctx.rotate(-Math.PI / 3);
|
ctx.rotate(-Math.PI / 3);
|
||||||
ctx.fillText(numbers[i], 0, 0);
|
ctx.fillText(numbers[i + 5], 0, 0);
|
||||||
ctx.restore();
|
ctx.restore();
|
||||||
}
|
}
|
||||||
for(let i = 0; i < 4; ++i) {
|
|
||||||
let x = basis_x + (1.5 * radius * (1 + i));
|
|
||||||
let y = basis_y - (gui_scale * (9 + i));
|
|
||||||
|
|
||||||
ctx.save();
|
|
||||||
ctx.translate(x + number_offset_x, y + number_offset_y);
|
|
||||||
ctx.rotate(-Math.PI / 3);
|
|
||||||
ctx.fillText(numbers[i + 5], 0, 0);
|
|
||||||
ctx.restore();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1028,6 +1119,8 @@ const INTERFACE = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hints(piece) {
|
hints(piece) {
|
||||||
|
if(INTERFACE.Config.DisableHint) { return; }
|
||||||
|
|
||||||
let scale = 0.92 * this.scale;
|
let scale = 0.92 * this.scale;
|
||||||
let half_scale = scale * 0.5;
|
let half_scale = scale * 0.5;
|
||||||
|
|
||||||
@ -2044,6 +2137,7 @@ INTERFACE.TileScale = 0.9;
|
|||||||
INTERFACE.Radius = 2.0 / Math.sqrt(3.0);
|
INTERFACE.Radius = 2.0 / Math.sqrt(3.0);
|
||||||
INTERFACE.HalfRadius = 1.0 / Math.sqrt(3.0);
|
INTERFACE.HalfRadius = 1.0 / Math.sqrt(3.0);
|
||||||
INTERFACE.Scale = 1 / 18;
|
INTERFACE.Scale = 1 / 18;
|
||||||
|
INTERFACE.BoardRatio = (14 * INTERFACE.Radius) * INTERFACE.Scale;
|
||||||
INTERFACE.Ratio = (19 * INTERFACE.Radius) * INTERFACE.Scale;
|
INTERFACE.Ratio = (19 * INTERFACE.Radius) * INTERFACE.Scale;
|
||||||
INTERFACE.HexVertex = [
|
INTERFACE.HexVertex = [
|
||||||
// top face
|
// top face
|
||||||
|
Loading…
x
Reference in New Issue
Block a user