SHARE
TWEET

Untitled

a guest Apr 4th, 2016 787 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var express = require('express');
  2. var app = express();
  3. var serv = require('http').Server(app);
  4.  
  5. app.get('/',function(req, res) {
  6.     res.sendFile(__dirname + '/client/index.html');
  7. });
  8. app.use('/client',express.static(__dirname + '/client'));
  9.  
  10. serv.listen(2000);
  11. console.log("Server started.");
  12.  
  13. var SOCKET_LIST = {};
  14.  
  15. var Entity = function(){
  16.     var self = {
  17.         x:250,
  18.         y:250,
  19.         spdX:0,
  20.         spdY:0,
  21.         id:"",
  22.     }
  23.     self.update = function(){
  24.         self.updatePosition();
  25.     }
  26.     self.updatePosition = function(){
  27.         self.x += self.spdX;
  28.         self.y += self.spdY;
  29.     }
  30.     self.getDistance = function(pt){
  31.         return Math.sqrt(Math.pow(self.x-pt.x,2) + Math.pow(self.y-pt.y,2));
  32.     }
  33.     return self;
  34. }
  35.  
  36. var Player = function(id){
  37.     var self = Entity();
  38.     self.id = id;
  39.     self.number = "" + Math.floor(10 * Math.random());
  40.     self.pressingRight = false;
  41.     self.pressingLeft = false;
  42.     self.pressingUp = false;
  43.     self.pressingDown = false;
  44.     self.pressingAttack = false;
  45.     self.mouseAngle = 0;
  46.     self.maxSpd = 10;
  47.    
  48.     var super_update = self.update;
  49.     self.update = function(){
  50.         self.updateSpd();
  51.         super_update();
  52.        
  53.         if(self.pressingAttack){
  54.             self.shootBullet(self.mouseAngle);
  55.         }
  56.     }
  57.     self.shootBullet = function(angle){
  58.         var b = Bullet(self.id,angle);
  59.         b.x = self.x;
  60.         b.y = self.y;
  61.     }
  62.    
  63.    
  64.     self.updateSpd = function(){
  65.         if(self.pressingRight)
  66.             self.spdX = self.maxSpd;
  67.         else if(self.pressingLeft)
  68.             self.spdX = -self.maxSpd;
  69.         else
  70.             self.spdX = 0;
  71.        
  72.         if(self.pressingUp)
  73.             self.spdY = -self.maxSpd;
  74.         else if(self.pressingDown)
  75.             self.spdY = self.maxSpd;
  76.         else
  77.             self.spdY = 0;     
  78.     }
  79.     Player.list[id] = self;
  80.     return self;
  81. }
  82. Player.list = {};
  83. Player.onConnect = function(socket){
  84.     var player = Player(socket.id);
  85.     socket.on('keyPress',function(data){
  86.         if(data.inputId === 'left')
  87.             player.pressingLeft = data.state;
  88.         else if(data.inputId === 'right')
  89.             player.pressingRight = data.state;
  90.         else if(data.inputId === 'up')
  91.             player.pressingUp = data.state;
  92.         else if(data.inputId === 'down')
  93.             player.pressingDown = data.state;
  94.         else if(data.inputId === 'attack')
  95.             player.pressingAttack = data.state;
  96.         else if(data.inputId === 'mouseAngle')
  97.             player.mouseAngle = data.state;
  98.     });
  99. }
  100. Player.onDisconnect = function(socket){
  101.     delete Player.list[socket.id];
  102. }
  103. Player.update = function(){
  104.     var pack = [];
  105.     for(var i in Player.list){
  106.         var player = Player.list[i];
  107.         player.update();
  108.         pack.push({
  109.             x:player.x,
  110.             y:player.y,
  111.             number:player.number
  112.         });    
  113.     }
  114.     return pack;
  115. }
  116.  
  117.  
  118. var Bullet = function(parent,angle){
  119.     var self = Entity();
  120.     self.id = Math.random();
  121.     self.spdX = Math.cos(angle/180*Math.PI) * 10;
  122.     self.spdY = Math.sin(angle/180*Math.PI) * 10;
  123.     self.parent = parent;
  124.     self.timer = 0;
  125.     self.toRemove = false;
  126.     var super_update = self.update;
  127.     self.update = function(){
  128.         if(self.timer++ > 100)
  129.             self.toRemove = true;
  130.         super_update();
  131.        
  132.         for(var i in Player.list){
  133.             var p = Player.list[i];
  134.             if(self.getDistance(p) < 32 && self.parent !== p.id){
  135.                 //handle collision. ex: hp--;
  136.                 self.toRemove = true;
  137.             }
  138.         }
  139.     }
  140.     Bullet.list[self.id] = self;
  141.     return self;
  142. }
  143. Bullet.list = {};
  144.  
  145. Bullet.update = function(){
  146.     var pack = [];
  147.     for(var i in Bullet.list){
  148.         var bullet = Bullet.list[i];
  149.         bullet.update();
  150.         if(bullet.toRemove)
  151.             delete Bullet.list[i];
  152.         else
  153.             pack.push({
  154.                 x:bullet.x,
  155.                 y:bullet.y,
  156.             });    
  157.     }
  158.     return pack;
  159. }
  160.  
  161. var DEBUG = true;
  162.  
  163. var io = require('socket.io')(serv,{});
  164. io.sockets.on('connection', function(socket){
  165.     socket.id = Math.random();
  166.     SOCKET_LIST[socket.id] = socket;
  167.    
  168.     Player.onConnect(socket);
  169.    
  170.     socket.on('disconnect',function(){
  171.         delete SOCKET_LIST[socket.id];
  172.         Player.onDisconnect(socket);
  173.     });
  174.     socket.on('sendMsgToServer',function(data){
  175.         var playerName = ("" + socket.id).slice(2,7);
  176.         for(var i in SOCKET_LIST){
  177.             SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  178.         }
  179.     });
  180.    
  181.     socket.on('evalServer',function(data){
  182.         if(!DEBUG)
  183.             return;
  184.         var res = eval(data);
  185.         socket.emit('evalAnswer',res);     
  186.     });
  187.    
  188.    
  189.    
  190. });
  191.  
  192. setInterval(function(){
  193.     var pack = {
  194.         player:Player.update(),
  195.         bullet:Bullet.update(),
  196.     }
  197.    
  198.     for(var i in SOCKET_LIST){
  199.         var socket = SOCKET_LIST[i];
  200.         socket.emit('newPositions',pack);
  201.     }
  202. },1000/25);
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. //client.html
  210. <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  211.  
  212. <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  213.     <div>Hello!</div>
  214. </div>
  215.  
  216. <form id="chat-form">
  217.     <input id="chat-input" type="text" style="width:500px"></input>
  218. </form>
  219.  
  220. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  221. <script>
  222.     var chatText = document.getElementById('chat-text');
  223.     var chatInput = document.getElementById('chat-input');
  224.     var chatForm = document.getElementById('chat-form');
  225.     var ctx = document.getElementById("ctx").getContext("2d");
  226.     ctx.font = '30px Arial';
  227.    
  228.     var socket = io();
  229.        
  230.     socket.on('newPositions',function(data){
  231.         ctx.clearRect(0,0,500,500);
  232.         for(var i = 0 ; i < data.player.length; i++)
  233.             ctx.fillText(data.player[i].number,data.player[i].x,data.player[i].y);     
  234.            
  235.         for(var i = 0 ; i < data.bullet.length; i++)
  236.             ctx.fillRect(data.bullet[i].x-5,data.bullet[i].y-5,10,10);     
  237.     });
  238.    
  239.     socket.on('addToChat',function(data){
  240.         chatText.innerHTML += '<div>' + data + '</div>';
  241.     });
  242.     socket.on('evalAnswer',function(data){
  243.         console.log(data);
  244.     });
  245.    
  246.    
  247.     chatForm.onsubmit = function(e){
  248.         e.preventDefault();
  249.         if(chatInput.value[0] === '/')
  250.             socket.emit('evalServer',chatInput.value.slice(1));
  251.         else
  252.             socket.emit('sendMsgToServer',chatInput.value);
  253.         chatInput.value = '';      
  254.     }
  255.    
  256.     document.onkeydown = function(event){
  257.         if(event.keyCode === 68)    //d
  258.             socket.emit('keyPress',{inputId:'right',state:true});
  259.         else if(event.keyCode === 83)   //s
  260.             socket.emit('keyPress',{inputId:'down',state:true});
  261.         else if(event.keyCode === 65) //a
  262.             socket.emit('keyPress',{inputId:'left',state:true});
  263.         else if(event.keyCode === 87) // w
  264.             socket.emit('keyPress',{inputId:'up',state:true});
  265.            
  266.     }
  267.     document.onkeyup = function(event){
  268.         if(event.keyCode === 68)    //d
  269.             socket.emit('keyPress',{inputId:'right',state:false});
  270.         else if(event.keyCode === 83)   //s
  271.             socket.emit('keyPress',{inputId:'down',state:false});
  272.         else if(event.keyCode === 65) //a
  273.             socket.emit('keyPress',{inputId:'left',state:false});
  274.         else if(event.keyCode === 87) // w
  275.             socket.emit('keyPress',{inputId:'up',state:false});
  276.     }
  277.    
  278.     document.onmousedown = function(event){
  279.         socket.emit('keyPress',{inputId:'attack',state:true});
  280.     }
  281.     document.onmouseup = function(event){
  282.         socket.emit('keyPress',{inputId:'attack',state:false});
  283.     }
  284.     document.onmousemove = function(event){
  285.         var x = -250 + event.clientX - 8;
  286.         var y = -250 + event.clientY - 8;
  287.         var angle = Math.atan2(y,x) / Math.PI * 180;
  288.         socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  289.     }
  290.    
  291.    
  292.    
  293.    
  294. </script>
RAW Paste Data
Top