Initial commit, woeking client/server connection, player movement
This commit is contained in:
178
client/static/assets/bundle.js
Normal file
178
client/static/assets/bundle.js
Normal file
@@ -0,0 +1,178 @@
|
||||
"use strict";
|
||||
var canvas;
|
||||
var tileTypes, mapTiles = [];
|
||||
var PLAYER_SPEED = 10;
|
||||
var Player = {
|
||||
id: '',
|
||||
name: '',
|
||||
position: { x: 0, y: 0 },
|
||||
color: '#' + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16) + (Math.floor(Math.random() * 256)).toString(16),
|
||||
keysPressed: [],
|
||||
};
|
||||
var OtherPlayers = [];
|
||||
var KEY_W = 87;
|
||||
var KEY_A = 65;
|
||||
var KEY_S = 83;
|
||||
var KEY_D = 68;
|
||||
var grassImage;
|
||||
function preload() {
|
||||
grassImage = loadImage('grass.png');
|
||||
}
|
||||
function onKeyDown(e) {
|
||||
Player.keysPressed[e.keyCode] = true;
|
||||
}
|
||||
function onKeyUp(e) {
|
||||
Player.keysPressed[e.keyCode] = false;
|
||||
}
|
||||
function onContextMenu() {
|
||||
Player.keysPressed = [];
|
||||
}
|
||||
function onCanvasResize() {
|
||||
var w = window.innerWidth;
|
||||
var h = window.innerHeight;
|
||||
var scale = 16 / 9;
|
||||
var windowScale = w / h;
|
||||
if (scale > windowScale) {
|
||||
canvas.style.width = w + 'px';
|
||||
canvas.style.height = (w / 16 * 9) + 'px';
|
||||
}
|
||||
else {
|
||||
canvas.style.width = (h / 9 * 16) + 'px';
|
||||
canvas.style.height = h + 'px';
|
||||
}
|
||||
}
|
||||
function drawPlayer(player, x, y) {
|
||||
stroke(0, 0, 0);
|
||||
strokeWeight(5);
|
||||
fill(player.color);
|
||||
ellipse(x, y, 80, 80);
|
||||
textSize(32);
|
||||
fill(255, 255, 255);
|
||||
textAlign(CENTER, CENTER);
|
||||
text(player.name, x - 300, y - 100, 600, 50);
|
||||
}
|
||||
function relativePosition(pos1, pos2) {
|
||||
return {
|
||||
x: pos2.x - pos1.x,
|
||||
y: pos2.y - pos1.y,
|
||||
};
|
||||
}
|
||||
function buildMap() {
|
||||
tileTypes = {
|
||||
grass: {
|
||||
image: grassImage
|
||||
}
|
||||
};
|
||||
for (var x = 0; x < 10; x++) {
|
||||
mapTiles[x] = [];
|
||||
for (var y = 0; y < 6; y++) {
|
||||
mapTiles[x][y] = {
|
||||
tile: tileTypes.grass.image,
|
||||
x: x * 380,
|
||||
y: y * 380,
|
||||
};
|
||||
}
|
||||
}
|
||||
console.log(mapTiles);
|
||||
}
|
||||
function isVisible(middlePoint, visibleAreaSize, position, size) {
|
||||
if (position.x - size.width > middlePoint.x - visibleAreaSize.width / 2 &&
|
||||
position.x + size.width < middlePoint.x + visibleAreaSize.width / 2 &&
|
||||
position.y - size.height > middlePoint.y - visibleAreaSize.height / 2 &&
|
||||
position.y + size.height < middlePoint.y + visibleAreaSize.height / 2) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function distance(p1, p2) {
|
||||
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
|
||||
}
|
||||
function drawMap() {
|
||||
for (var _i = 0, mapTiles_1 = mapTiles; _i < mapTiles_1.length; _i++) {
|
||||
var xTiles = mapTiles_1[_i];
|
||||
for (var _a = 0, xTiles_1 = xTiles; _a < xTiles_1.length; _a++) {
|
||||
var yTile = xTiles_1[_a];
|
||||
if (distance(Player.position, { x: yTile.x, y: yTile.y }) < 2000) {
|
||||
image(yTile.tile, yTile.x + width / 2, yTile.y + height / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function setup() {
|
||||
buildMap();
|
||||
createCanvas(1920, 1080);
|
||||
canvas = document.querySelector('canvas');
|
||||
onCanvasResize();
|
||||
window.addEventListener('resize', onCanvasResize);
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
document.addEventListener('keyup', onKeyUp);
|
||||
document.addEventListener("contextmenu", onContextMenu);
|
||||
}
|
||||
function draw() {
|
||||
translate(-Player.position.x, Player.position.y);
|
||||
drawMap();
|
||||
for (var _i = 0, OtherPlayers_1 = OtherPlayers; _i < OtherPlayers_1.length; _i++) {
|
||||
var otherPlayer = OtherPlayers_1[_i];
|
||||
drawPlayer(otherPlayer, otherPlayer.position.x + width / 2, -otherPlayer.position.y + height / 2);
|
||||
}
|
||||
translate(Player.position.x, -Player.position.y);
|
||||
drawPlayer(Player, width / 2, height / 2);
|
||||
text(Math.floor(Player.position.x) + ':' + Math.floor(Player.position.y), width / 2, 50);
|
||||
var previousPosition = {
|
||||
x: Player.position.x,
|
||||
y: Player.position.y,
|
||||
};
|
||||
if (Player.keysPressed[KEY_A]) {
|
||||
Player.position.x -= PLAYER_SPEED;
|
||||
}
|
||||
if (Player.keysPressed[KEY_D]) {
|
||||
Player.position.x += PLAYER_SPEED;
|
||||
}
|
||||
if (Player.keysPressed[KEY_W]) {
|
||||
Player.position.y += PLAYER_SPEED;
|
||||
}
|
||||
if (Player.keysPressed[KEY_S]) {
|
||||
Player.position.y -= PLAYER_SPEED;
|
||||
}
|
||||
if (Player.position.x !== previousPosition.x || Player.position.y !== previousPosition.y) {
|
||||
socket.emit('i-moved', { x: Player.position.x, y: Player.position.y });
|
||||
}
|
||||
}
|
||||
socket.on('your-info', function (playerData) {
|
||||
Player.name = playerData.name;
|
||||
Player.position = playerData.position;
|
||||
Player.color = playerData.color;
|
||||
Player.id = playerData.id;
|
||||
});
|
||||
socket.on('players-info', function (playersData) {
|
||||
for (var _i = 0, playersData_1 = playersData; _i < playersData_1.length; _i++) {
|
||||
var playerData = playersData_1[_i];
|
||||
if (Player.id !== playerData.id) {
|
||||
OtherPlayers.push({
|
||||
name: playerData.name,
|
||||
position: playerData.position,
|
||||
color: playerData.color,
|
||||
id: playerData.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
socket.on('new-player-joined', function (playerData) {
|
||||
if (Player.id !== playerData.id) {
|
||||
OtherPlayers.push({
|
||||
name: playerData.name,
|
||||
position: playerData.position,
|
||||
color: playerData.color,
|
||||
id: playerData.id,
|
||||
});
|
||||
}
|
||||
});
|
||||
socket.on('player-moved', function (movedPlayerData) {
|
||||
for (var _i = 0, OtherPlayers_2 = OtherPlayers; _i < OtherPlayers_2.length; _i++) {
|
||||
var playerData = OtherPlayers_2[_i];
|
||||
if (Player.id !== movedPlayerData.id && movedPlayerData.id === playerData.id) {
|
||||
playerData.position = movedPlayerData.position;
|
||||
}
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=bundle.js.map
|
||||
1
client/static/assets/bundle.js.map
Normal file
1
client/static/assets/bundle.js.map
Normal file
File diff suppressed because one or more lines are too long
BIN
client/static/assets/grass.png
Normal file
BIN
client/static/assets/grass.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.9 KiB |
BIN
client/static/assets/p5js/.DS_Store
vendored
Normal file
BIN
client/static/assets/p5js/.DS_Store
vendored
Normal file
Binary file not shown.
66
client/static/assets/p5js/README.txt
Normal file
66
client/static/assets/p5js/README.txt
Normal file
@@ -0,0 +1,66 @@
|
||||
# Welcome to p5.js
|
||||
|
||||
You have downloaded the complete p5.js library ZIP file, yay!
|
||||
|
||||
# Contents of the p5 folder
|
||||
|
||||
* p5.js file
|
||||
* p5.min.js file
|
||||
* addons folder
|
||||
* p5.sound.js
|
||||
* p5.sound.min.js
|
||||
* empty-example folder
|
||||
* index.html
|
||||
* p5.js
|
||||
* p5.sound.js
|
||||
* sketch.js
|
||||
|
||||
## p5.js
|
||||
|
||||
This file stores the complete p5.js library. It is easy to read by humans, so feel free to open it and explore its contents. It also has a friendly error system, which helps new programmers with common user errors.
|
||||
|
||||
## p5.min.js
|
||||
|
||||
This file is a minified version of the p5.js file. It is a lighter version, with the same functionalities, but smaller file size. This minified version is harder to read for humans, and does not include the friendly error system.
|
||||
|
||||
## addons folder
|
||||
|
||||
The addons folder includes additional p5.js related libraries, in both original versions and minified versions.
|
||||
|
||||
### p5.sound.js, p5.sound.min.js
|
||||
|
||||
p5.sound extends p5.js with Web Audio functionality including audio input, playback, analysis, and synthesis.
|
||||
|
||||
## empty-example folder
|
||||
|
||||
This is an empty example of a website. The folder includes the file for the website, index.html, the p5.js library, other related p5.js libraries, and a template starting point for your p5.js sketch, called sketch.js.
|
||||
|
||||
### index.html
|
||||
|
||||
index.html is a template for an HTML file. This index.html first imports the libraries included in the folder (p5.js, p5.sound.js) then loads and executes the file sketch.js which is where you can write your own code.
|
||||
|
||||
### sketch.js
|
||||
|
||||
The sketch.js is a template for the p5.js sketch, with the functions setup() and draw() that you can complete.
|
||||
|
||||
## README.txt
|
||||
|
||||
This README file formatted with Markdown :)
|
||||
|
||||
# What's next?
|
||||
|
||||
If you need more information to help get you started, please refer to our website:
|
||||
https://p5js.org/get-started/ and https://p5js.org/learn/
|
||||
|
||||
An online reference to the p5.js library is available here:
|
||||
https://p5js.org/reference/
|
||||
|
||||
In order to run your website (including the empty-example), you need to enable a local server, please see this tutorial in our wiki:
|
||||
https://github.com/processing/p5.js/wiki/Local-server
|
||||
|
||||
p5.js is a community and p5.js is built by contributions. If you want to learn more about us, visit:
|
||||
https://p5js.org/community/
|
||||
|
||||
# License
|
||||
|
||||
The p5.js library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 2.1.
|
||||
11834
client/static/assets/p5js/addons/p5.sound.js
Normal file
11834
client/static/assets/p5js/addons/p5.sound.js
Normal file
File diff suppressed because one or more lines are too long
3
client/static/assets/p5js/addons/p5.sound.min.js
vendored
Normal file
3
client/static/assets/p5js/addons/p5.sound.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
95702
client/static/assets/p5js/p5.js
Normal file
95702
client/static/assets/p5js/p5.js
Normal file
File diff suppressed because one or more lines are too long
3
client/static/assets/p5js/p5.min.js
vendored
Normal file
3
client/static/assets/p5js/p5.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
client/static/assets/socket.io.min.js
vendored
Normal file
7
client/static/assets/socket.io.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
client/static/assets/socket.io.min.js.map
Normal file
1
client/static/assets/socket.io.min.js.map
Normal file
File diff suppressed because one or more lines are too long
17
client/static/assets/style.css
Normal file
17
client/static/assets/style.css
Normal file
@@ -0,0 +1,17 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #000000;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
19
client/static/index.html
Normal file
19
client/static/index.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
<title>Blobby Strike</title>
|
||||
<link rel="stylesheet" type="text/css" href="./style.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="./socket.io.min.js"></script>
|
||||
<script>
|
||||
const socket = io("https://blobbystrike.ioi.lt", {secure: true});
|
||||
</script>
|
||||
<script src="./p5js/p5.min.js"></script>
|
||||
<script src="./bundle.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user