139 lines
3.1 KiB
JavaScript
Raw Normal View History

2021-06-21 12:59:32 +02:00
var socket = new WebSocket('ws://localhost:2667');
var events = {
outgoing: {
JOIN_GAME: 'csJoinGame',
MARK: 'csMark',
QUIT: 'csQuit'
},
incoming: {
JOIN_GAME: 'scJoinGame',
MARK: 'scMark',
SET_TURN: 'scSetTurn',
OPPONENT_READY: 'scOpponentReady',
GAME_OVER: 'scGameOver',
ERROR: 'scError',
QUIT: 'scQuit'
}
};
2021-06-14 16:56:35 +02:00
// container creates the startBtn
var container = document.querySelector('#gameBoard');
var startBtn = document.querySelector('#startBtn');
var nameInput = document.querySelector('#nickname');
var scoreBoard = [
document.querySelector('#p1Score'),
document.querySelector('#p2Score')
];
var hero = {};
var board = new Board(scoreBoard);
2021-06-14 16:56:35 +02:00
// disable startBtn and nameInput before website finished loading
startBtn.setAttribute('disabled', true);
nameInput.setAttribute('disabled', true);
nameInput.setAttribute('placeholder', 'Loading...');
/**
*
* @param action
* @param data
2021-06-18 14:53:55 +02:00
* @returns {*}
*/
function makeMessage(action, data){
var resp = {
action: action,
data: data
};
return JSON.stringify(resp);
}
/**
*
2021-06-14 16:56:35 +02:00
* @param cupId
*/
2021-06-14 16:56:35 +02:00
board.onMark = function(cupId){
socket.send(makeMessage(events.outgoing.MARK, {playerId: hero.id, cupId: cupId}));
};
/**
*
*/
function start() {
while (container.lastChild) {
container.removeChild(container.lastChild);
}
if (board.players.length === 1) {
scoreBoard[1].textContent = 'waiting...';
}
}
2021-06-14 16:56:35 +02:00
// if startBtn is pressed
startBtn.addEventListener('click', function(event) {
var name = nameInput.value.trim();
if (name.length > 0) {
hero.name = name;
socket.send(makeMessage(events.outgoing.JOIN_GAME, name));
}
});
socket.onmessage = function(event){
var msg = JSON.parse(event.data);
switch (msg.action) {
case events.incoming.ERROR:
2021-06-18 16:06:24 +02:00
alert('Errorrr: ' + msg.data);
break;
case events.incoming.JOIN_GAME:
board.addPlayer(msg.data);
if (msg.data.name === hero.name) {
hero = msg.data;
start();
}
break;
case events.incoming.SET_TURN:
2021-06-14 16:56:35 +02:00
// change Scoreboard
board.highlightScoreboard(msg.data.id);
board.ready = true;
if (msg.data.id === hero.id) {
2021-06-14 16:56:35 +02:00
// remove opponent cups
board.enableTurn();
}
break;
case events.incoming.MARK:
2021-06-14 16:56:35 +02:00
board.doMark(msg.data.cupId, msg.data.player.label);
break;
case events.incoming.GAME_OVER:
if (msg.data.player) {
board.doWinner();
}
socket.send(makeMessage(events.outgoing.QUIT, hero.id));
break;
case events.incoming.QUIT:
2021-06-14 16:56:35 +02:00
// close
socket.close();
break;
}
};
2021-06-14 16:56:35 +02:00
// if socket is open, show startBtn and nameInput
socket.onopen = function(event) {
startBtn.removeAttribute('disabled');
nameInput.removeAttribute('disabled');
nameInput.removeAttribute('placeholder');
nameInput.focus();
};