button(@click="abortGame") {{ st.tr["Game is too boring"] }}
BaseGame(:game="game" :vr="vr" ref="basegame"
@newmove="processMove" @gameover="gameOver")
- textarea#mvMessage(v-if="game.type=='corr'" v-model="corrMsg")
div Names: {{ game.players[0].name }} - {{ game.players[1].name }}
- div Time: {{ virtualClocks[0] }} - {{ virtualClocks[1] }}
+ div(v-if="game.score=='*'") Time: {{ virtualClocks[0] }} - {{ virtualClocks[1] }}
.button-group(v-if="game.mode!='analyze' && game.score=='*'")
button(@click="offerDraw") Draw
button(@click="() => abortGame()") Abort
button(@click="resign") Resign
- div(v-if="game.type=='corr'")
- textarea(v-show="score=='*' && vr.turn==game.mycolor" v-model="corrMsg")
- div(v-show="cursor>=0") {{ moves[cursor].message }}
+ textarea(v-if="game.score=='*'" v-model="corrMsg")
+ Chat(:players="game.players")
</template>
<!--
-// TODO: movelist dans basegame et chat ici
// ==> après, implémenter/vérifier les passages de challenges + parties en cours
// observer,
-// + problèmes, habiller et publier. (+ corr...)
-// when send to chat (or a move), reach only this group (send gid along)
-->
<script>
import BaseGame from "@/components/BaseGame.vue";
-//import Chat from "@/components/Chat.vue";
-//import MoveList from "@/components/MoveList.vue";
+import Chat from "@/components/Chat.vue";
import { store } from "@/store";
import { GameStorage } from "@/utils/gameStorage";
import { ppt } from "@/utils/datetime";
name: 'my-game',
components: {
BaseGame,
+ Chat,
},
// gameRef: to find the game in (potentially remote) storage
data: function() {
this.gameRef.rid = this.$route.query["rid"];
this.loadGame();
}
+ // TODO: mode analyse (/analyze/Atomic/rn
+ // ... fen = query[], vname=params[] ...
// 0.1] Ask server for room composition:
const funcPollClients = () => {
this.st.conn.send(JSON.stringify({code:"pollclients"}));
case "identity":
{
let player = this.people.find(p => p.sid == data.user.sid);
+ // NOTE: sometimes player.id fails because player is undefined...
+ // Probably because the event was meant for Hall?
+ if (!player)
+ return;
player.id = data.user.id;
player.name = data.user.name;
// Sending last state only for live games: corr games are complete
}
break;
}
+ case "askgame":
+ // Send current (live) game
+ const myGame =
+ {
+ // Minimal game informations:
+ id: this.game.id,
+ players: this.game.players.map(p => p.name),
+ vid: this.game.vid,
+ timeControl: this.game.timeControl,
+ };
+ this.st.conn.send(JSON.stringify({code:"game",
+ game:myGame, target:data.from}));
+ break;
case "newmove":
// NOTE: this call to play() will trigger processMove()
this.$refs["basegame"].play(data.move,
// ==> on "newmove", check "drawOffer" field
case "connect":
{
- this.people.push({name:"", id:0, sid:data.sid});
- this.st.conn.send(JSON.stringify({code:"askidentity", target:data.sid}));
+ this.people.push({name:"", id:0, sid:data.from});
+ this.st.conn.send(JSON.stringify({code:"askidentity", target:data.from}));
break;
}
case "disconnect":
- ArrayFun.remove(this.people, p => p.sid == data.sid);
+ ArrayFun.remove(this.people, p => p.sid == data.from);
break;
}
},