statki/public/assets/js/socket.js
MaciejkaG a027313139 Major changes
- Multiple visual improvements to animation
- Added ship color dimming when they sunk
- Added game ending (looks and works primitvely for now)
- Added socket.io client error handling and alerts
- Finished and improved hit registration and client hit display

To-do:
- Fix timers (currently resetting the timer is global, which by mistake affects other independent lobbies, critical bug)
- Post-match stats
- Improve many mechanics
- Improve overall quality of the game
2024-03-08 19:18:53 +01:00

121 lines
3.2 KiB
JavaScript

const socket = io();
// Handling server-sent events
socket.on("joined", (nick) => {
lockUI(true);
$("#oppNameField").html(nick);
switchView("preparingGame");
lockUI(false);
});
socket.on("player left", () => {
lockUI(true);
switchView("mainMenuView");
lockUI(false);
});
socket.on("gameReady", (gameId) => {
setTimeout(() => {
window.location.replace("/game?id=" + gameId);
}, 2000);
});
var nickname;
socket.emit("whats my nick", (myNickname) => {
nickname = myNickname;
});
socket.on("game start", (gameInfo) => {
let opp;
if (gameInfo.players[0]!==nickname) {
opp = gameInfo.players[0];
} else {
opp = gameInfo.players[1];
}
alert(`Grasz przeciwko: ${opp}`);
});
$("#createGameButton").on("click", function () {
lockUI(true);
socket.emit("create lobby", (response) => {
switch (response.status) {
case "ok":
$("#createGameCode").val(response.gameCode);
switchView("pvpCreateView");
lockUI(false);
break;
case "alreadyInLobby":
$("#createGameCode").val(response.gameCode);
switchView("pvpCreateView");
lockUI(false);
break;
default:
alert(`Wystąpił nieznany problem\nStatus: ${response.status}`);
lockUI(false);
break;
}
});
});
$("#leaveGameButton").on("click", function () {
lockUI(true);
socket.emit("leave lobby", (response) => {
switch (response.status) {
case "ok":
switchView("mainMenuView");
lockUI(false);
break;
case "youreNotInLobby":
switchView("mainMenuView");
lockUI(false);
break;
default:
alert(`Wystąpił nieznany problem\nStatus: ${response.status}`);
switchView("mainMenuView");
lockUI(false);
break;
}
});
});
$("#pvpMenuButton").on("click", function () {
switchView('pvpMenuView');
});
const form = document.getElementById('pvpJoinForm');
const input = document.getElementById('pvpJoinCode');
form.addEventListener('submit', (e) => {
e.preventDefault();
if (input.value && input.value.length === 6) {
lockUI(true);
socket.emit("join lobby", input.value, (response) => {
switch (response.status) {
case "ok":
$("#oppNameField").html(response.oppNickname);
switchView("preparingGame");
lockUI(false);
break;
//case "alreadyInLobby":
// $("#createGameCode").val(response.gameCode);
// switchView("pvpCreateView");
// lockUI(false);
// break;
default:
alert(`Wystąpił nieznany problem\nStatus: ${response.status}`);
lockUI(false);
switchView("mainMenuView");
break;
}
});
input.value = '';
}
});