diff --git a/.gitignore b/.gitignore index 7d42c20..3b1ad01 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,3 @@ .clj-kondo/ .lsp/ tokens.clj -*.love -/time-guesser -/dist -*.zip diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index a45fd52..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -24 diff --git a/Makefile b/Makefile deleted file mode 100644 index e901892..0000000 --- a/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -build: - ./minify.bb main.fnl - zip time-guesser.love main.lua main.min.fnl bootstrap.fnl fennel.lua L5.lua - bash -c 'source ~/.nvm/nvm.sh && nvm use && yarn dlx love.js time-guesser.love dist -c' - zip -r time-guesser-web.zip dist diff --git a/bootstrap.fnl b/bootstrap.fnl index fbd0661..e775c02 100644 --- a/bootstrap.fnl +++ b/bootstrap.fnl @@ -1,5 +1,5 @@ (local m (require "main.min.fnl")) -(set _G.setup m.s) -(set _G.draw m.d) -(set _G.keyPressed m.k) +(set _G.setup m.setup) +(set _G.draw m.draw) +(set _G.keyPressed m.key-pressed) diff --git a/main.fnl b/main.fnl index 44b52ee..7e72df3 100644 --- a/main.fnl +++ b/main.fnl @@ -4,22 +4,25 @@ (size 640 480) (textSize 100)) -(local steps 1440) +(local colors { + :yellow [255 228 112] ; #ffe470 + :dark [64 56 48] ; #403830 +}) + +(lambda remap [v in-min in-max out-min out-max] + (+ out-min (* (/ (- v in-min) (- in-max in-min)) (- out-max out-min)))) + +(local steps (* 24 60)) (var step 0) -; (lambda lpad [num] (if (< num 10) (.. "0" num) num)) -; (lambda time [num] -; (let [hour (floor (map num 0 steps 0 24)) -; min (- num (* hour 60))] -; (.. (lpad hour) ":" (lpad min)))) - -(fn time [num] - (let [hour (floor (map num 0 steps 0 24))] - (: "%02d:%02d" :format hour (- num (* hour 60))))) +(lambda lpad [num] (if (< num 10) (.. "0" num) num)) +(lambda time [num] + (let [hour (floor (remap num 0 steps 0 24)) + min (- num (* hour 60))] + (.. (lpad hour) ":" (lpad min)))) (var pause false) (var won false) - (fn key-pressed [] (when (= key "space") (set pause (not pause)))) @@ -28,14 +31,21 @@ (fn draw [] (when (and (not won) (not pause)) (set step (+ step 1))) (when (>= step steps) (set step 0)) - (background 0 0 0) - (text (time step) 175 150) - (text (time goal-time) 175 250) - (when (and pause (= goal-time step)) (set won true)) - (when won (text "YOU WIN" 100 400))) + (let [ + half (/ steps 2) + color-step (if (> step half) (- half (- step half)) step) + color-fn #(+ (. colors.dark $1) (* (/ (- (. colors.yellow $1) (. colors.dark $1)) half) color-step)) + r (color-fn 1) + g (color-fn 2) + b (color-fn 3)] + (background r g b)) + (text (time step) 175 150) + (text (time goal-time) 175 250) + (when (and pause (= goal-time step)) (set won true)) + (when won (text "YOU WIN" 100 400))) { - :s setup - :d draw - :k key-pressed + :setup setup + :draw draw + :key-pressed key-pressed } diff --git a/main.lua b/main.lua index 594a408..dc30c68 100644 --- a/main.lua +++ b/main.lua @@ -1,14 +1,20 @@ +-- Mostly from https://sr.ht/~benthor/absolutely-minimal-love2d-fennel/ +-- But added the allowedGlobals=false option + fennel = require("fennel") debug.traceback = fennel.traceback -table.insert(package.loaders, - function(filename) - if love.filesystem.getInfo(filename) then - return function(...) - return fennel.eval(love.filesystem.read(filename), - { env = _G, filename = filename, allowedGlobals = false }, - ...), filename - end - end - end) +table.insert(package.loaders, function(filename) + if love.filesystem.getInfo(filename) then + return function(...) + return fennel.eval( + love.filesystem.read(filename), + { env = _G, filename = filename, allowedGlobals = false }, + ... + ), + filename + end + end +end) + -- jump into Fennel require("bootstrap.fnl") diff --git a/minify.bb b/minify.bb index b24c1fe..c382e23 100755 --- a/minify.bb +++ b/minify.bb @@ -12,6 +12,7 @@ (defn tokenize [source] (let [chars (vec source) total-chars (count chars)] (loop [cursor 0 tokens []] + ; (when (< cursor 100) (pprint {:tokens tokens})) (if (>= cursor total-chars) tokens (let [c (chars cursor) nxt (get chars (inc cursor))] @@ -57,7 +58,7 @@ (def built-ins #{"fn" "local" "λ" "lambda" "require" "let" "+" "-" "/" "*" "<" ">" "<=" ">=" "not=" ".." "var" "if" "when" "and" "or" "not" "do" "set" "each" "for" "while" "true" "$1" "math.floor" "floor" "false" "nil" "size" "textSize" "background" "text" "random" "key" - ":s" ":d" ":k" ":format" ":L5" "map" "color" "lerpColor"}) + ":setup" ":draw" ":key-pressed" ":L5"}) (defn collect-bindings [tokens] (reduce (fn [acc token] @@ -97,6 +98,7 @@ (defn needs-space? "does this token need space before it?" [prev current nxt] + (when (= (current :type) :string) (pprint {:current current})) (or (= (current :type) :open-annon-fn) (and @@ -176,6 +178,7 @@ re-map (build-rename-map (collect-bindings tokens)) output (emit tokens re-map) output-file-name (gen-output-file-name file-name)] + (pprint {:output output :token-sample (take 15 tokens) :bindings (build-rename-map (collect-bindings tokens))}) (write-file "tokens.clj" (with-out-str (pprint (transform-tokens tokens re-map)))) (write-file output-file-name output) (println (str "Wrote file " output-file-name)))) diff --git a/package.json b/package.json deleted file mode 100644 index 4a2cee2..0000000 --- a/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "packageManager": "yarn@4.15.0" -}