mirror of
https://github.com/Insality/druid.git
synced 2025-06-27 10:27:47 +02:00
93 lines
2.7 KiB
Lua
93 lines
2.7 KiB
Lua
--[[ Single tab screen module. Assumed to be used with Tab Bar module.
|
|
|
|
-- Create tab screen with parental gui node:
|
|
self.tab = tab.create "tab_bkg"
|
|
|
|
-- Show and hide tab manually:
|
|
self.tab.slide_in(self, vmath.vector3(0, -540, 0))
|
|
self.tab.slide_out(self, vmath.vector3(0, -540, 0))
|
|
|
|
-- Or receive show and hide messages:
|
|
function on_message(self, message_id, message, sender)
|
|
self.tab.on_message(self, message_id, message)
|
|
end
|
|
|
|
]]
|
|
|
|
local M = {}
|
|
M.T_SLIDE_IN = hash("t_slide_in")
|
|
M.T_SLIDE_OUT = hash("t_slide_out")
|
|
|
|
M.STATE_START = hash("state_start")
|
|
M.STATE_FINISH = hash("state_finish")
|
|
|
|
local ENABLE = hash("enable")
|
|
local DISABLE = hash("disable")
|
|
local PATH_COMP = "#"
|
|
|
|
M.DEFAULT_EASING = gui.EASING_INOUTQUAD
|
|
M.DEFAULT_DURATION = 0.3
|
|
|
|
function M.slide_in(instance, out_pos, is_force)
|
|
msg.post(PATH_COMP, ENABLE)
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_IN, M.STATE_START)
|
|
end
|
|
if is_force then
|
|
gui.set_position(instance.node, instance.in_pos)
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_IN, M.STATE_FINISH)
|
|
end
|
|
else
|
|
instance.in_action = true
|
|
out_pos = out_pos or instance.put_pos
|
|
gui.set_position(instance.node, out_pos or instance.out_pos)
|
|
gui.animate(instance.node, gui.PROP_POSITION, instance.in_pos, instance.easing, instance.duration, 0,
|
|
function()
|
|
instance.in_action = false
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_IN, M.STATE_FINISH)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
end
|
|
|
|
function M.slide_out(instance, out_pos, is_force)
|
|
out_pos = out_pos or instance.put_pos
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_OUT, M.STATE_START)
|
|
end
|
|
if is_force then
|
|
gui.set_position(instance.node, out_pos)
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_OUT, M.STATE_FINISH)
|
|
end
|
|
msg.post(PATH_COMP, DISABLE)
|
|
else
|
|
instance.in_action = true
|
|
gui.set_position(instance.node, instance.in_pos)
|
|
gui.animate(instance.node, gui.PROP_POSITION, out_pos, instance.easing, instance.duration, 0,
|
|
function()
|
|
instance.in_action = false
|
|
if instance.callback then
|
|
instance.callback(instance.parent.parent, instance, M.T_SLIDE_OUT, M.STATE_FINISH)
|
|
end
|
|
msg.post(PATH_COMP, DISABLE)
|
|
end
|
|
)
|
|
end
|
|
end
|
|
|
|
function M.on_message(instance, message_id, message, sender)
|
|
if message_id == M.T_SLIDE_IN then
|
|
M.slide_in(instance, message.out_pos, message.is_force)
|
|
return true
|
|
elseif message_id == M.T_SLIDE_OUT then
|
|
M.slide_out(instance, message.out_pos, message.is_force)
|
|
return true
|
|
end
|
|
end
|
|
|
|
return M
|