SHARE
TWEET

Untitled

a guest Apr 11th, 2016 1,144 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 USERS = {
  164.     //username:password
  165.     "bob":"asd",
  166.     "bob2":"bob",
  167.     "bob3":"ttt",  
  168. }
  169.  
  170. var isValidPassword = function(data,cb){
  171.     setTimeout(function(){
  172.         cb(USERS[data.username] === data.password);
  173.     },10);
  174. }
  175. var isUsernameTaken = function(data,cb){
  176.     setTimeout(function(){
  177.         cb(USERS[data.username]);
  178.     },10);
  179. }
  180. var addUser = function(data,cb){
  181.     setTimeout(function(){
  182.         USERS[data.username] = data.password;
  183.         cb();
  184.     },10);
  185. }
  186.  
  187. var io = require('socket.io')(serv,{});
  188. io.sockets.on('connection', function(socket){
  189.     socket.id = Math.random();
  190.     SOCKET_LIST[socket.id] = socket;
  191.    
  192.     socket.on('signIn',function(data){
  193.         isValidPassword(data,function(res){
  194.             if(res){
  195.                 Player.onConnect(socket);
  196.                 socket.emit('signInResponse',{success:true});
  197.             } else {
  198.                 socket.emit('signInResponse',{success:false});         
  199.             }
  200.         });
  201.     });
  202.     socket.on('signUp',function(data){
  203.         isUsernameTaken(data,function(res){
  204.             if(res){
  205.                 socket.emit('signUpResponse',{success:false});     
  206.             } else {
  207.                 addUser(data,function(){
  208.                     socket.emit('signUpResponse',{success:true});                  
  209.                 });
  210.             }
  211.         });    
  212.     });
  213.    
  214.    
  215.     socket.on('disconnect',function(){
  216.         delete SOCKET_LIST[socket.id];
  217.         Player.onDisconnect(socket);
  218.     });
  219.     socket.on('sendMsgToServer',function(data){
  220.         var playerName = ("" + socket.id).slice(2,7);
  221.         for(var i in SOCKET_LIST){
  222.             SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  223.         }
  224.     });
  225.    
  226.     socket.on('evalServer',function(data){
  227.         if(!DEBUG)
  228.             return;
  229.         var res = eval(data);
  230.         socket.emit('evalAnswer',res);     
  231.     });
  232.    
  233.    
  234.    
  235. });
  236.  
  237. setInterval(function(){
  238.     var pack = {
  239.         player:Player.update(),
  240.         bullet:Bullet.update(),
  241.     }
  242.    
  243.     for(var i in SOCKET_LIST){
  244.         var socket = SOCKET_LIST[i];
  245.         socket.emit('newPositions',pack);
  246.     }
  247. },1000/25);
  248.  
  249.  
  250.  
  251.  
  252. //index.html
  253. <div id="signDiv">
  254.     Username: <input id="signDiv-username" type="text"></input><br>
  255.     Password: <input id="signDiv-password" type="password"></input>
  256.     <button id="signDiv-signIn">Sign In</button>
  257.     <button id="signDiv-signUp">Sign Up</button>
  258. </div>
  259.  
  260. <div id="gameDiv" style="display:none;">
  261.     <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  262.  
  263.     <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  264.         <div>Hello!</div>
  265.     </div>
  266.  
  267.     <form id="chat-form">
  268.         <input id="chat-input" type="text" style="width:500px"></input>
  269.     </form>
  270. </div>
  271.  
  272. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  273. <script>
  274.     var socket = io();
  275.    
  276.     //sign
  277.     var signDiv = document.getElementById('signDiv');
  278.     var signDivUsername = document.getElementById('signDiv-username');
  279.     var signDivSignIn = document.getElementById('signDiv-signIn');
  280.     var signDivSignUp = document.getElementById('signDiv-signUp');
  281.     var signDivPassword = document.getElementById('signDiv-password');
  282.    
  283.     signDivSignIn.onclick = function(){
  284.         socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
  285.     }
  286.     signDivSignUp.onclick = function(){
  287.         socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
  288.     }
  289.     socket.on('signInResponse',function(data){
  290.         if(data.success){
  291.             signDiv.style.display = 'none';
  292.             gameDiv.style.display = 'inline-block';
  293.         } else
  294.             alert("Sign in unsuccessul.");
  295.     });
  296.     socket.on('signUpResponse',function(data){
  297.         if(data.success){
  298.             alert("Sign up successul.");
  299.         } else
  300.             alert("Sign up unsuccessul.");
  301.     });
  302.  
  303.     //game
  304.     var chatText = document.getElementById('chat-text');
  305.     var chatInput = document.getElementById('chat-input');
  306.     var chatForm = document.getElementById('chat-form');
  307.     var ctx = document.getElementById("ctx").getContext("2d");
  308.     ctx.font = '30px Arial';
  309.    
  310.        
  311.     socket.on('newPositions',function(data){
  312.         ctx.clearRect(0,0,500,500);
  313.         for(var i = 0 ; i < data.player.length; i++)
  314.             ctx.fillText(data.player[i].number,data.player[i].x,data.player[i].y);     
  315.            
  316.         for(var i = 0 ; i < data.bullet.length; i++)
  317.             ctx.fillRect(data.bullet[i].x-5,data.bullet[i].y-5,10,10);     
  318.     });
  319.    
  320.     socket.on('addToChat',function(data){
  321.         chatText.innerHTML += '<div>' + data + '</div>';
  322.     });
  323.     socket.on('evalAnswer',function(data){
  324.         console.log(data);
  325.     });
  326.    
  327.    
  328.     chatForm.onsubmit = function(e){
  329.         e.preventDefault();
  330.         if(chatInput.value[0] === '/')
  331.             socket.emit('evalServer',chatInput.value.slice(1));
  332.         else
  333.             socket.emit('sendMsgToServer',chatInput.value);
  334.         chatInput.value = '';      
  335.     }
  336.    
  337.     document.onkeydown = function(event){
  338.         if(event.keyCode === 68)    //d
  339.             socket.emit('keyPress',{inputId:'right',state:true});
  340.         else if(event.keyCode === 83)   //s
  341.             socket.emit('keyPress',{inputId:'down',state:true});
  342.         else if(event.keyCode === 65) //a
  343.             socket.emit('keyPress',{inputId:'left',state:true});
  344.         else if(event.keyCode === 87) // w
  345.             socket.emit('keyPress',{inputId:'up',state:true});
  346.            
  347.     }
  348.     document.onkeyup = function(event){
  349.         if(event.keyCode === 68)    //d
  350.             socket.emit('keyPress',{inputId:'right',state:false});
  351.         else if(event.keyCode === 83)   //s
  352.             socket.emit('keyPress',{inputId:'down',state:false});
  353.         else if(event.keyCode === 65) //a
  354.             socket.emit('keyPress',{inputId:'left',state:false});
  355.         else if(event.keyCode === 87) // w
  356.             socket.emit('keyPress',{inputId:'up',state:false});
  357.     }
  358.    
  359.     document.onmousedown = function(event){
  360.         socket.emit('keyPress',{inputId:'attack',state:true});
  361.     }
  362.     document.onmouseup = function(event){
  363.         socket.emit('keyPress',{inputId:'attack',state:false});
  364.     }
  365.     document.onmousemove = function(event){
  366.         var x = -250 + event.clientX - 8;
  367.         var y = -250 + event.clientY - 8;
  368.         var angle = Math.atan2(y,x) / Math.PI * 180;
  369.         socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  370.     }
  371.    
  372.    
  373.    
  374.    
  375. </script>
RAW Paste Data
Top