about summary refs log tree commit diff stats
path: root/hest-life.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-05-16 19:48:30 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-05-16 19:48:30 -0700
commit02d11692669560311b6db48e359fd7834d8f2d40 (patch)
tree4086a79fcceb2f0d5b10e9ebfd5bbc1d36e819d6 /hest-life.mu
parent7bd4660c46b0d6f2d817279268b24135465f425b (diff)
downloadmu-02d11692669560311b6db48e359fd7834d8f2d40.tar.gz
spacebar plays/pauses
Diffstat (limited to 'hest-life.mu')
-rw-r--r--hest-life.mu29
1 files changed, 25 insertions, 4 deletions
diff --git a/hest-life.mu b/hest-life.mu
index 9ff7e6d3..e98427bb 100644
--- a/hest-life.mu
+++ b/hest-life.mu
@@ -16,11 +16,17 @@ fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk)
   var env-storage: environment
   var env/esi: (addr environment) <- address env-storage
   initialize-environment env
+  render screen, env
   {
-    render screen, env
-    pause env
     edit keyboard, env
-    step env
+    var play?/eax: (addr boolean) <- get env, play?
+    compare *play?, 0/false
+    {
+      break-if-=
+      step env
+      render screen, env
+    }
+    pause env
     loop
   }
 }
@@ -29,6 +35,7 @@ type environment {
   data: (handle array handle array cell)
   zoom: int  # 0 = 1024 px per cell; 5 = 4px per cell; each step adjusts by a factor of 4
   tick: int
+  play?: boolean
 }
 
 type cell {
@@ -193,7 +200,19 @@ fn draw-linear-point screen: (addr screen), u: float, x0: int, y0: int, x1: int,
 fn edit keyboard: (addr keyboard), _self: (addr environment) {
   var self/esi: (addr environment) <- copy _self
   var key/eax: byte <- read-key keyboard
-  # TODO: hotkeys
+  compare key, 0x20/space
+  {
+    break-if-!=
+    var play?/eax: (addr boolean) <- get self, play?
+    compare *play?, 0/false
+    {
+      break-if-=
+      copy-to *play?, 0/false
+      return
+    }
+    copy-to *play?, 1/true
+    return
+  }
 }
 
 fn pause _self: (addr environment) {
@@ -234,6 +253,8 @@ fn initialize-environment _self: (addr environment) {
   var self/esi: (addr environment) <- copy _self
   var zoom/eax: (addr int) <- get self, zoom
 #?   copy-to *zoom, 4
+  var play?/eax: (addr boolean) <- get self, play?
+  copy-to *play?, 1/true
   var data-ah/eax: (addr handle array handle array cell) <- get self, data
   populate data-ah, 0x100
   var data/eax: (addr array handle array cell) <- lookup *data-ah