I guess someone might like this library. I write it to avoid the feeling of asking gui
to do a lot. Now just act like a node can do everything by itself
Instead of
local node = gui.get_node("my_node")
gui.set_alpha(node, 0.5)
gui.animate(node, "color.w", 1, gui.EASING_LINEAR, 2)
gui.set_enabled(node, true)
Write this
local node = wrap.node("my_node")
node:set_alpha(0.5):animate("color.w", 1, gui.EASING_LINEAR, 2):set_enabled(true)
You can also get a list of wrapped nodes
local w = wrap.node({ "my_node", title = "text_title", button = gui.get_node("button") })
w.my_node:set_alpha(0.5)
w.title:set_text("Admin")
w.button:set_size(vmath.vector3(100, 50, 0))
Currently, it has all methods working for GUI nodes, besides, it supports some convenient methods you may need it sometimes, like
add_position(...),
get_position_x()
get_position_y()
get_position_z()
set_position_x(...)
set_position_y(...)
set_position_z(...)
add_position_x(...)
add_position_y(...)
add_position_z(...)
...
Check it out: baochungit/defold-wrap (github.com)
16 Likes
britzl
January 25, 2024, 6:41am
2
That is pretty neat! Thanks for sharing!
3 Likes
Pawel
January 25, 2024, 10:58am
3
Aa! Amazing! I make similar wrappers almost all the time for many things, because OOP it is especially useful for nodes that are many times not dynamic objects. You made it look nice and convenient
4 Likes
Defold Wrap has just expanded a bit!
It now can be used to create a GUI Applet (yes, applet is just what I call it).
Its structure is kind of this:
Applet – Scene – Objects (each object contains nodes and sub-objects)
Actually, I’m not good at explaining, so you can get it via this example code:
local applet = wrap.gui_applet("root", {
init = function(scene)
scene:new_object(Text, {
position = vmath.vector3(0, 100, 0),
text = "Demo of single scene."
})
scene.box = scene:new_object(Box, {
position = vmath.vector3(0, -30, 0),
size = vmath.vector3(50),
color = "#ff3dd3"
})
scene.direction = 1
end,
update = function(scene, dt)
local box_root_node = scene.box.root
box_root_node:add_position_x(80 * dt * scene.direction)
if math.abs(box_root_node:get_position_x()) > 90 then
scene.direction = -scene.direction
end
end,
final = function(scene)
end
})
The above code is a demo for single scene applet. If you intend to have an applet with many scenes, you can do as following:
local applet = wrap.gui_applet("root")
applet:register_scene("loading", SceneLoading)
applet:register_scene("lobby", SceneLobby)
applet:show_scene("loading")
(For more information, please refer the example in the github repository.)
Let’s talk about the pros and cons of it.
Pros:
All your stuff (scenes, objects) will just belong to one script, so you can avoid the issue of different context when using callbacks.
Working with your nodes by Wrap way (more convenient)
Cons:
You almost can’t get the benefit of GUI editor. (I’m finding a way for using .gui file, will update later)
Your GUI nodes amount could be a lot (consider to increase Max Nodes value to avoid the limitation)
What to do
Add scene transitions
Find a way to use .gui file
Your suggestions?
1 Like