218 lines
7.3 KiB
HTML
218 lines
7.3 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>MBC Bootjes</title>
|
|
<meta name="viewport" content="user-scalable=no">
|
|
</head>
|
|
<body style="position:fixed;margin:0;font-family:'GillSans','GillSansMT',Calibri,'TrebuchetMS',sans-serif;color:rgb(128,128,128);font-size:xx-large;">
|
|
<h1 style="text-align:center;width:100vw">MBC Het Groote Dok</h1>
|
|
<div id="boats"></div>
|
|
<canvas id="canvas" name="game" style="display:none"></canvas>
|
|
<div id="clientId"></div>
|
|
<script>
|
|
var clientId = -1;
|
|
var ca = document.cookie.split(';');
|
|
for (var i=0; i<ca.length; i++)
|
|
{
|
|
var c = ca[i].trim();
|
|
if (c.indexOf("clientId") == 0){
|
|
clientId = c.substring("clientId=".length, c.length);
|
|
}
|
|
}
|
|
if (clientId == -1)
|
|
{
|
|
clientId = Math.floor(Math.random() * 10000).toString();
|
|
document.cookie = "clientId=" + clientId;
|
|
}
|
|
document.getElementById("clientId").innerHTML = "client id: " + clientId;
|
|
// console.log(data);
|
|
var boatListEl = document.getElementById('boats');
|
|
var stickEl = document.getElementById('canvas');
|
|
|
|
var connection = new WebSocket('ws://' + "10.254.0.1" + ':8080/', ['mbcRcRf']);
|
|
|
|
connection.onopen = function ()
|
|
{
|
|
connection.send(clientId + ';4675;' + Math.floor(new Date().getTime()/1000.0).toString());
|
|
setTimeout(() => { connection.send(clientId + ';boats'); }, 100);
|
|
};
|
|
|
|
connection.onerror = function (error)
|
|
{
|
|
console.log('WebSocket Error ', error);
|
|
alert('WebSocket Error ', error);
|
|
|
|
//connection.onmessage({ data: "boats:50;test 1;available:164;tosti;available" })
|
|
};
|
|
|
|
connection.onmessage = function (e)
|
|
{
|
|
let data = e.data.split(':');
|
|
if (data[0] == "boats")
|
|
{
|
|
console.log("boats: ", data);
|
|
boatListEl.innerHTML = "";
|
|
stickEl.style.display = 'none';
|
|
boatListEl.style.display = 'block';
|
|
for (let boat in data)
|
|
{
|
|
boat = data[boat].split(';');
|
|
if ((boat.length == 3) && (boat[2] == 'available'))
|
|
{
|
|
console.log("render boat", boat);
|
|
let el = document.createElement("div");
|
|
el.style.textAlign = "center";
|
|
el.style.borderRadius = "10px";
|
|
el.style.backgroundColor = "#242495";
|
|
el.style.padding = "10px";
|
|
el.style.margin = "5px 25%";
|
|
el.style.color = "white";
|
|
el.style.cursor = "pointer";
|
|
el.id = "boat" + boat[0];
|
|
el.innerHTML = boat[1];
|
|
el.addEventListener('click', selectBoat);
|
|
boatListEl.appendChild(el);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
console.log('Server: ', e.data);
|
|
}
|
|
};
|
|
|
|
function selectBoat(e)
|
|
{
|
|
connection.send(clientId + ';ctrl;' + e.target.id.split('boat')[1]);
|
|
console.log('ctrl:', e.target.id.split('boat')[1]);
|
|
stickEl.style.display = 'block';
|
|
boatListEl.style.display = 'none';
|
|
}
|
|
|
|
function send(x,y,angle){
|
|
factor = (2**8-1)/400;
|
|
x = Math.round((x + 200) * factor);
|
|
y = Math.round((y + 200) * factor);
|
|
var data = clientId + ";d;" + x.toString() + "," + y.toString();
|
|
connection.send(data);
|
|
}
|
|
|
|
|
|
</script>
|
|
<script>
|
|
var canvas, ctx;
|
|
|
|
window.addEventListener('load', () => {
|
|
|
|
canvas = document.getElementById('canvas');
|
|
ctx = canvas.getContext('2d');
|
|
resize();
|
|
|
|
document.addEventListener('mousedown', startDrawing);
|
|
document.addEventListener('mouseup', stopDrawing);
|
|
document.addEventListener('mousemove', Draw);
|
|
|
|
document.addEventListener('touchstart', startDrawing);
|
|
document.addEventListener('touchend', stopDrawing);
|
|
document.addEventListener('touchcancel', stopDrawing);
|
|
document.addEventListener('touchmove', Draw);
|
|
window.addEventListener('resize', resize);
|
|
});
|
|
|
|
|
|
|
|
|
|
var width, height, radius, x_orig, y_orig;
|
|
function resize() {
|
|
width = window.innerWidth;
|
|
radius = 200;
|
|
height = radius * 4.5;
|
|
ctx.canvas.width = width;
|
|
ctx.canvas.height = height;
|
|
background();
|
|
joystick(width / 2, height / 2);
|
|
}
|
|
|
|
function background() {
|
|
x_orig = width / 2;
|
|
y_orig = height / 2;
|
|
|
|
ctx.beginPath();
|
|
ctx.arc(x_orig, y_orig, radius + 20, 0, Math.PI * 2, true);
|
|
ctx.fillStyle = '#ECE5E5';
|
|
ctx.fill();
|
|
}
|
|
|
|
function joystick(width, height) {
|
|
ctx.beginPath();
|
|
ctx.arc(width, height, radius, 0, Math.PI * 2, true);
|
|
ctx.fillStyle = '#F08080';
|
|
ctx.fill();
|
|
ctx.strokeStyle = '#F6ABAB';
|
|
ctx.lineWidth = 8;
|
|
ctx.stroke();
|
|
}
|
|
|
|
let coord = { x: 0, y: 0 };
|
|
let paint = false;
|
|
|
|
function getPosition(event) {
|
|
var mouse_x = event.clientX || event.touches[0].clientX;
|
|
var mouse_y = event.clientY || event.touches[0].clientY;
|
|
coord.x = mouse_x - canvas.offsetLeft;
|
|
coord.y = mouse_y - canvas.offsetTop;
|
|
}
|
|
|
|
function is_it_in_the_circle() {
|
|
var current_radius = Math.sqrt(Math.pow(coord.x - x_orig, 2) + Math.pow(coord.y - y_orig, 2));
|
|
if (radius >= current_radius) return true
|
|
else return false
|
|
}
|
|
|
|
|
|
function startDrawing(event) {
|
|
paint = true;
|
|
getPosition(event);
|
|
if (is_it_in_the_circle()) {
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
background();
|
|
joystick(coord.x, coord.y);
|
|
Draw();
|
|
}
|
|
}
|
|
|
|
|
|
function stopDrawing() {
|
|
paint = false;
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
background();
|
|
joystick(width / 2, height / 2);
|
|
}
|
|
|
|
function Draw(event) {
|
|
|
|
if (paint) {
|
|
getPosition(event);
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
background();
|
|
var angle_in_degrees, x, y, speed;
|
|
var angle = Math.atan2((coord.y - y_orig), (coord.x - x_orig));
|
|
|
|
if (Math.sign(angle) == -1) {
|
|
angle_in_degrees = Math.round(-angle * 180 / Math.PI);
|
|
}
|
|
else {
|
|
angle_in_degrees = Math.round(360 - angle * 180 / Math.PI);
|
|
}
|
|
|
|
x = Math.max(-radius, Math.min(radius, coord.x - x_orig));
|
|
y = Math.max(-radius, Math.min(radius, coord.y - y_orig));
|
|
joystick(x + x_orig, y + y_orig);
|
|
|
|
send(x, y, angle_in_degrees);
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|