1.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. var width = window.innerWidth;
  2. var height = window.innerHeight;
  3. var PI=Math.PI;
  4. var absoluteBaseSpeed=200;
  5. var baseSpeed=absoluteBaseSpeed;
  6. console.log(width,height);
  7. var tqwidth = (width*0.75)|0
  8. var tqwbase = (((width-tqwidth)/2))
  9. var opponentcount=60;
  10. var opponentpause=10;
  11. var opponentspeedfactor=0.75;
  12. var fatdownloadsize=130;
  13. var score=0;
  14. var fatscore=0;
  15. var fwscore=0;
  16. var fatrisk=false;
  17. var stext;
  18. var fstext;
  19. var fwtext;
  20. var fdcs=15;
  21. var shightext;
  22. var fhightext;
  23. var fwhightext;
  24. var game = new Phaser.Game(width, height, Phaser.CANVAS, 'gameContainer', { preload: preload, create: create, update: update, render: render });
  25. function preload() {
  26. game.load.image('player', 'player.png');
  27. game.load.image('opponent', 'opponent.png');
  28. game.load.image('opponentb', 'opponentb.png');
  29. game.load.image('opponent2', 'opponent2.png');
  30. game.load.image('opponent2b', 'opponent2b.png');
  31. game.load.image('background', 'background.png');
  32. game.load.image('firewall', 'firewall.png');
  33. }
  34. var player;
  35. var pad;
  36. var opponents=[];
  37. var fatdownload=[];
  38. var firewall=[];
  39. var bg;
  40. function create() {
  41. game.physics.startSystem(Phaser.Physics.ARCADE);
  42. game.stage.backgroundColor = '#000000';
  43. //calc 3/4 width;
  44. console.log("TQWBase",tqwbase);
  45. bg = game.add.tileSprite(tqwbase, 0, tqwidth, height, 'background');
  46. //bg.fixedToCamera = true;
  47. player = game.add.sprite((width/2)-16,height-200,'player')
  48. this.game.physics.enable(player, Phaser.Physics.ARCADE);
  49. //player.body.drag.set(0.2);
  50. player.body.setSize(player.width,player.height/2,0,player.height/4);
  51. //player.body.maxVelocity.setTo(400, 400);
  52. player.body.collideWorldBounds = true;
  53. game.input.gamepad.start();
  54. initOpponents();
  55. //falls pad nicht funktioniert mittels GamepadDebug sample schauen welches pad das aktive ist und entsprechend umcoden
  56. pad = game.input.gamepad.pad1;
  57. pad.addCallbacks(this, { onConnect: addButtons });
  58. stext = game.add.text(10, 40, "Packets:0",{
  59. font: "30px arial",
  60. fill: "#ff0044",
  61. align: "center"
  62. });
  63. fstext = game.add.text(10, 80, "Long downloads:0",{
  64. font: "30px arial",
  65. fill: "#ff0044",
  66. align: "center"
  67. });
  68. fwtext = game.add.text(10, 120, "Firewalls:0",{
  69. font: "30px arial",
  70. fill: "#ff0044",
  71. align: "center"
  72. });
  73. game.add.text(10, height-160, "Highscore:",{
  74. font: "30px arial",
  75. fill: "#ff0044",
  76. align: "center"
  77. });
  78. shightext=game.add.text(10, height-120, "No Highscore saved",{
  79. font: "30px arial",
  80. fill: "#ff0044",
  81. align: "center"
  82. });
  83. fhightext=game.add.text(10, height-80, "No Highscore saved",{
  84. font: "30px arial",
  85. fill: "#ff0044",
  86. align: "center"
  87. });
  88. fwhightext=game.add.text(10, height-40, "No Highscore saved:",{
  89. font: "30px arial",
  90. fill: "#ff0044",
  91. align: "center"
  92. });
  93. updateHighscore();
  94. }
  95. function initOpponents()
  96. {
  97. for(var oc=0;oc<opponentcount;oc++)
  98. {//preseed of opponent cache
  99. var bx=game.rnd.between(0,3)>1;
  100. var flubberflargh = game.add.sprite(0,-100,(bx?'opponent':'opponentb'));
  101. this.game.physics.enable(flubberflargh, Phaser.Physics.ARCADE);
  102. flubberflargh.body.drag.set(0.2);
  103. //flubberflargh.body.maxVelocity.setTo(400, 400);
  104. flubberflargh.body.setSize(flubberflargh.width-4,flubberflargh.height-4-(bx?8:0),2,2+(bx?4:0));
  105. opponents[oc]=flubberflargh;
  106. }
  107. for(var fc=0;fc<fatdownloadsize;fc++)
  108. {//preseed of fatdl cache
  109. var b=game.rnd.between(0,4)>1;
  110. var blubberlutsch = game.add.sprite(0,-100-(fdcs*fc),(b?'opponent2':'opponent2b'));
  111. this.game.physics.enable(blubberlutsch, Phaser.Physics.ARCADE);
  112. blubberlutsch.body.drag.set(0.2);
  113. //blubberlutsch.body.maxVelocity.setTo(400, 400);
  114. blubberlutsch.body.setSize(blubberlutsch.width-4,blubberlutsch.height,2,0);
  115. fatdownload[fc]=blubberlutsch;
  116. }
  117. for(var fwc=0;fwc<3;fwc++)
  118. {//preseed of fatdl cache
  119. //var b=game.rnd.between(0,4)>1;
  120. var blubberlutsch = game.add.sprite(0,-500,'firewall');
  121. this.game.physics.enable(blubberlutsch, Phaser.Physics.ARCADE);
  122. blubberlutsch.body.drag.set(0.2);
  123. //blubberlutsch.body.maxVelocity.setTo(400, 400);
  124. blubberlutsch.scale.y=0.25;
  125. //hässlicher hack wegen verschieberitis
  126. blubberlutsch.body.immovable=true;
  127. firewall[fwc]=blubberlutsch;
  128. }
  129. }
  130. function addButtons() {
  131. // We can't do this until we know that the gamepad has been connected and is started
  132. buttonA = pad.getButton(Phaser.Gamepad.XBOX360_A);
  133. buttonB = pad.getButton(Phaser.Gamepad.XBOX360_B);
  134. buttonX = pad.getButton(Phaser.Gamepad.XBOX360_X);
  135. buttonY = pad.getButton(Phaser.Gamepad.XBOX360_Y);
  136. buttonA.onDown.add(onDown, this);
  137. buttonB.onDown.add(onDown, this);
  138. buttonX.onDown.add(onDown, this);
  139. buttonY.onDown.add(onDown, this);
  140. buttonA.onUp.add(onUp, this);
  141. buttonB.onUp.add(onUp, this);
  142. buttonX.onUp.add(onUp, this);
  143. buttonY.onUp.add(onUp, this);
  144. }
  145. var ocb = 0;
  146. function update() {
  147. var baseSpeed=absoluteBaseSpeed+(((score/100)|0)*50)
  148. bg.tilePosition.y += 10;
  149. stext.setText("Packets:"+score);
  150. fstext.setText("Long downloads:"+fatscore);
  151. fwtext.setText("Firewalls:"+fwscore);
  152. if(pad&&pad._rawPad)
  153. {
  154. var vx =0;
  155. //TODO für später, vielleicht feiner abstufen, deadzone(!!!);
  156. if (pad.isDown(Phaser.Gamepad.XBOX360_DPAD_LEFT) || pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X) < -0.1||pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X) < -0.1)
  157. {
  158. var af=0;
  159. if(pad.isDown(Phaser.Gamepad.XBOX360_DPAD_LEFT))
  160. {
  161. af=1.0;
  162. }
  163. if(pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X) < -0.1)
  164. {
  165. af= -pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X)
  166. }
  167. if(pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X) < -0.1)
  168. {
  169. af= -pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X)
  170. }
  171. if(player.x>=tqwbase)
  172. {
  173. vx=-baseSpeed*af;
  174. }
  175. }
  176. else if (pad.isDown(Phaser.Gamepad.XBOX360_DPAD_RIGHT) || pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X) > 0.1||pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X) > 0.1)
  177. {
  178. var af=0;
  179. if(pad.isDown(Phaser.Gamepad.XBOX360_DPAD_RIGHT))
  180. {
  181. af=1.0;
  182. }
  183. if(pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X) > 0.1)
  184. {
  185. af= pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_X)
  186. }
  187. if(pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X) > 0.1)
  188. {
  189. af= pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_X)
  190. }
  191. if(player.x<=(width-tqwbase-32))
  192. {
  193. vx=baseSpeed;
  194. }
  195. }
  196. /*
  197. if (pad.isDown(Phaser.Gamepad.XBOX360_DPAD_UP) || pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_Y) < -0.1||pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_Y) < -0.1)
  198. {
  199. vy=-baseSpeed;
  200. }
  201. else if (pad.isDown(Phaser.Gamepad.XBOX360_DPAD_DOWN) || pad.axis(Phaser.Gamepad.XBOX360_STICK_LEFT_Y) > 0.1||pad.axis(Phaser.Gamepad.XBOX360_STICK_RIGHT_Y) >0.1)
  202. {
  203. vy=baseSpeed;
  204. }
  205. */
  206. player.body.velocity.x=vx;
  207. //player.body.velocity.y=vy;
  208. }
  209. for(var opcol=0;opcol<opponentcount;opcol++)
  210. {
  211. var opn = opponents[opcol];
  212. if(opn.y>-50&&opn.y<(height-opn.height))
  213. {
  214. opn.body.velocity.y=baseSpeed*opponentspeedfactor;
  215. }
  216. if(opn.x<tqwbase||opn.x>(width-tqwbase-opn.width))
  217. {
  218. opn.body.velocity.x=0;
  219. }
  220. if(opn.y>height)
  221. {
  222. score++;
  223. opn.y=-100;
  224. }
  225. game.physics.arcade.collide(player, opn,
  226. gameover,
  227. function(){return true}, this);
  228. //runterrauschenden traffic nullrouten
  229. var blubb = function()
  230. {
  231. opn.body.velocity.y=0;
  232. opn.y=-100; //müssen hintenraus geschossen werden sonst datensalat;
  233. }
  234. game.physics.arcade.collide(firewall[0],opn ,
  235. blubb,
  236. function(){return true}, this);
  237. game.physics.arcade.collide(firewall[1],opn ,
  238. blubb,
  239. function(){return true}, this);
  240. game.physics.arcade.collide(firewall[2],opn ,
  241. blubb,
  242. function(){return true}, this);
  243. }
  244. if(ocb%opponentpause==0)
  245. {
  246. var nxoidx = (ocb/opponentpause)|0;
  247. console.log(nxoidx);
  248. var nxo = opponents[nxoidx]
  249. if(nxo.y<-50||nxo.y>height)
  250. {
  251. //console.log(ocb);
  252. nxo.y=-30;
  253. nxo.x=game.rnd.between(tqwbase,tqwbase+tqwidth-nxo.width);
  254. console.log(nxo.x);
  255. nxo.body.velocity.y=baseSpeed*opponentspeedfactor;
  256. nxo.body.velocity.x=0;
  257. var fff = game.rnd.between(0,1000);
  258. if(fff<50)
  259. {
  260. nxo.body.velocity.x=fff-50;
  261. }
  262. if(fff>950)
  263. {
  264. nxo.body.velocity.x=fff-950;
  265. }
  266. }
  267. //ocb++;
  268. }
  269. ocb=(ocb+1)%(opponentcount*opponentpause);
  270. var firewallchance = game.rnd.between(0,100000);
  271. if(firewallchance>99995&&firewall[0].y<-400)
  272. {
  273. var firstport = game.rnd.between(tqwbase,tqwbase+tqwidth/2);
  274. var secondport = game.rnd.between(tqwbase+tqwidth/2,tqwbase+tqwidth);
  275. //firewall segment width = 1000
  276. fw0width = (firstport-tqwbase);
  277. firewall[0].x=tqwbase;
  278. firewall[0].scale.x=fw0width/1000;
  279. firewall[0].y=-350;
  280. firewall[0].body.velocity.y=50;
  281. firewall[0].body.setSize(1000, 60, 0, 30);
  282. fw1base = firstport+10+player.width;
  283. var fw1width = secondport-fw1base;
  284. firewall[1].x=fw1base;
  285. firewall[1].scale.x=(fw1width)/1000;
  286. firewall[1].y=-350;
  287. firewall[1].body.velocity.y=50;
  288. firewall[1].body.setSize(1000, 60, 0, 30);
  289. fw2base = secondport+10+player.width;
  290. fw2width = width-tqwbase-fw2base;
  291. firewall[2].x=fw2base;
  292. firewall[2].scale.x=fw2width/1000;
  293. firewall[2].y=-350;
  294. firewall[2].body.velocity.y=50;
  295. firewall[2].body.setSize(1000, 60, 0, 30);
  296. }
  297. if(firewall[0].y>height)
  298. {
  299. fwscore++;
  300. firewall[0].y=-500
  301. firewall[0].body.velocity.y=0;
  302. firewall[1].y=-500
  303. firewall[1].body.velocity.y=0;
  304. firewall[2].y=-500
  305. firewall[2].body.velocity.y=0;
  306. }
  307. var fdc = game.rnd.between(0,1000);
  308. if(fdc>500&&fatdownload[0].y<-50)
  309. {
  310. var fdcolumn = game.rnd.between(tqwbase,tqwbase+tqwidth-fatdownload[0].width);
  311. for(var fc=0;fc<fatdownloadsize;fc++)
  312. {
  313. var fds = fatdownload[fc];
  314. fds.x=fdcolumn
  315. fds.y=fds.y+70;
  316. fds.body.velocity.y=baseSpeed*opponentspeedfactor;
  317. }
  318. }
  319. else
  320. {
  321. if(fatdownload[0].y>-50)//fatdownload transferierend
  322. {
  323. for(var fcc=0;fcc<fatdownloadsize;fcc++)
  324. {
  325. fds = fatdownload[fcc];
  326. fds.body.velocity.y=baseSpeed*opponentspeedfactor;
  327. game.physics.arcade.collide(player,fds ,
  328. gameover,
  329. function(){return true}, this);
  330. //runterrauschenden traffic nullrouten
  331. var blubb = function()
  332. {
  333. fds.body.velocity.y=0;
  334. fds.y=height+500; //müssen hintenraus geschossen werden sonst datensalat, und nicht gescored;
  335. }
  336. if(firewall[0].y>-300)
  337. {
  338. game.physics.arcade.collide(firewall[0],fds ,
  339. blubb,
  340. function(){return true}, this);
  341. game.physics.arcade.collide(firewall[1],fds ,
  342. blubb,
  343. function(){return true}, this);
  344. game.physics.arcade.collide(firewall[2],fds ,
  345. blubb,
  346. function(){return true}, this);
  347. }
  348. }
  349. }
  350. }
  351. if(fatdownload[fatdownloadsize-1].y>height-200 &&!fatrisk&&fatdownload[fatdownloadsize-1].y<height-170)
  352. {
  353. var fx = fatdownload[fatdownloadsize-1].x
  354. if(fx<=(tqwbase+(tqwidth*0.2)|0)&&player.x<fx)
  355. {
  356. fatrisk=true;
  357. fatscore+=9;
  358. }
  359. else
  360. {
  361. if(fx>=(width-tqwbase-(tqwidth*0.2)|0)&&player.x>fx)
  362. {
  363. fatrisk=true;
  364. fatscore+=9;
  365. }
  366. }
  367. }
  368. if(fatdownload[fatdownloadsize-1].y>height)
  369. {
  370. if(fatdownload[fatdownloadsize-1].y<height+200)
  371. {
  372. fatscore++;
  373. }
  374. fatrisk=false;
  375. for(var fc=0;fc<fatdownloadsize;fc++)
  376. {
  377. var fds = fatdownload[fc];
  378. fds.x=0
  379. fds.y=-100-(fdcs*fc);
  380. fds.body.velocity.y=0;
  381. }
  382. }
  383. game.physics.arcade.collide(firewall[0],player ,
  384. gameoverFW,
  385. function(){return true}, this);
  386. game.physics.arcade.collide(firewall[1],player ,
  387. gameoverFW,
  388. function(){return true}, this);
  389. game.physics.arcade.collide(firewall[2],player ,
  390. gameoverFW,
  391. function(){return true}, this);
  392. }
  393. function writeScore(scorekey,value)
  394. {
  395. if(localStorage.getItem(scorekey) === null)
  396. {
  397. localStorage.setItem(scorekey,value);
  398. }
  399. else if(value > localStorage.getItem(scorekey))
  400. {
  401. localStorage.setItem(scorekey,value);
  402. }
  403. }
  404. function updateHighscore()
  405. {
  406. updateHighscoreInternal('packets',shightext,'Packets:');
  407. updateHighscoreInternal('fatdownloasds',fhightext,'Long downloads:');
  408. updateHighscoreInternal('firewalls',fwhightext,'Firewalls:');
  409. }
  410. function updateHighscoreInternal(scorekey,scoretext,scorelabel)
  411. {
  412. var value =localStorage.getItem(scorekey)
  413. if(value != null)
  414. {
  415. scoretext.setText(scorelabel+value);
  416. }
  417. }
  418. function gameoverpre()
  419. {
  420. writeScore('packets',score);
  421. writeScore('fatdownloasds',fatscore);
  422. writeScore('firewalls',fwscore);
  423. updateHighscore()
  424. score=0;
  425. fatscore=0;
  426. fwscore=0;
  427. for(var p=0;p<opponentcount;p++)
  428. {
  429. var o = opponents[p];
  430. o.exists=false;
  431. opponents[p]=null;
  432. };
  433. for(var q=0;q<fatdownloadsize;q++)
  434. {
  435. var r = fatdownload[q];
  436. r.exists=false;
  437. fatdownload[q]=null;
  438. }
  439. for(var q=0;q<3;q++)
  440. {
  441. var r = firewall[q];
  442. r.exists=false;
  443. firewall[q]=null;
  444. }
  445. }
  446. function gameoverpost()
  447. {
  448. initOpponents();
  449. player.y=height-200;
  450. player.body.velocity.y=0;
  451. }
  452. function gameover()
  453. {
  454. gameoverpre();
  455. console.log("Ätschebätsche");
  456. alert("Packet Loss");
  457. gameoverpost();
  458. }
  459. function gameoverFW()
  460. {
  461. gameoverpre();
  462. console.log("Ätschebätsche");
  463. alert("Filtered by a firewall");
  464. gameoverpost();
  465. }
  466. function onDown(button, value) {
  467. /*
  468. if (button.buttonCode === Phaser.Gamepad.XBOX360_A)
  469. {
  470. //TODO
  471. }
  472. else if (button.buttonCode === Phaser.Gamepad.XBOX360_B)
  473. {
  474. }*/
  475. }
  476. function onUp(button, value) {
  477. /*
  478. if (button.buttonCode === Phaser.Gamepad.XBOX360_A)
  479. {
  480. //TODO
  481. }
  482. else if (button.buttonCode === Phaser.Gamepad.XBOX360_B)
  483. {
  484. }*/
  485. }
  486. function render () {
  487. //game.debug.body(firewall[0]);
  488. //game.debug.body(firewall[1]);
  489. //game.debug.body(firewall[2]);
  490. // game.debug.text(game.time.physicsElapsed, 32, 32);
  491. //game.debug.body(player);
  492. // game.debug.bodyInfo(player, 16, 24);
  493. }