summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorequa <equaa@protonmail.com>2021-04-23 18:20:01 -0500
committerequa <equaa@protonmail.com>2021-04-23 18:20:01 -0500
commit5886071e3e05e6d75ffe0990776b5bd407f7ce3d (patch)
tree655d8f9cd3d724cfc39e10e6c410605ad012a5a8
parent465b2e11a689526c7a830bb50483dc772d359f84 (diff)
menu
-rw-r--r--lib/main.fnl9
-rw-r--r--lib/state.fnl1
-rw-r--r--lib/transition.fnl81
-rw-r--r--lib/translation.fnl6
4 files changed, 88 insertions, 9 deletions
diff --git a/lib/main.fnl b/lib/main.fnl
index e88f704..b657d94 100644
--- a/lib/main.fnl
+++ b/lib/main.fnl
@@ -77,6 +77,15 @@
(when profi?
(profi:stopHooks)))
+(fn love.mousepressed [x y button]
+ (match (pcall #(state.mousepressed the-state x y button))
+ (true x) nil
+ (false x) (do
+ (print (.. "mousepressed: \n" x))
+ (table.insert messages
+ {:ticks 5
+ :msg (.. "mousepressed: \n" x)}))))
+
(fn love.keypressed [key scancode repeat]
(when (and (= key "f") (not repeat))
(love.window.setFullscreen (not (love.window.getFullscreen))))
diff --git a/lib/state.fnl b/lib/state.fnl
index 41dc312..a0ddd11 100644
--- a/lib/state.fnl
+++ b/lib/state.fnl
@@ -17,4 +17,5 @@
;; i hope
:draw (proto.meta-method-opt :state.draw)
:keypressed (proto.meta-method-opt :state.keypressed)
+ :mousepressed (proto.meta-method-opt :state.mousepressed)
}
diff --git a/lib/transition.fnl b/lib/transition.fnl
index e62dcb8..c1a81a0 100644
--- a/lib/transition.fnl
+++ b/lib/transition.fnl
@@ -3,6 +3,53 @@
(local translation (require :lib.translation))
(local music-state (require :lib.music-state))
+(fn get-scale []
+ (if (> (select 2 (love.graphics.getDimensions)) 600)
+ 2
+ 1))
+
+(fn draw-boxes [boxes scale tab]
+ (let [(width height) (love.graphics.getDimensions)
+ (mouse-x mouse-y) (love.mouse.getPosition)
+ mouse-x (/ (- mouse-x (/ width 2)) scale)
+ mouse-y (/ (- mouse-y (/ height 2)) scale)]
+ (each [i box (ipairs boxes)]
+ (if (and (>= mouse-x box.x)
+ (< mouse-x (+ box.x box.width))
+ (>= mouse-y box.y)
+ (< mouse-y (+ box.y box.height)))
+ (love.graphics.setColor 1 1 1 0.2)
+ (love.graphics.setColor 1 1 1 0.1))
+ (love.graphics.rectangle :fill
+ (* scale box.x)
+ (* scale box.y)
+ (* scale box.width)
+ (* scale box.height))
+ (when (= tab i)
+ (love.graphics.setColor 1 1 1 0.2)
+ (love.graphics.rectangle :line
+ (* scale box.x)
+ (* scale box.y)
+ (* scale box.width)
+ (* scale box.height)))
+ (love.graphics.setFont (. font (* 12 scale)))
+ (love.graphics.setColor 1 1 1 0.8)
+ (love.graphics.printf (box.text)
+ (* scale box.x)
+ (* scale (+ box.y (/ box.height 6)))
+ (* scale box.width)
+ :center)
+ )))
+
+(local boxes
+ {:menu
+ [{:x -106 :y 94 :width 212 :height 24 :text #translation.text.start
+ :action (fn [self] (set self.transition true))}
+ {:x -106 :y 130 :width 100 :height 24 :text #"toki pona"
+ :action #(set translation.text translation.tp)}
+ {:x 6 :y 130 :width 100 :height 24 :text #"english"
+ :action #(set translation.text translation.en)}]})
+
(fn draw [self]
(local (width height) (love.graphics.getDimensions))
(state.draw self.present-state)
@@ -10,9 +57,9 @@
(love.graphics.reset)
(love.graphics.translate (/ width 2) (/ height 2))
;; TODO: this scaling is pretty limited and should probably get bigger!
- (local scale (if (> height 600)
- 2
- 1))
+ (local scale (get-scale))
+ (when (. boxes self.type)
+ (draw-boxes (. boxes self.type) scale self.tab))
(love.graphics.setColor 0.8 0.8 0.8 (/ (math.max 0 (- self.age 30)) 10))
(love.graphics.setFont (. font (* 48 scale)))
(love.graphics.printf (string.format
@@ -43,19 +90,39 @@
nil))
(fn keypressed [self key scancode repeat]
- (when (and (not repeat) (or (and (= self.type :pause)
- (= key :escape))
- (= key :z)))
+ (when (and (not repeat) (= self.type :pause) (= key :escape))
(set self.transition true))
+ (when (and (not repeat) (or (= key :z) (= key :return)))
+ (if (and (. boxes self.type) (> self.tab 0))
+ ((. boxes self.type self.tab :action) self)
+ (set self.transition true)))
+ (when (and (= key :tab) (. boxes self.type))
+ (set self.tab (+ (% self.tab (length (. boxes self.type))) 1)))
)
+(fn mousepressed [self x y button]
+ (let [(width height) (love.graphics.getDimensions)
+ scale (get-scale)
+ x (/ (- x (/ width 2)) scale)
+ y (/ (- y (/ height 2)) scale)]
+ (print x y)
+ (when (and (= button 1) (. boxes self.type))
+ (print :a)
+ (each [i box (ipairs (. boxes self.type))]
+ (when (and (>= x box.x)
+ (< x (+ box.x box.width))
+ (>= y box.y)
+ (< y (+ box.y box.height)))
+ (box.action self))))))
+
(fn init [self type present-state future-state level]
(setmetatable
{: type
: present-state
: level
: future-state
+ :tab 0
:age (if (or (= type :pause) (= type :menu)) 40 0)}
self))
-{state.draw draw state.init init state.update update state.keypressed keypressed}
+{state.draw draw state.init init state.update update state.keypressed keypressed state.mousepressed mousepressed}
diff --git a/lib/translation.fnl b/lib/translation.fnl
index ee19879..e50a836 100644
--- a/lib/translation.fnl
+++ b/lib/translation.fnl
@@ -2,8 +2,9 @@
{:death ["ike a" "sina moli lon musi nanpa %s\n\nnena Z li open e musi sin"]
:win ["pona a" "sina pini e musi nanpa %s\n\nnena Z li tawa musi kama!"]
:pause ["awen" "nena Z li open sin e musi"]
+ :start "o musi"
:menu ["soko"
- "tan soweli nata\nhttps://equa.space/\n\nnena Z li open e musi\n\nmusi la\nnena ←↑→ li tawa e tomo\nnena Z li pana e kiwen seli"]
+ "tan soweli nata\nhttps://equa.space/\n\nmusi la\nnena ←↑→ li tawa e tomo\nnena Z li pana e kiwen seli"]
:number (fn [x] (string.gsub
(.. (string.rep "ale " (math.floor (/ x 100)))
(string.rep "mute " (math.floor (/ (% x 100) 20)))
@@ -18,8 +19,9 @@
{:death ["ike a" "you died on level %s\n\npress Z to restart"]
:win ["pona a" "you beat level %s\n\npress Z to advance!"]
:pause ["pause" "press Z to continue"]
+ :start "play"
:menu ["soko"
- "by soweli nata\nhttps://equa.space/\n\npress Z to start\n\ncontrols\nhold ←↑→ to move\npress Z to fire"]
+ "by soweli nata\nhttps://equa.space/\n\ncontrols\nhold ←↑→ to move\npress Z to fire"]
:number tostring})
{: en : tp :text tp}