papercats/client.js

100 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-03-04 07:25:32 -05:00
window.$ = window.jQuery = require("jquery");
2020-07-24 03:11:35 -04:00
const io = require("socket.io-client");
const client = require("./src/game-client");
2019-11-30 00:25:14 -05:00
2019-11-30 03:58:13 -05:00
function run(flag) {
2019-11-30 00:25:14 -05:00
client.renderer = flag ? require("./src/mode/god") : require("./src/mode/player");
2020-03-04 07:07:38 -05:00
client.connectGame("//" + location.host, $("#name").val(), (success, msg) => {
2019-11-30 00:25:14 -05:00
if (success) {
$("#main-ui").fadeIn(1000);
$("#begin, #wasted").fadeOut(1000);
}
else {
$("#error").text(msg);
}
}, flag);
}
2020-12-09 10:45:41 -05:00
$(() => {
2020-07-24 03:11:35 -04:00
const err = $("#error");
2019-11-30 00:25:14 -05:00
if (!window.WebSocket) {
err.text("Your browser does not support WebSockets!");
return;
}
err.text("Loading... Please wait"); //TODO: show loading screen
2020-03-04 07:07:38 -05:00
(() => {
2020-07-24 03:11:35 -04:00
const socket = io(`//${location.host}`, {
2019-11-30 00:25:14 -05:00
forceNew: true,
upgrade: false,
transports: ["websocket"]
});
2020-03-04 07:07:38 -05:00
socket.on("connect", () => {
2019-11-30 00:25:14 -05:00
socket.emit("pings");
});
2020-03-04 07:07:38 -05:00
socket.on("pongs", () => {
2019-11-30 00:25:14 -05:00
socket.disconnect();
err.text("All done, have fun!");
2020-12-09 10:45:41 -05:00
$("#name").on("keypress", evt => {
if (evt.key === "Enter") run();
2019-11-30 00:25:14 -05:00
});
2020-12-09 10:45:41 -05:00
$(".start").removeAttr("disabled").on("click", evt => {
2019-11-30 03:58:13 -05:00
run();
2019-11-30 00:25:14 -05:00
});
2020-03-04 07:07:38 -05:00
$(".spectate").removeAttr("disabled").click(evt => {
2019-11-30 03:58:13 -05:00
run(true);
2019-11-30 00:25:14 -05:00
});
});
2020-03-04 07:07:38 -05:00
socket.on("connect_error", () => {
2019-11-30 00:25:14 -05:00
err.text("Cannot connect with server. This probably is due to misconfigured proxy server. (Try using a different browser)");
});
})();
});
//Event listeners
2020-12-09 10:45:41 -05:00
$(document).on("keydown", e => {
2020-07-24 03:11:35 -04:00
let newHeading = -1;
2020-02-03 22:08:01 -05:00
switch (e.key) {
case "w": case "ArrowUp":
newHeading = 0; break; //UP (W)
case "d": case "ArrowRight":
newHeading = 1; break; //RIGHT (D)
case "s": case "ArrowDown":
newHeading = 2; break; //DOWN (S)
case "a": case "ArrowLeft":
newHeading = 3; break; //LEFT (A)
2019-11-30 00:25:14 -05:00
default: return; //Exit handler for other keys
}
client.changeHeading(newHeading);
//e.preventDefault();
});
2020-03-04 07:07:38 -05:00
$(document).on("touchmove", e => {
2020-02-03 22:08:01 -05:00
e.preventDefault();
2019-11-30 00:25:14 -05:00
});
2020-03-04 07:07:38 -05:00
$(document).on("touchstart", e1 => {
2020-07-24 03:11:35 -04:00
const x1 = e1.targetTouches[0].pageX;
const y1 = e1.targetTouches[0].pageY;
2020-03-04 07:07:38 -05:00
$(document).one("touchend", e2 => {
2020-07-24 03:11:35 -04:00
const x2 = e2.changedTouches[0].pageX;
const y2 = e2.changedTouches[0].pageY;
const deltaX = x2 - x1;
const deltaY = y2 - y1;
let newHeading = -1;
2019-11-30 00:25:14 -05:00
if (deltaY < 0 && Math.abs(deltaY) > Math.abs(deltaX)) newHeading = 0;
else if (deltaX > 0 && Math.abs(deltaY) < deltaX) newHeading = 1;
else if (deltaY > 0 && Math.abs(deltaX) < deltaY) newHeading = 2;
else if (deltaX < 0 && Math.abs(deltaX) > Math.abs(deltaY)) newHeading = 3;
client.changeHeading(newHeading);
});
});
2020-03-04 07:07:38 -05:00
$(".menu").on("click", () => {
2019-11-30 00:25:14 -05:00
client.disconnect();
$("#main-ui, #wasted").fadeOut(1000);
$("#begin").fadeIn(1000);
});
2020-03-04 07:07:38 -05:00
$(".toggle").on("click", () => {
2019-11-30 00:25:14 -05:00
$("#settings").slideToggle();
});