mirror of
https://github.com/Insality/druid
synced 2025-06-27 02:17:52 +02:00
- new log function for debug
- clear metatable for the factory
This commit is contained in:
parent
5e2dc34437
commit
cb82acd5da
228
druid/druid.lua
228
druid/druid.lua
@ -1,150 +1,154 @@
|
||||
local data = require("druid.data")
|
||||
local druid_input = require("druid.helper.druid_input")
|
||||
local settings = require("druid.settings")
|
||||
|
||||
local M = {}
|
||||
|
||||
local log = settings.log
|
||||
local _factory = {}
|
||||
|
||||
local STRING = "string"
|
||||
|
||||
--- New druid era, registering components
|
||||
local components = {
|
||||
-- basic
|
||||
button = require("druid.base.button"),
|
||||
android_back = require("druid.base.android_back"),
|
||||
text = require("druid.base.text"),
|
||||
timer = require("druid.base.timer"),
|
||||
-- basic
|
||||
button = require("druid.base.button"),
|
||||
android_back = require("druid.base.android_back"),
|
||||
text = require("druid.base.text"),
|
||||
timer = require("druid.base.timer"),
|
||||
}
|
||||
|
||||
|
||||
local function register_basic_components()
|
||||
for k, v in pairs(components) do
|
||||
M.register(k, v)
|
||||
end
|
||||
for k, v in pairs(components) do
|
||||
M.register(k, v)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function M.register(name, module)
|
||||
-- TODO: Find better solution to creating elements?
|
||||
M["new_" .. name] = function(factory, node_name, ...)
|
||||
M.create(factory, module, node_name, ...)
|
||||
end
|
||||
print("[Druid]: register component", name)
|
||||
-- TODO: Find better solution to creating elements?
|
||||
_factory["new_" .. name] = function(factory, node_name, ...)
|
||||
M.create(factory, module, node_name, ...)
|
||||
end
|
||||
log("Register component", name)
|
||||
end
|
||||
|
||||
--- Called on_message
|
||||
function M.on_message(factory, message_id, message, sender)
|
||||
if message_id == data.LAYOUT_CHANGED then
|
||||
if factory[data.LAYOUT_CHANGED] then
|
||||
M.translate(factory)
|
||||
for i, v in ipairs(factory[data.LAYOUT_CHANGED]) do
|
||||
v:on_layout_updated(message)
|
||||
end
|
||||
end
|
||||
elseif message_id == data.TRANSLATABLE then
|
||||
M.translate(factory)
|
||||
else
|
||||
if factory[data.ON_MESSAGE] then
|
||||
for i, v in ipairs(factory[data.ON_MESSAGE]) do
|
||||
v:on_message(message_id, message, sender)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Called ON_INPUT
|
||||
function M.on_input(factory, action_id, action)
|
||||
if factory[data.ON_SWIPE] then
|
||||
local v, result
|
||||
local len = #factory[data.ON_SWIPE]
|
||||
for i = 1, len do
|
||||
v = factory[data.ON_SWIPE][i]
|
||||
result = result or v:on_input(action_id, action)
|
||||
end
|
||||
if result then
|
||||
return true
|
||||
end
|
||||
end
|
||||
if factory[data.ON_INPUT] then
|
||||
local v
|
||||
local len = #factory[data.ON_INPUT]
|
||||
for i = 1, len do
|
||||
v = factory[data.ON_INPUT][i]
|
||||
if action_id == v.event and v:on_input(action_id, action) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--- Called on_update
|
||||
function M.update(factory, dt)
|
||||
if factory[data.ON_UPDATE] then
|
||||
for i, v in ipairs(factory[data.ON_UPDATE]) do
|
||||
v:update(dt)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Create UI instance for ui elements
|
||||
-- @return instance with all ui components
|
||||
function M.new(self)
|
||||
local factory = setmetatable({}, {__index = M})
|
||||
factory.parent = self
|
||||
return factory
|
||||
end
|
||||
|
||||
|
||||
local function input_init(factory)
|
||||
if not factory.input_inited then
|
||||
factory.input_inited = true
|
||||
druid_input.focus()
|
||||
end
|
||||
local factory = setmetatable({}, {__index = _factory})
|
||||
factory.parent = self
|
||||
return factory
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local function input_init(factory)
|
||||
if not factory.input_inited then
|
||||
factory.input_inited = true
|
||||
druid_input.focus()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function create(module, factory, name, ...)
|
||||
local instance = setmetatable({}, {__index = module})
|
||||
instance.parent = factory
|
||||
if name then
|
||||
if type(name) == STRING then
|
||||
instance.name = name
|
||||
instance.node = gui.get_node(name)
|
||||
else
|
||||
--name already is node
|
||||
instance.name = nil
|
||||
instance.node = name
|
||||
end
|
||||
end
|
||||
factory[#factory + 1] = instance
|
||||
local instance = setmetatable({}, {__index = module})
|
||||
instance.parent = factory
|
||||
if name then
|
||||
if type(name) == STRING then
|
||||
instance.name = name
|
||||
instance.node = gui.get_node(name)
|
||||
else
|
||||
--name already is node
|
||||
instance.name = nil
|
||||
instance.node = name
|
||||
end
|
||||
end
|
||||
factory[#factory + 1] = instance
|
||||
|
||||
local register_to = module.interest or {}
|
||||
for i, v in ipairs(register_to) do
|
||||
if not factory[v] then
|
||||
factory[v] = {}
|
||||
end
|
||||
factory[v][#factory[v] + 1] = instance
|
||||
local register_to = module.interest or {}
|
||||
for i, v in ipairs(register_to) do
|
||||
if not factory[v] then
|
||||
factory[v] = {}
|
||||
end
|
||||
factory[v][#factory[v] + 1] = instance
|
||||
|
||||
if v == data.ON_INPUT then
|
||||
input_init(factory)
|
||||
end
|
||||
end
|
||||
return instance
|
||||
if v == data.ON_INPUT then
|
||||
input_init(factory)
|
||||
end
|
||||
end
|
||||
return instance
|
||||
end
|
||||
|
||||
|
||||
function M.create(factory, module, name, ...)
|
||||
local instance = create(module, factory, name)
|
||||
local instance = create(module, factory, name)
|
||||
|
||||
if instance.init then
|
||||
instance:init(...)
|
||||
end
|
||||
if instance.init then
|
||||
instance:init(...)
|
||||
end
|
||||
end
|
||||
|
||||
register_basic_components()
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
--- Called on_message
|
||||
function _factory.on_message(factory, message_id, message, sender)
|
||||
if message_id == data.LAYOUT_CHANGED then
|
||||
if factory[data.LAYOUT_CHANGED] then
|
||||
M.translate(factory)
|
||||
for i, v in ipairs(factory[data.LAYOUT_CHANGED]) do
|
||||
v:on_layout_updated(message)
|
||||
end
|
||||
end
|
||||
elseif message_id == data.TRANSLATABLE then
|
||||
M.translate(factory)
|
||||
else
|
||||
if factory[data.ON_MESSAGE] then
|
||||
for i, v in ipairs(factory[data.ON_MESSAGE]) do
|
||||
v:on_message(message_id, message, sender)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
register_basic_components()
|
||||
--- Called ON_INPUT
|
||||
function _factory.on_input(factory, action_id, action)
|
||||
if factory[data.ON_SWIPE] then
|
||||
local v, result
|
||||
local len = #factory[data.ON_SWIPE]
|
||||
for i = 1, len do
|
||||
v = factory[data.ON_SWIPE][i]
|
||||
result = result or v:on_input(action_id, action)
|
||||
end
|
||||
if result then
|
||||
return true
|
||||
end
|
||||
end
|
||||
if factory[data.ON_INPUT] then
|
||||
local v
|
||||
local len = #factory[data.ON_INPUT]
|
||||
for i = 1, len do
|
||||
v = factory[data.ON_INPUT][i]
|
||||
if action_id == v.event and v:on_input(action_id, action) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
--- Called on_update
|
||||
function _factory.update(factory, dt)
|
||||
if factory[data.ON_UPDATE] then
|
||||
for i, v in ipairs(factory[data.ON_UPDATE]) do
|
||||
v:update(dt)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
@ -1,5 +1,6 @@
|
||||
local M = {}
|
||||
|
||||
M.is_debug = false
|
||||
|
||||
M.button = {
|
||||
IS_HOVER = true,
|
||||
@ -23,5 +24,12 @@ function M.play_sound(name)
|
||||
-- override to play sound with name
|
||||
end
|
||||
|
||||
function M.log(...)
|
||||
if M.is_debug then
|
||||
print("[Druid]: ", ...)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
return M
|
@ -6,6 +6,8 @@ local lang = {
|
||||
}
|
||||
|
||||
local function setup_druid(self)
|
||||
druid_settings.is_debug = true
|
||||
|
||||
druid_settings.play_sound = function(name)
|
||||
sound.play("sounds#" .. name)
|
||||
end
|
||||
@ -19,7 +21,6 @@ function init(self)
|
||||
setup_druid(self)
|
||||
self.druid = druid.new(self)
|
||||
|
||||
|
||||
self.druid:new_button("button_1", function()
|
||||
print("On button 1")
|
||||
end)
|
||||
|
Loading…
x
Reference in New Issue
Block a user