// Game logic on a variant page
Vue.component('my-game', {
+ props: ["problem"],
data: function() {
return {
vr: null, //object to check moves, store them, FEN..
sound: parseInt(getCookie("sound", "2")),
};
},
+ watch: {
+ problem: function(p, pp) {
+ // 'problem' prop changed: update board state
+ // TODO: FEN + turn + flags + rappel instructions / solution on click sous l'échiquier
+ // TODO: trouver moyen de passer la situation des reserves pour Crazyhouse,
+ // et l'état des captures pour Grand... bref compléter le descriptif de l'état.
+ this.newGame("problem", p.fen, p.fen.split(" ")[2]);
+ },
+ },
render(h) {
- const [sizeX,sizeY] = VariantRules.size;
+ const [sizeX,sizeY] = [V.size.x,V.size.y];
const smallScreen = (window.innerWidth <= 420);
// Precompute hints squares to facilitate rendering
let hintSquares = doubleArray(sizeX, sizeY, false);
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-eog" },
+ attrs: { "role": "dialog", "aria-labelledby": "eogMessage" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "eogMessage" },
"class": { "section": true },
domProps: { innerHTML: eogMessage },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-newgame" },
+ attrs: { "role": "dialog", "aria-labelledby": "newGameTxt" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "newGameTxt" },
"class": { "section": true },
domProps: { innerHTML: "New game" },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-fenedit" },
+ attrs: { "role": "dialog", "aria-labelledby": "titleFenedit" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "titleFenedit" },
"class": { "section": true },
domProps: { innerHTML: "Position + flags (FEN):" },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-settings" },
+ attrs: { "role": "dialog", "aria-labelledby": "settingsTitle" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "settingsTitle" },
"class": { "section": true },
domProps: { innerHTML: "Preferences" },
}
{
const storageVariant = localStorage.getItem("variant");
if (!!storageVariant && storageVariant !== variant)
- {
- alert("Finish your " + storageVariant + " game first!");
- return;
- }
+ return alert("Finish your " + storageVariant + " game first!");
// Send game request and wait..
localStorage["newgame"] = variant;
this.seek = true;
if (this.mycolor == 'b')
setTimeout(this.playComputerMove, 500);
}
- //else: against a (IRL) friend: nothing more to do
+ //else: against a (IRL) friend or problem solving: nothing more to do
},
playComputerMove: function() {
const timeStart = Date.now();
const compMove = this.vr.getComputerMove();
// (first move) HACK: avoid selecting elements before they appear on page:
const delay = Math.max(500-(Date.now()-timeStart), 0);
- setTimeout(() => this.play(compMove, "animate"), delay);
+ setTimeout(() => {
+ if (this.mode == "computer") //Warning: mode could have changed!
+ this.play(compMove, "animate")
+ }, delay);
},
// Get the identifier of a HTML table cell from its numeric coordinates o.x,o.y.
getSquareId: function(o) {
this.selectedPiece.style.display = "inline-block";
this.selectedPiece.style.zIndex = 3000;
let startSquare = this.getSquareFromId(e.target.parentNode.id);
- const iCanPlay = this.mode!="idle"
- && (this.mode=="friend" || this.vr.canIplay(this.mycolor,startSquare));
+ const iCanPlay = this.mode!="idle" &&
+ (["friend","problem"].includes(this.mode) ||
+ this.vr.canIplay(this.mycolor,startSquare));
this.possibleMoves = iCanPlay ? this.vr.getPossibleMovesFrom(startSquare) : [];
// Next line add moving piece just after current image
// (required for Crazyhouse reserve)