summaryrefslogtreecommitdiff
path: root/server/Entities
diff options
context:
space:
mode:
authorjak1 <mike.wollmann@gmail.com>2021-08-01 17:02:17 +0200
committerjak1 <mike.wollmann@gmail.com>2021-08-01 17:02:17 +0200
commita8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3 (patch)
treeb3eb94b0ff4cd3792fcebb8b34e0e7192d0c7b50 /server/Entities
parentc9bdbee1b58b8530b6508ea705d5b9fd9a17f627 (diff)
downloadthepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.gz
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.bz2
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.xz
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.zip
added some more features, and fixed some bugs (was to lazy to commit every change *hides)
Diffstat (limited to 'server/Entities')
-rw-r--r--server/Entities/Bullet.js83
-rw-r--r--server/Entities/Entity.js28
-rw-r--r--server/Entities/Player.js156
3 files changed, 267 insertions, 0 deletions
diff --git a/server/Entities/Bullet.js b/server/Entities/Bullet.js
new file mode 100644
index 0000000..cb5a1a4
--- /dev/null
+++ b/server/Entities/Bullet.js
@@ -0,0 +1,83 @@
+const Entity = require('./Entity');
+const Player = require('./Player');
+
+var Bullet = function(parent, angle) {
+ var self = Entity.Entity();
+ self.id = Math.random();
+ self.speedX = Math.cos(angle/180*Math.PI) *10;
+ self.speedY = Math.sin(angle/180*Math.PI) *10;
+ self.parent = parent;
+ self.timer = 0;
+ self.toRemove = false;
+ var super_update = self.update;
+ self.update = function(){
+ if (self.timer++ > 100)
+ self.toRemove = true;
+ super_update();
+ for (var i in Player.list){
+ var p = Player.list[i];
+ if(self.getDistance(p) < 32 && self.parent !== p.id){
+ p.hp -= 1;
+ if (p.hp <= 0){
+ var shooter = Player.list[self.parent];
+ if (shooter)
+ shooter.score += 1;
+ p.hp = p.hpMax;
+ p.x = Math.random() * 500;
+ p.y = Math.random() * 500;
+
+ }
+ self.toRemove = true;
+ }
+ }
+ }
+
+ self.getInitPack = function() {
+ return {
+ id:self.id,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ };
+ }
+
+ self.getUpdatePack = function() {
+ return {
+ id:self.id,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ };
+ }
+
+ Bullet.list[self.id] = self;
+ Entity.initPack.bullet.push(self.getInitPack());
+ return self;
+}
+
+Bullet.list= {};
+
+Bullet.update = function(){
+ var pack = [];
+ for(var i in Bullet.list){
+ var bullet = Bullet.list[i];
+ bullet.update();
+ if(bullet.toRemove){
+ delete Bullet.list[i];
+ Entity.removePack.bullet.push(bullet.id);
+ }
+ else
+ pack.push(bullet.getUpdatePack());
+ }
+ return pack;
+}
+
+Bullet.getAllInitPack = function(){
+ var bullets = [];
+ for(var i in Bullet.list)
+ bullets.push(Bullet.list[i].getInitPack());
+ return bullets;
+}
+
+module.exports = { Bullet };
+exports.list = Bullet.list; \ No newline at end of file
diff --git a/server/Entities/Entity.js b/server/Entities/Entity.js
new file mode 100644
index 0000000..99d8c0b
--- /dev/null
+++ b/server/Entities/Entity.js
@@ -0,0 +1,28 @@
+
+var initPack = {player:[], bullet:[]};
+var removePack = {player:[], bullet:[]};
+
+var Entity = function(){
+ var self = {
+ x: 250,
+ y: 250,
+ map: '002-1',
+ speedX: 0,
+ speedY: 0,
+ id: "",
+ dir: 0
+ }
+ self.update = function(){
+ self.updatePosition();
+ }
+ self.updatePosition = function(){
+ self.x += self.speedX;
+ self.y += self.speedY;
+ }
+ self.getDistance = function(pt){
+ return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2);
+ }
+ return self;
+}
+
+module.exports = { Entity, initPack, removePack }; \ No newline at end of file
diff --git a/server/Entities/Player.js b/server/Entities/Player.js
new file mode 100644
index 0000000..6bc0e65
--- /dev/null
+++ b/server/Entities/Player.js
@@ -0,0 +1,156 @@
+var consts = require('../../client/consts')
+const Entity = require('./Entity');
+const Bullet = require('./Bullet');
+
+
+var Player = function(id){
+ var self = Entity.Entity();
+ self.id = id;
+ self.playerName = "";
+ self.number = "" + Math.floor(10 * Math.random());
+ self.pressingRight = false;
+ self.pressingLeft = false;
+ self.pressingUp = false;
+ self.pressingDown = false;
+ self.pressingAttack = false;
+ self.mouseAngle = 0;
+ self.maxSpeed = 10;
+ self.hp = 10;
+ self.hpMax = 10;
+ self.score = 0;
+
+ var super_update = self.update;
+ self.update = function(){
+ self.updateSpeed();
+ super_update();
+ if(self.pressingAttack){
+ self.shootBullet(self.mouseAngle);
+ }
+ }
+
+ self.shootBullet = function(angle){
+ var b = Bullet.Bullet(self.id, angle);
+ b.x = self.x
+ b.y = self.y
+ }
+
+ self.updateSpeed = function(){
+ if(self.pressingRight){
+ self.speedX = self.maxSpeed;
+ self.dir = consts.DIR_RIGHT;
+ }
+ else if(self.pressingLeft){
+ self.speedX = -self.maxSpeed;
+ self.dir = consts.DIR_LEFT;
+ }
+ else
+ self.speedX = 0;
+
+ if(self.pressingUp){
+ self.speedY = -self.maxSpeed;
+ self.dir = consts.DIR_UP;
+ }
+ else if(self.pressingDown){
+ self.speedY = self.maxSpeed;
+ self.dir = consts.DIR_DOWN;
+ }
+ else
+ self.speedY = 0;
+ }
+
+ self.getInitPack = function() {
+ return {
+ id:self.id,
+ playerName:self.playerName,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ number:self.number,
+ hp:self.hp,
+ hpMax:self.hpMax,
+ score:self.score,
+ dir:self.dir,
+ };
+ }
+ self.getUpdatePack = function() {
+ return {
+ id:self.id,
+ playerName:self.playerName,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ score:self.score,
+ hp:self.hp,
+ dir:self.dir,
+ };
+ }
+ Player.list[id] = self;
+ Entity.initPack.player.push(self.getInitPack());
+ return self;
+}
+
+Player.list = {};
+
+Player.onConnect = function(socket, pName){
+ var player = Player(socket.id);
+
+ player.playerName = pName;
+
+ socket.on('keyPress', function(data){
+ if (data.inputId === 'left'){
+ player.pressingLeft = data.state;
+ player.dir = consts.DIR_LEFT;
+ }
+ else if (data.inputId === 'right'){
+ player.pressingRight = data.state;
+ player.dir = consts.DIR_RIGHT;
+ }
+ else if (data.inputId === 'up'){
+ player.pressingUp = data.state;
+ player.dir = consts.DIR_UP;
+ }
+ else if (data.inputId === 'down'){
+ player.pressingDown = data.state;
+ player.dir = consts.DIR_DOWN;
+ }
+ else if (data.inputId === 'attack'){
+ player.pressingAttack = data.state;
+ }
+ else if (data.inputId === 'mouseAngle'){
+ player.mouseAngle = data.state;
+ }
+ });
+
+ socket.emit('init',{
+ selfId:socket.id,
+ player:Player.getAllInitPack(),
+ bullet:Bullet.Bullet.getAllInitPack(),
+ });
+}
+
+Player.getAllInitPack = function(){
+ var players = [];
+ for(var i in Player.list)
+ players.push(Player.list[i].getInitPack());
+ return players;
+}
+
+Player.onDisconnect = function(socket){
+ delete Player.list[socket.id];
+ Entity.removePack.player.push(socket.id);
+}
+
+Player.update = function(){
+ var pack = [];
+ for(var i in Player.list){
+ var player = Player.list[i];
+ player.update();
+ pack.push(player.getUpdatePack());
+ }
+ return pack;
+
+
+}
+
+module.exports = { Player };
+exports.list = Player.list; \ No newline at end of file