]> git.plutz.net Git - flarejs/commitdiff
basic input control object
authorPaul Hänsch <paul@plutz.net>
Mon, 10 Feb 2020 04:07:44 +0000 (05:07 +0100)
committerPaul Hänsch <paul@plutz.net>
Mon, 10 Feb 2020 04:07:44 +0000 (05:07 +0100)
engine.js

index 4a9eb2ef3a35f63b9fcc4995c9940e32b5dad49a..456a882b811232f74adae720c98fe22c21dec047 100644 (file)
--- a/engine.js
+++ b/engine.js
@@ -148,9 +148,11 @@ function Mob(textdef) {
   this.place = function(x, y) { this.position = [x, y]; return this; }
   this.direct = function(d) { this.direction = d % 8; return this; }
   this.animate = function(a) {
-    this.previous_animation = this.animation;
-    this.animation = a;
-    this.frametime = performance.now();
+    if ( a != this.animation ) {
+      this.previous_animation = this.animation;
+      this.animation = a;
+      this.frametime = performance.now();
+    }
     return this;
   }
 
@@ -250,6 +252,25 @@ function Hero(gender = "female", hair = "short"){
   this.swing  = function() { this.animate("swing" ); return this; };
 }
 
+function Controls(hero, map){
+  var keys = [];
+
+  function input(){
+    var d = {};
+    d.l = keys[65] || keys[37]; d.r = keys[68] || keys[39];
+    d.u = keys[87] || keys[38]; d.d = keys[83] || keys[40];
+    if ( d.l ) hero.direct(0).run(); if ( d.r ) hero.direct(4).run();
+    if ( d.u ) hero.direct(2).run(); if ( d.d ) hero.direct(6).run();
+    if ( d.u && d.l ) hero.direct(1).run();
+    if ( d.u && d.r ) hero.direct(3).run();
+    if ( d.d && d.l ) hero.direct(7).run();
+    if ( d.d && d.r ) hero.direct(5).run();
+    if ( ! (d.l || d.r || d.u || d.d) ) hero.stance();
+  }
+  window.addEventListener("keydown", function(e){ keys[e.keyCode] = true ; input();} );
+  window.addEventListener("keyup"  , function(e){ keys[e.keyCode] = false; input();} );
+}
+
 document.querySelector("body").setAttribute("style", "margin: 0; padding: 0;");
 canvas = document.createElement("canvas").getContext("2d");
 canvas.canvas.setAttribute("style", "display: block; border: 0; margin: 0; padding: 0;");
@@ -262,19 +283,11 @@ window.addEventListener("resize", function(){
   canvas.canvas.height = window.innerHeight;
 });
 
-player = new Hero().place(20 * 64 , 20 * 32).direct(5);
+player = new Hero();
 map = new Map("/maps/arrival.txt");
+player.place(map.info.header.hero_pos.split(/,/)[0] * map.info.header.tilewidth,
+             map.info.header.hero_pos.split(/,/)[1] * map.info.header.tileheight);
+player.direct(5).stance();
+c = new Controls(player, map);
 
 setInterval (function() { map.center(player.position[0], player.position[1]).draw([player]);}, 33.33 );
-
-// window.addEventListener("click", function(e){
-//   tile = map.tileAt(e.pageX + map.posx, e.pageY - map.posy );
-//   console.log( "X: " + (e.pageX + map.posx) + ", Y:" + (e.pageY - map.posy) +
-//                ", Tile: " + tile + " ( " + (tile % map.info.header.width) + ", " + (tile / map.info.header.width |0) + " )" );
-// });
-// 
-// mark = [17,17];
-// window.addEventListener("mousemove", function(e){
-//   tile = map.tileAt(e.pageX + map.posx, e.pageY - map.posy);
-//   mark = [(tile % map.info.header.width), (tile / map.info.header.width |0)];
-// });