diff options
Diffstat (limited to 'server/Entities')
-rw-r--r-- | server/Entities/Bullet.js | 83 | ||||
-rw-r--r-- | server/Entities/Entity.js | 28 | ||||
-rw-r--r-- | server/Entities/Player.js | 156 |
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 |