summaryrefslogtreecommitdiff
path: root/src/ui.moon
diff options
context:
space:
mode:
authorAlexander M Pickering <alex@cogarr.net>2025-01-21 16:03:25 -0600
committerAlexander M Pickering <alex@cogarr.net>2025-01-21 16:03:25 -0600
commit89a8f94ac0206412c1a2d7b8766d97dbdbd36253 (patch)
treec9ddc23d31d3c5058d3465dabb68aae7b8209138 /src/ui.moon
parent0370d64b3bd7914be55358817e52bbc8a529a7d3 (diff)
downloadggj25-89a8f94ac0206412c1a2d7b8766d97dbdbd36253.tar.gz
ggj25-89a8f94ac0206412c1a2d7b8766d97dbdbd36253.tar.bz2
ggj25-89a8f94ac0206412c1a2d7b8766d97dbdbd36253.zip
work
Diffstat (limited to 'src/ui.moon')
-rw-r--r--src/ui.moon53
1 files changed, 49 insertions, 4 deletions
diff --git a/src/ui.moon b/src/ui.moon
index 4c551b3..f729756 100644
--- a/src/ui.moon
+++ b/src/ui.moon
@@ -1,12 +1,15 @@
hc = require("party.hc.init")
win = require("window")
log = require("log")
+util = require("util")
Button = require("ui.button")
Joystick = require("ui.joystick")
Textbox = require("ui.textbox")
ui_world = hc.new(64)
+am.eval_js(require("controller_bridge"))
+
ui = {}
ui.events = {
touch: {}
@@ -14,22 +17,32 @@ ui.events = {
controller: {}
keyboard: {}
}
-ui.button = (x,y,width,height,text) ->
+ui.button = (x,y,width,height,text,controller_binds) ->
+ controller_binds = controller_binds or {}
+ assert(x and type(x) == "number", "x must be anumber")
+ assert(y and type(y) == "number", "y must be anumber")
+ assert(width and type(width) == "number", "width must be anumber")
+ assert(height and type(height) == "number", "height must be anumber")
button = Button(x,y,width,height,text)
ui.node\append(button.node)
bounds = ui_world\rectangle(x,y,width,height)
ui.events.touch[bounds] = button
ui.events.mouse[bounds] = button
+ for bind in *controller_binds
+ ui.events.controller[bind] = button
button
ui.click = (x,y) ->
ui_world\shapesAt(x,y)
-ui.joystick = (x,y,r) ->
+ui.joystick = (x,y,r,controller_binds) ->
+ controller_binds = controller_binds or {}
joystick = Joystick(x,y,r)
ui.node\append(joystick.node)
bounds = ui_world\circle(x,y,r)
ui.events.touch[bounds] = joystick
+ for bind in *controller_binds
+ ui.events.controller[bind] = joystick
joystick
ui.textbox = (x,y,width,height,value,placeholder) ->
@@ -42,6 +55,19 @@ ui.textbox = (x,y,width,height,value,placeholder) ->
ui.events.keyboard[textbox] = true
textbox
+ui.delete = (element) ->
+ ui.node\remove(element.node)
+ for b,e in pairs(ui.events.mouse)
+ if e == element
+ ui.events.mouse[b] = nil
+ if ui.events.keyboard[element]
+ ui.events.keyboard[element] = nil
+ for b,e in pairs(ui.events.touch)
+ if e == element
+ ui.events.touch[b] = nil
+ for b,e in pairs(ui.events.controller)
+ if e == element
+ ui.events.controller[b] = nil
ui.node = am.group!
@@ -57,6 +83,8 @@ ui.node\action(() ->
up = win\mouse_released("left")
wheel = win\mouse_wheel_delta()
keys = win\keys_pressed()
+ am.eval_js("CONT.loop()")
+ cont_state = am.eval_js("CONT.last_state")
-- Debugging for mouse position:
ui.dbg.position2d = pos
mo_tbl =
@@ -88,7 +116,7 @@ ui.node\action(() ->
has_fire(uiobj)
uiobj\fire(etbl)
if #keys > 0
- print("Got keys:" .. tostring(keys))
+ --print("Got keys:" .. tostring(keys))
etbl =
event: "keys_pressed"
data: keys
@@ -97,7 +125,24 @@ ui.node\action(() ->
has_fire(uiobj)
if uiobj\fire(etbl)
break -- allow any keyboard listener to "trap" the signal by returning true
-
+ if cont_state.on
+ for axis,value in pairs(cont_state.axes)
+ name = "axis" .. axis
+ uiobj = ui.events.controller[name]
+ if uiobj and has_fire(uiobj)
+ etbl =
+ event: "controller_axis"
+ data: value
+ uiobj\fire(etbl)
+ for button,value in pairs(cont_state.buttons)
+ name = "button" .. button
+ uiobj = ui.events.controller[name]
+ if uiobj and has_fire(uiobj)
+ etbl =
+ event: "controller_pressed"
+ data: value
+ uiobj\fire(etbl)
+
-- in_touch_events = {
-- "active_touch"
-- "touches_began"