diff options
Diffstat (limited to 'src/ui.moon')
| -rw-r--r-- | src/ui.moon | 53 |
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" |
