index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import * as wasm from "fourteen-screws";
  2. import { Cluiche } from "fourteen-screws";
  3. let demo_level = require('./demo-level');
  4. let textures = demo_level.textures;
  5. const cluiche = Cluiche.new();
  6. cluiche.load_textures(textures);
  7. let canvas = document.getElementById("canvas");
  8. let context = canvas.getContext("2d");
  9. let keystate = {}
  10. document.addEventListener('keydown', (event) => { keystate[event.key] = true; }, false);
  11. document.addEventListener('keyup', (event) => { keystate[event.key] = false; }, false);
  12. const fps = new class {
  13. constructor() {
  14. this.fps = document.getElementById("fps");
  15. this.frames = [];
  16. this.lastFrameTimestamp = performance.now();
  17. }
  18. render () {
  19. // Convert the delta time since the last frame render into a measure
  20. // of frames per second
  21. const now = performance.now();
  22. const delta = now - this.lastFrameTimeStamp;
  23. this.lastFrameTimeStamp = now;
  24. const fps = 1 / delta * 1000;
  25. // Save only the latest 100 timings.
  26. this.frames.push(fps);
  27. if (this.frames.length > 100) {
  28. this.frames.shift();
  29. }
  30. // find the max, min, and mean of our 100 latest timings
  31. let min = Infinity;
  32. let max = -Infinity;
  33. let sum = 0;
  34. for (let i = 0; i < this.frames.length; i++) {
  35. sum += this.frames[i];
  36. min = Math.min(this.frames[i], min);
  37. max = Math.max(this.frames[i], max);
  38. }
  39. let mean = sum / this.frames.length;
  40. this.fps.textContent = `
  41. Frames per Second:
  42. latest = ${Math.round(fps)} |
  43. avg of last 100 = ${Math.round(mean)} |
  44. min of last 100 = ${Math.round(min)} |
  45. max of last 100 = ${Math.round(max)}
  46. `.trim();
  47. }
  48. }
  49. function render() {
  50. context.clearRect(0, 0, 320, 200);
  51. var image = context.getImageData(0, 0, 320, 200);
  52. cluiche.render(image.data);
  53. context.putImageData(image, 0, 0);
  54. }
  55. function events() {
  56. if (keystate['w']) {
  57. cluiche.player_forward();
  58. }
  59. if (keystate['s']) {
  60. cluiche.player_back();
  61. }
  62. if (keystate['a']) {
  63. cluiche.player_strafe_left();
  64. }
  65. if (keystate['d']) {
  66. cluiche.player_strafe_right();
  67. }
  68. if (keystate['ArrowLeft']) {
  69. cluiche.player_turn_left();
  70. }
  71. if (keystate['ArrowRight']) {
  72. cluiche.player_turn_right();
  73. }
  74. }
  75. function tick() {
  76. fps.render();
  77. events();
  78. render();
  79. requestAnimationFrame(tick);
  80. }
  81. requestAnimationFrame(tick);