diff --git a/druid/base/back_handler.lua b/druid/base/back_handler.lua index 70cd190..2431f80 100644 --- a/druid/base/back_handler.lua +++ b/druid/base/back_handler.lua @@ -1,6 +1,7 @@ --- Component to handle back key (android, backspace) -- @module druid.back_handler +local Event = require("druid.event") local const = require("druid.const") local component = require("druid.component") @@ -15,6 +16,8 @@ local M = component.create("back_handler", { const.ON_INPUT }) function M.init(self, callback, params) self.callback = callback self.params = params + + self.on_back = Event(callback) end @@ -24,7 +27,7 @@ end -- @tparam table action on_input action function M.on_input(self, action_id, action) if action_id == const.ACTION_BACK and action[const.RELEASED] then - self.callback(self:get_context(), self.params) + self.on_back:trigger(self:get_context(), self.params) return true end diff --git a/druid/base/blocker.lua b/druid/base/blocker.lua index d03fc3f..303d703 100644 --- a/druid/base/blocker.lua +++ b/druid/base/blocker.lua @@ -1,6 +1,7 @@ --- Component to block input on specify zone (node) -- @module druid.blocker +local Event = require("druid.event") local const = require("druid.const") local helper = require("druid.helper") local component = require("druid.component") @@ -10,6 +11,9 @@ local M = component.create("blocker", { const.ON_INPUT_HIGH }) function M.init(self, node) self.node = self:get_node(node) + + self.on_click = Event() + self.on_enable_change = Event() end @@ -30,4 +34,14 @@ function M.on_input(self, action_id, action) end +function M.set_enabled(self, state) + +end + + +function M.is_enabled(self, state) + +end + + return M diff --git a/druid/base/button.lua b/druid/base/button.lua index bacc089..a24d24d 100644 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -75,8 +75,6 @@ end -- @tparam[opt] node anim_node Button anim node (node, if not provided) -- @tparam[opt] string event Button react event, const.ACTION_TOUCH by default function M.init(self, node, callback, params, anim_node, event) - assert(callback, "Button should have callback. To block input on zone use blocker component") - self.druid = self:get_druid() self.style = self:get_style() self.node = self:get_node(node) @@ -90,15 +88,10 @@ function M.init(self, node, callback, params, anim_node, event) self.click_zone = nil -- Event stubs - self.on_click = Event() + self.on_click = Event(callback) self.on_repeated_click = Event() self.on_long_click = Event() self.on_double_click = Event() - - if callback then - self.on_click:subscribe(callback) - end - end diff --git a/druid/base/checkbox.lua b/druid/base/checkbox.lua index 707e6ea..723decd 100644 --- a/druid/base/checkbox.lua +++ b/druid/base/checkbox.lua @@ -1,6 +1,7 @@ --- Druid checkbox component -- @module druid.checkbox +local Event = require("druid.event") local component = require("druid.component") local M = component.create("checkbox") @@ -17,7 +18,7 @@ function M.set_state(self, state, is_silence) end if not is_silence and self.callback then - self.callback(self:get_context(), state) + self.on_change_state:trigger(self:get_context(), state) end end @@ -41,6 +42,8 @@ function M.init(self, node, callback, click_node) self.button = self.druid:new_button(self.click_node or self.node, on_click) M.set_state(self, false, true) + + self.on_change_state = Event(callback) end diff --git a/druid/base/checkbox_group.lua b/druid/base/checkbox_group.lua index 90f9481..3f5ed11 100644 --- a/druid/base/checkbox_group.lua +++ b/druid/base/checkbox_group.lua @@ -1,18 +1,12 @@ --- Checkboux group module -- @module druid.checkbox_group +local Event = require("druid.event") local component = require("druid.component") local M = component.create("checkbox_group") -local function on_checkbox_click(self, index) - if self.callback then - self.callback(self:get_context(), index) - end -end - - function M.set_state(self, indexes) for i = 1, #indexes do if self.checkboxes[i] then @@ -36,12 +30,13 @@ end function M.init(self, nodes, callback, click_nodes) self.druid = self:get_druid() self.checkboxes = {} - self.callback = callback + + self.on_checkbox_click = Event(callback) for i = 1, #nodes do local click_node = click_nodes and click_nodes[i] or nil local checkbox = self.druid:new_checkbox(nodes[i], function() - on_checkbox_click(self, i) + self.on_checkbox_click:trigger(self:get_context(), i) end, click_node) table.insert(self.checkboxes, checkbox) diff --git a/druid/base/grid.lua b/druid/base/grid.lua index 6ba4e7e..31ad635 100644 --- a/druid/base/grid.lua +++ b/druid/base/grid.lua @@ -2,6 +2,7 @@ -- Grid can anchor your elements, get content size and other -- @module druid.grid +local Event = require("druid.event") local component = require("druid.component") local M = component.create("grid") @@ -17,6 +18,11 @@ function M.init(self, parent, element, in_row) self.node_size = gui.get_size(self:get_node(element)) self.border = vmath.vector4(0) self.border_offset = vmath.vector3(0) + + self.on_add_item = Event() + self.on_remove_item = Event() + self.on_clear = Event() + self.on_update_positions = Event() end @@ -59,6 +65,8 @@ local function update_pos(self) local node = self.nodes[i] gui.set_position(node, get_pos(self, i)) end + + self.on_update_positions:trigger(self:get_context()) end @@ -82,6 +90,8 @@ function M.add(self, item, index) local pos = get_pos(self, index) check_border(self, pos) update_pos(self) + + self.on_add_item:trigger(self:get_context(), item, index) end diff --git a/druid/base/hover.lua b/druid/base/hover.lua index 71a15bc..42af7d4 100644 --- a/druid/base/hover.lua +++ b/druid/base/hover.lua @@ -20,10 +20,8 @@ function M.init(self, node, context, on_hover_callback) self._is_hovered = false self.context = context - self.on_hover = Event() - if on_hover_callback then - self.on_hover:subscribe(on_hover_callback) - end + + self.on_hover = Event(on_hover_callback) end diff --git a/druid/base/slider.lua b/druid/base/slider.lua index 80a8534..6fd3f9f 100644 --- a/druid/base/slider.lua +++ b/druid/base/slider.lua @@ -1,6 +1,7 @@ --- Druid slider component -- @module druid.slider +local Event = require("druid.event") local helper = require("druid.helper") local const = require("druid.const") local component = require("druid.component") @@ -9,9 +10,7 @@ local M = component.create("slider", { const.ON_INPUT_HIGH }) local function on_change_value(self) - if self.callback then - self.callback(self:get_context(), self.value) - end + self.on_change_value:trigger(self:get_context(), self.value) end @@ -26,7 +25,8 @@ function M.init(self, node, end_pos, callback) self.dist = self.end_pos - self.start_pos self.is_drag = false self.value = 0 - self.callback = callback + + self.on_change_value = Event(callback) assert(self.dist.x == 0 or self.dist.y == 0, "Slider for now can be only vertical or horizontal") end diff --git a/druid/base/text.lua b/druid/base/text.lua index 72307d8..2cee229 100644 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -2,6 +2,7 @@ -- Good working with localization system -- @module druid.text +local Event = require("druid.event") local const = require("druid.const") local component = require("druid.component") @@ -25,6 +26,10 @@ function M.init(self, node, value, no_adjust) self.is_no_adjust = no_adjust self.last_color = gui.get_color(self.node) + self.on_set_text = Event() + self.on_update_text_scale = Event() + self.on_set_pivot = Event() + self:set_to(value or 0) return self end @@ -47,6 +52,8 @@ local function update_text_area_size(self) local new_scale = vmath.vector3(scale_modifier, scale_modifier, cur_scale.z) gui.set_scale(self.node, new_scale) self.scale = new_scale + + self.on_update_text_scale:trigger(self:get_context(), new_scale) end @@ -58,6 +65,8 @@ function M.set_to(self, set_to) self.last_value = set_to gui.set_text(self.node, set_to) + self.on_set_text:trigger(self:get_context(), set_to) + if not self.is_no_adjust then update_text_area_size(self) end @@ -114,6 +123,8 @@ function M.set_pivot(self, pivot) self.pos = self.pos + pos_offset gui.set_position(self.node, self.pos) + + self.on_set_pivot:trigger(self:get_context(), pivot) end diff --git a/druid/base/timer.lua b/druid/base/timer.lua index efd8fc9..8fecf86 100644 --- a/druid/base/timer.lua +++ b/druid/base/timer.lua @@ -1,6 +1,7 @@ --- Component to handle GUI timers -- @module druid.timer +local Event = require("druid.event") local const = require("druid.const") local formats = require("druid.helper.formats") local helper = require("druid.helper") @@ -13,16 +14,19 @@ function M.init(self, node, seconds_from, seconds_to, callback) self.node = self:get_node(node) seconds_from = math.max(seconds_from, 0) seconds_to = math.max(seconds_to or 0, 0) - callback = callback or const.EMPTY_FUNCTION + + self.on_tick = Event() + self.on_set_enabled = Event() + self.on_timer_end = Event(callback) self:set_to(seconds_from) self:set_interval(seconds_from, seconds_to) - self.callback = callback if seconds_to - seconds_from == 0 then self:set_state(false) - self.callback(self:get_context(), self) + self.on_timer_end:trigger(self:get_context(), self) end + return self end @@ -43,6 +47,8 @@ end -- @tparam boolean is_on Timer enable state function M.set_state(self, is_on) self.is_on = is_on + + self.on_set_enabled:trigger(self:get_context(), is_on) end @@ -73,9 +79,12 @@ function M.update(self, dt) self.temp = self.temp - dist self.value = helper.step(self.value, self.target, 1) M.set_to(self, self.value) + + self.on_tick:trigger(self:get_context(), self.value) + if self.value == self.target then self:set_state(false) - self.callback(self:get_context(), self) + self.on_timer_end:trigger(self:get_context(), self) end end end diff --git a/druid/event.lua b/druid/event.lua index 8b3350e..d38761e 100644 --- a/druid/event.lua +++ b/druid/event.lua @@ -7,8 +7,15 @@ local class = require("druid.system.middleclass") local M = class("druid.event") -function M.initialize(self) +--- Event constructur +-- @function Event +-- @tparam function initial_callback Subscribe the callback on new event, if callback exist +function M.initialize(self, initial_callback) self._callbacks = {} + + if initial_callback then + self:subscribe(initial_callback) + end end diff --git a/example/kenney/gui/main/main.gui b/example/kenney/gui/main/main.gui index 0d74dfd..1ba3e11 100644 --- a/example/kenney/gui/main/main.gui +++ b/example/kenney/gui/main/main.gui @@ -3981,6 +3981,915 @@ nodes { text_leading: 1.0 text_tracking: 0.0 } +nodes { + position { + x: 1200.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 1.0 + y: 1.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/empty" + id: "button_page" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_STRETCH + parent: "C_Anchor" + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -200.0 + y: 280.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "button_usual" + parent: "button_page" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/example/kenney/templates/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 130.0 + y: 60.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/button_blue" + id: "button_usual/button" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "button_usual" + layer: "" + inherit_alpha: true + slice9 { + x: 15.0 + y: 15.0 + z: 15.0 + w: 15.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 0.0 + y: 7.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.7 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Usual" + font: "game" + id: "button_usual/text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 0.101960786 + y: 0.2 + z: 0.6 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "button_usual/button" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 0.0 + shadow_alpha: 0.78 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: -200.0 + y: 180.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "button_custom_style" + parent: "button_page" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/example/kenney/templates/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 130.0 + y: 60.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/button_blue" + id: "button_custom_style/button" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "button_custom_style" + layer: "" + inherit_alpha: true + slice9 { + x: 15.0 + y: 15.0 + z: 15.0 + w: 15.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 0.0 + y: 7.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.5 + y: 0.5 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Custom Style" + font: "game" + id: "button_custom_style/text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 0.101960786 + y: 0.2 + z: 0.6 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "button_custom_style/button" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 0.0 + shadow_alpha: 0.78 + overridden_fields: 3 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: -200.0 + y: 80.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "button_long_tap" + parent: "button_page" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/example/kenney/templates/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 130.0 + y: 60.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/button_blue" + id: "button_long_tap/button" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "button_long_tap" + layer: "" + inherit_alpha: true + slice9 { + x: 15.0 + y: 15.0 + z: 15.0 + w: 15.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 0.0 + y: 7.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.5 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Long tap" + font: "game" + id: "button_long_tap/text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 0.101960786 + y: 0.2 + z: 0.6 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "button_long_tap/button" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 0.0 + shadow_alpha: 0.78 + overridden_fields: 3 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: -200.0 + y: -20.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "button_repeated_tap" + parent: "button_page" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/example/kenney/templates/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 130.0 + y: 60.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/button_blue" + id: "button_repeated_tap/button" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "button_repeated_tap" + layer: "" + inherit_alpha: true + slice9 { + x: 15.0 + y: 15.0 + z: 15.0 + w: 15.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 0.0 + y: 7.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.5 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Repeated" + font: "game" + id: "button_repeated_tap/text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 0.101960786 + y: 0.2 + z: 0.6 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "button_repeated_tap/button" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 0.0 + shadow_alpha: 0.78 + overridden_fields: 3 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: -200.0 + y: -120.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "button_double_tap" + parent: "button_page" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/example/kenney/templates/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 130.0 + y: 60.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/button_blue" + id: "button_double_tap/button" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "button_double_tap" + layer: "" + inherit_alpha: true + slice9 { + x: 15.0 + y: 15.0 + z: 15.0 + w: 15.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 0.0 + y: 7.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.5 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Double tap" + font: "game" + id: "button_double_tap/text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 0.101960786 + y: 0.2 + z: 0.6 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "button_double_tap/button" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 0.0 + shadow_alpha: 0.78 + overridden_fields: 3 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 1800.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 1.0 + y: 1.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "kenney/empty" + id: "scroll_page" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_STRETCH + parent: "C_Anchor" + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} nodes { position { x: 0.0 diff --git a/example/kenney/gui/main/main.gui_script b/example/kenney/gui/main/main.gui_script index 30fd8af..8760379 100644 --- a/example/kenney/gui/main/main.gui_script +++ b/example/kenney/gui/main/main.gui_script @@ -5,6 +5,8 @@ local default_style = require("druid.styles.default.style") local main_page = require("example.kenney.page.main") local text_page = require("example.kenney.page.texts") +local button_page = require("example.kenney.page.button") +local scroll_page = require("example.kenney.page.scroll") local pages = { "main_page", @@ -43,6 +45,8 @@ function init(self) self.page = 1 main_page.setup_page(self) text_page.setup_page(self) + button_page.setup_page(self) + scroll_page.setup_page(self) end diff --git a/example/kenney/page/button.lua b/example/kenney/page/button.lua new file mode 100644 index 0000000..308b1eb --- /dev/null +++ b/example/kenney/page/button.lua @@ -0,0 +1,23 @@ +local sprite_change_style = {} + +local M = {} + + +local function setup_buttons(self) + self.druid:new_button("button_usual/button") + + local custom_style = self.druid:new_button("button_custom_style/button") + custom_style:set_style(sprite_change_style) + + -- HOVER_IMAGE and DEFAULT_IMAGE - from our custom style params + custom_style.HOVER_IMAGE = "button_yellow" + custom_style.DEFAULT_IMAGE = "button_blue" +end + + +function M.setup_page(self) + setup_buttons(self) +end + + +return M diff --git a/example/kenney/page/scroll.lua b/example/kenney/page/scroll.lua new file mode 100644 index 0000000..8f56646 --- /dev/null +++ b/example/kenney/page/scroll.lua @@ -0,0 +1,8 @@ +local M = {} + + +function M.setup_page(self) +end + + +return M