"tooltip": true,
"play": true,
"seek": this.seek,
- "playing": this.mode == "human",
+ "playing": this.mode == "human" && this.score == "*",
},
},
[h('i', { 'class': { "material-icons": true } }, "accessibility")])
'class': {
"tooltip":true,
"play": true,
- "playing": this.mode == "computer",
+ "playing": this.mode == "computer" && this.score == "*",
"spaceleft": true,
},
},
actionArray
);
elementArray.push(actions);
- if (this.score != "*" && this.pgnTxt.length > 0)
- {
- elementArray.push(
- h('div',
- {
- attrs: { id: "pgn-div" },
- "class": { "section-content": true },
- },
- [
- h('a',
- {
- attrs: {
- id: "download",
- href: "#",
- }
- }
- ),
- h('p',
- {
- attrs: { id: "pgn-game" },
- domProps: { innerHTML: this.pgnTxt }
- }
- ),
- h('button',
- {
- attrs: { "id": "downloadBtn" },
- on: { click: this.download },
- domProps: { innerHTML: translations["Download game"] },
- }
- ),
- ]
- )
- );
- }
- else if (this.mode != "idle")
+ if (!!this.vr)
{
if (this.mode == "problem")
{
)
);
}
+ elementArray.push(
+ h('div',
+ {
+ attrs: { id: "pgn-div" },
+ "class": { "section-content": true },
+ },
+ [
+ h('a',
+ {
+ attrs: {
+ id: "download",
+ href: "#",
+ }
+ }
+ ),
+ h('button',
+ {
+ attrs: { "id": "downloadBtn" },
+ on: { click: this.download },
+ domProps: { innerHTML: translations["Download PGN"] },
+ }
+ ),
+ ]
+ )
+ );
}
return h(
'div',
};
const socketMessageListener = msg => {
const data = JSON.parse(msg.data);
- const L = (!!this.vr ? this.vr.moves.length : 0);
+ let L = undefined;
switch (data.code)
{
case "oppname":
break;
case "newgame": //opponent found
// oppid: opponent socket ID
- this.newGame("human", data.fen, data.color, data.oppid);
+ this.newGame("human", data.fen, data.color, data.oppid, data.gameid);
break;
case "newmove": //..he played!
this.play(data.move, (variant!="Dark" ? "animate" : null));
break; //games IDs don't match: definitely over...
this.oppConnected = true;
// Send our "last state" informations to opponent
+ L = this.vr.moves.length;
this.conn.send(JSON.stringify({
code: "lastate",
oppid: this.oppid,
}));
break;
case "lastate": //got opponent infos about last move
+ L = this.vr.moves.length;
if (this.gameId != data.gameId)
break; //games IDs don't match: nothing we can do...
// OK, opponent still in game (which might be over)
- if (this.mode != "human")
+ if (this.score != "*")
{
// We finished the game (any result possible)
this.conn.send(JSON.stringify({
this.conn.send(JSON.stringify({
code: "lastate",
oppid: this.oppid,
+ gameId: this.gameId,
lastMove: this.vr.moves[L-1],
movesCount: L,
}));
: "none";
},
download: function() {
- let content = document.getElementById("pgn-game").innerHTML;
- content = content.replace(/<br>/g, "\n");
+ // Variants may have special PGN structure (so next function isn't defined here)
+ const content = this.vr.getPGN(this.mycolor, this.score, this.fenStart, this.mode);
// Prepare and trigger download link
let downloadAnchor = document.getElementById("download");
downloadAnchor.setAttribute("download", "game.pgn");
- downloadAnchor.href = "data:text/plain;charset=utf-8," +
- encodeURIComponent(content);
+ downloadAnchor.href = "data:text/plain;charset=utf-8," + encodeURIComponent(content);
downloadAnchor.click();
},
showScoreMsg: function() {
localStorage.setItem(prefix+"score", score);
}
this.showScoreMsg();
- // Variants may have special PGN structure (so next function isn't defined here)
- this.pgnTxt = this.vr.getPGN(this.mycolor, this.score, this.fenStart, this.mode);
if (this.mode == "human" && this.oppConnected)
{
// Send our nickname to opponent
}
this.endGame(this.mycolor=="w"?"0-1":"1-0");
},
- newGame: function(mode, fenInit, color, oppId) {
+ newGame: function(mode, fenInit, color, oppId, gameId) {
const fen = fenInit || VariantRules.GenRandInitFen();
console.log(fen); //DEBUG
if (mode=="human" && !oppId)
}
// Send game request and wait..
try {
- this.conn.send(JSON.stringify({code:"newgame", fen:fen}));
+ this.conn.send(JSON.stringify({code:"newgame", fen:fen, gameid: getRandString() }));
} catch (INVALID_STATE_ERR) {
return; //nothing achieved
}
this.mode = mode;
this.incheck = [];
this.fenStart = V.ParseFen(fen).position; //this is enough
- if (mode != "problem")
- this.setStorage(); //store game state in case of interruptions
if (mode=="human")
{
// Opponent found!
- this.gameId = getRandString();
+ this.gameId = gameId;
this.oppid = oppId;
this.oppConnected = true;
this.mycolor = color;
else if (mode == "friend")
this.mycolor = "w"; //convention...
//else: problem solving: nothing more to do
+ if (mode != "problem")
+ this.setStorage(); //store game state in case of interruptions
},
continueGame: function(mode) {
this.mode = mode;