mirror of
https://github.com/Insality/druid.git
synced 2025-06-27 10:27:47 +02:00
Blocker by default is enabled, update color palette, add rich text split by characters option, able to pass a data to GO widgets
This commit is contained in:
parent
fe955b6e64
commit
2e1f280944
@ -20,7 +20,7 @@ local M = component.create("blocker")
|
|||||||
---@param node node|string The node to use as a blocker
|
---@param node node|string The node to use as a blocker
|
||||||
function M:init(node)
|
function M:init(node)
|
||||||
self.node = self:get_node(node)
|
self.node = self:get_node(node)
|
||||||
self._is_enabled = gui.is_enabled(self.node, true)
|
self._is_enabled = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,9 +8,13 @@ local M = {}
|
|||||||
|
|
||||||
|
|
||||||
---Get color by string (hex or from palette)
|
---Get color by string (hex or from palette)
|
||||||
---@param color_id string Color id from palette or hex color
|
---@param color_id string|vector4 Color id from palette or hex color
|
||||||
---@return vector4
|
---@return vector4
|
||||||
function M.get_color(color_id)
|
function M.get_color(color_id)
|
||||||
|
if type(color_id) == "vector4" then
|
||||||
|
return color_id
|
||||||
|
end
|
||||||
|
|
||||||
if PALETTE_DATA[color_id] then
|
if PALETTE_DATA[color_id] then
|
||||||
return PALETTE_DATA[color_id]
|
return PALETTE_DATA[color_id]
|
||||||
end
|
end
|
||||||
@ -175,21 +179,15 @@ function M.rgb2hex(red, green, blue)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local load_palette_from_json = function(path)
|
local DEFAULT_PALETTE_PATH = sys.get_config_string("druid.palette_path")
|
||||||
local data = sys.load_resource(path)
|
if DEFAULT_PALETTE_PATH then
|
||||||
|
local loaded_palette = sys.load_resource(DEFAULT_PALETTE_PATH)
|
||||||
|
local data = loaded_palette and json.decode(loaded_palette)
|
||||||
if not data then
|
if not data then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
return json.decode(data)
|
M.add_palette(data)
|
||||||
end
|
|
||||||
|
|
||||||
local DEFAULT_PALETTE_PATH = sys.get_config_string("druid.palette_path")
|
|
||||||
if DEFAULT_PALETTE_PATH then
|
|
||||||
local loaded_palette = load_palette_from_json(DEFAULT_PALETTE_PATH)
|
|
||||||
if loaded_palette and loaded_palette["default"] then
|
|
||||||
M.add_palette(loaded_palette["default"])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,6 +181,7 @@ function M.create(text, settings, style)
|
|||||||
shadow = settings.shadow,
|
shadow = settings.shadow,
|
||||||
outline = settings.outline,
|
outline = settings.outline,
|
||||||
font = gui.get_font(settings.text_prefab),
|
font = gui.get_font(settings.text_prefab),
|
||||||
|
split_to_characters = settings.split_to_characters,
|
||||||
-- Image params
|
-- Image params
|
||||||
---@type druid.rich_text.word.image
|
---@type druid.rich_text.word.image
|
||||||
image = nil,
|
image = nil,
|
||||||
|
@ -29,6 +29,7 @@ local function add_word(text, settings, words)
|
|||||||
end
|
end
|
||||||
|
|
||||||
words[#words + 1] = data
|
words[#words + 1] = data
|
||||||
|
return data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -44,8 +45,17 @@ local function split_line(line, settings, words)
|
|||||||
else
|
else
|
||||||
local wi = #words
|
local wi = #words
|
||||||
for word in trimmed_text:gmatch("%S+") do
|
for word in trimmed_text:gmatch("%S+") do
|
||||||
|
if settings.split_to_characters then
|
||||||
|
for i = 1, #word do
|
||||||
|
local symbol = utf8.sub(word, i, i)
|
||||||
|
local w = add_word(symbol, settings, words)
|
||||||
|
w.nobr = true
|
||||||
|
end
|
||||||
|
add_word(" ", settings, words)
|
||||||
|
else
|
||||||
add_word(word .. " ", settings, words)
|
add_word(word .. " ", settings, words)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
local first = words[wi + 1]
|
local first = words[wi + 1]
|
||||||
first.text = ws_start .. first.text
|
first.text = ws_start .. first.text
|
||||||
first.source_text = first.text
|
first.source_text = first.text
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
-- Author: Britzl
|
-- Author: Britzl
|
||||||
-- Modified by: Insality
|
-- Modified by: Insality
|
||||||
|
|
||||||
local color = require("druid.custom.rich_text.module.rt_color")
|
--local color = require("druid.custom.rich_text.module.rt_color")
|
||||||
|
local color = require("druid.color")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
local tags = {}
|
local tags = {}
|
||||||
@ -44,19 +45,19 @@ end
|
|||||||
-- Example: <color=FF0000>Rich Text</color>
|
-- Example: <color=FF0000>Rich Text</color>
|
||||||
M.register("color", function(params, settings, style)
|
M.register("color", function(params, settings, style)
|
||||||
params = style.COLORS[params] or params
|
params = style.COLORS[params] or params
|
||||||
settings.color = color.parse(params)
|
settings.color = color.get_color(params)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
M.register("shadow", function(params, settings, style)
|
M.register("shadow", function(params, settings, style)
|
||||||
params = style.COLORS[params] or params
|
params = style.COLORS[params] or params
|
||||||
settings.shadow = color.parse(params)
|
settings.shadow = color.get_color(params)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
M.register("outline", function(params, settings, style)
|
M.register("outline", function(params, settings, style)
|
||||||
params = style.COLORS[params] or params
|
params = style.COLORS[params] or params
|
||||||
settings.outline = color.parse(params)
|
settings.outline = color.get_color(params)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ local rich_text = require("druid.custom.rich_text.module.rt")
|
|||||||
---@field image_pixel_grid_snap boolean
|
---@field image_pixel_grid_snap boolean
|
||||||
---@field combine_words boolean
|
---@field combine_words boolean
|
||||||
---@field default_animation string
|
---@field default_animation string
|
||||||
|
---@field split_by_character boolean
|
||||||
---@field text_prefab node
|
---@field text_prefab node
|
||||||
---@field adjust_scale number
|
---@field adjust_scale number
|
||||||
---@field default_texture string
|
---@field default_texture string
|
||||||
@ -194,6 +195,15 @@ function M:tagged(tag)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---Set if the rich text should split to characters, not words
|
||||||
|
---@param value boolean
|
||||||
|
---@return druid.rich_text self
|
||||||
|
function M:set_split_to_characters(value)
|
||||||
|
self._settings.split_to_characters = value
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
---Get all current created words, each word is a table that contains the information about the word
|
---Get all current created words, each word is a table that contains the information about the word
|
||||||
---@return druid.rich_text.word[]
|
---@return druid.rich_text.word[]
|
||||||
function M:get_words()
|
function M:get_words()
|
||||||
@ -239,6 +249,7 @@ function M:_create_settings()
|
|||||||
outline = gui.get_outline(self.root),
|
outline = gui.get_outline(self.root),
|
||||||
text_leading = gui.get_leading(self.root),
|
text_leading = gui.get_leading(self.root),
|
||||||
is_multiline = gui.get_line_break(self.root),
|
is_multiline = gui.get_line_break(self.root),
|
||||||
|
split_to_characters = false,
|
||||||
|
|
||||||
-- Image settings
|
-- Image settings
|
||||||
image_pixel_grid_snap = false, -- disabled now
|
image_pixel_grid_snap = false, -- disabled now
|
||||||
|
@ -114,6 +114,12 @@ local function wrap_widget(widget)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for key, value in pairs(widget) do
|
||||||
|
if event.is_event(value) then
|
||||||
|
wrapped_widget[key] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return wrapped_widget
|
return wrapped_widget
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -127,22 +133,21 @@ end
|
|||||||
---@generic T: druid.widget
|
---@generic T: druid.widget
|
||||||
---@param widget_class T The class of the widget to return
|
---@param widget_class T The class of the widget to return
|
||||||
---@param gui_url url GUI url
|
---@param gui_url url GUI url
|
||||||
---@return T? widget The new created widget,
|
---@param params any|nil Additional parameters to pass to the widget's init function
|
||||||
function M.get_widget(widget_class, gui_url)
|
---@return T widget The new created widget,
|
||||||
|
function M.get_widget(widget_class, gui_url, params)
|
||||||
gui_url = gui_url or msg.url()
|
gui_url = gui_url or msg.url()
|
||||||
local registered_druids = REGISTERED_GUI_WIDGETS[gui_url.socket]
|
local registered_druids = REGISTERED_GUI_WIDGETS[gui_url.socket]
|
||||||
if not registered_druids then
|
assert(registered_druids, "Druid widget not registered for this game object")
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
for index = 1, #registered_druids do
|
for index = 1, #registered_druids do
|
||||||
local druid = registered_druids[index]
|
local druid = registered_druids[index]
|
||||||
if druid.fragment == gui_url.fragment and druid.path == gui_url.path then
|
if druid.fragment == gui_url.fragment and druid.path == gui_url.path then
|
||||||
return druid.new_widget:trigger(widget_class)
|
return druid.new_widget:trigger(widget_class, nil, nil, params)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return nil
|
error("Druid widget not found for this game object: " .. gui_url)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -156,8 +161,8 @@ function M.register_druid_as_widget(druid)
|
|||||||
table.insert(REGISTERED_GUI_WIDGETS[gui_url.socket], {
|
table.insert(REGISTERED_GUI_WIDGETS[gui_url.socket], {
|
||||||
path = gui_url.path,
|
path = gui_url.path,
|
||||||
fragment = gui_url.fragment,
|
fragment = gui_url.fragment,
|
||||||
new_widget = event.create(function(widget_class)
|
new_widget = event.create(function(widget_class, template, nodes, params)
|
||||||
return wrap_widget(druid:new_widget(widget_class))
|
return wrap_widget(druid:new_widget(widget_class, template, nodes, params))
|
||||||
end),
|
end),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -343,6 +343,11 @@ function M:set_hidden(is_hidden)
|
|||||||
self.container:set_size(new_size.x, new_size.y, gui.PIVOT_N)
|
self.container:set_size(new_size.x, new_size.y, gui.PIVOT_N)
|
||||||
|
|
||||||
gui.set_enabled(self.content, not self._is_hidden)
|
gui.set_enabled(self.content, not self._is_hidden)
|
||||||
|
gui.set_enabled(self.button_refresh.node, not self._is_hidden)
|
||||||
|
|
||||||
|
if not self._is_hidden then
|
||||||
|
self.is_dirty = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user