Advertisement
Guest User

Untitled

a guest
Apr 4th, 2016
3,926
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.96 KB | None | 0 0
  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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement