mirror of
https://github.com/Insality/druid
synced 2025-06-27 10:27:48 +02:00
Update
This commit is contained in:
parent
9bb7c6e8bd
commit
1a138f7020
6
docs_md/components/base/back_handler_api.md
Normal file
6
docs_md/components/base/back_handler_api.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Back Handler Quick API reference
|
||||
|
||||
```lua
|
||||
back_handler:init([callback], [params])
|
||||
back_handler:on_input([action_id], [action])
|
||||
```
|
0
docs_md/components/base/back_handler_manual.md
Normal file
0
docs_md/components/base/back_handler_manual.md
Normal file
8
docs_md/components/base/blocker_api.md
Normal file
8
docs_md/components/base/blocker_api.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Blocker Quick API reference
|
||||
|
||||
```lua
|
||||
blocker:init(node)
|
||||
blocker:is_enabled()
|
||||
blocker:on_input([action_id], [action])
|
||||
blocker:set_enabled([state])
|
||||
```
|
0
docs_md/components/base/blocker_manual.md
Normal file
0
docs_md/components/base/blocker_manual.md
Normal file
0
docs_md/components/base/button_api.md
Normal file
0
docs_md/components/base/button_api.md
Normal file
0
docs_md/components/base/button_manual.md
Normal file
0
docs_md/components/base/button_manual.md
Normal file
14
docs_md/components/base/drag_api.md
Normal file
14
docs_md/components/base/drag_api.md
Normal file
@ -0,0 +1,14 @@
|
||||
# Drag Quick API reference
|
||||
|
||||
```lua
|
||||
drag:init(node_or_node_id, on_drag_callback)
|
||||
drag:is_enabled()
|
||||
drag:on_input([action_id], [action])
|
||||
drag:on_input_interrupt()
|
||||
drag:on_late_init()
|
||||
drag:on_style_change(style)
|
||||
drag:on_window_resized()
|
||||
drag:set_click_zone([node])
|
||||
drag:set_drag_cursors([is_enabled])
|
||||
drag:set_enabled([is_enabled])
|
||||
```
|
0
docs_md/components/base/drag_manual.md
Normal file
0
docs_md/components/base/drag_manual.md
Normal file
16
docs_md/components/base/hover_api.md
Normal file
16
docs_md/components/base/hover_api.md
Normal file
@ -0,0 +1,16 @@
|
||||
# Hover Quick API reference
|
||||
|
||||
```lua
|
||||
hover:init(node, on_hover_callback, on_mouse_hover)
|
||||
hover:is_enabled()
|
||||
hover:is_hovered()
|
||||
hover:is_mouse_hovered()
|
||||
hover:on_input([action_id], [action])
|
||||
hover:on_input_interrupt()
|
||||
hover:on_late_init()
|
||||
hover:on_style_change(style)
|
||||
hover:set_click_zone([zone])
|
||||
hover:set_enabled([state])
|
||||
hover:set_hover([state])
|
||||
hover:set_mouse_hover([state])
|
||||
```
|
0
docs_md/components/base/hover_manual.md
Normal file
0
docs_md/components/base/hover_manual.md
Normal file
20
docs_md/components/base/scroll_api.md
Normal file
20
docs_md/components/base/scroll_api.md
Normal file
@ -0,0 +1,20 @@
|
||||
# Scroll Quick API reference
|
||||
|
||||
```lua
|
||||
scroll:init(view_node, content_node)
|
||||
scroll:bind_grid([grid], [callback])
|
||||
scroll:get_percent()
|
||||
scroll:on_input([action_id], [action])
|
||||
scroll:on_layout_change()
|
||||
scroll:on_late_init()
|
||||
scroll:on_remove()
|
||||
scroll:on_style_change(style)
|
||||
scroll:scroll_to(point, [is_instant])
|
||||
scroll:scroll_to_index(index, [skip_cb])
|
||||
scroll:scroll_to_percent(percent, [is_instant])
|
||||
scroll:set_click_zone([zone])
|
||||
scroll:set_horizontal_scroll([is_horizontal])
|
||||
scroll:set_size(size, [offset])
|
||||
scroll:set_vertical_scroll([is_vertical])
|
||||
scroll:update(dt)
|
||||
```
|
0
docs_md/components/base/scroll_manual.md
Normal file
0
docs_md/components/base/scroll_manual.md
Normal file
17
docs_md/components/base/static_grid_api.md
Normal file
17
docs_md/components/base/static_grid_api.md
Normal file
@ -0,0 +1,17 @@
|
||||
# Static Grid Quick API reference
|
||||
|
||||
```lua
|
||||
static_grid:init(parent, element, [in_row])
|
||||
static_grid:add(item, [index], [shift_policy], [is_instant])
|
||||
static_grid:get_index(pos)
|
||||
static_grid:get_index_by_node(node)
|
||||
static_grid:get_pos(index)
|
||||
static_grid:get_size()
|
||||
static_grid:get_size_for(count)
|
||||
static_grid:on_layout_change()
|
||||
static_grid:on_style_change(style)
|
||||
static_grid:refresh()
|
||||
static_grid:remove(index, [shift_policy], [is_instant])
|
||||
static_grid:set_anchor(anchor)
|
||||
static_grid:set_items(nodes, [is_instant])
|
||||
static_grid:set_pivot(pivot)
|
0
docs_md/components/base/static_grid_manual.md
Normal file
0
docs_md/components/base/static_grid_manual.md
Normal file
17
docs_md/components/base/text_api.md
Normal file
17
docs_md/components/base/text_api.md
Normal file
@ -0,0 +1,17 @@
|
||||
# Text Quick API reference
|
||||
|
||||
```lua
|
||||
text:init(node, [value], [adjust_type])
|
||||
text:get_text()
|
||||
text:get_text_index_by_width(width)
|
||||
text:get_text_size([text])
|
||||
text:is_multiline()
|
||||
text:on_layout_change()
|
||||
text:on_style_change(style)
|
||||
text:set_alpha(alpha)
|
||||
text:set_color(color)
|
||||
text:set_pivot(pivot)
|
||||
text:set_scale(scale)
|
||||
text:set_size(size)
|
||||
text:set_text(new_text)
|
||||
text:set_text_adjust([adjust_type], [minimal_scale])
|
0
docs_md/components/base/text_manual.md
Normal file
0
docs_md/components/base/text_manual.md
Normal file
12
docs_md/components/custom/rich_input_api.md
Normal file
12
docs_md/components/custom/rich_input_api.md
Normal file
@ -0,0 +1,12 @@
|
||||
## Rich Input Quick API reference
|
||||
|
||||
```lua
|
||||
rich_input:get_text()
|
||||
rich_input:init(template, nodes)
|
||||
rich_input:on_input([action_id], [action])
|
||||
rich_input:select()
|
||||
rich_input:set_allowed_characters(characters)
|
||||
rich_input:set_font(font)
|
||||
rich_input:set_placeholder(placeholder_text)
|
||||
rich_input:set_text(text)
|
||||
```
|
0
docs_md/components/custom/rich_input_manual.md
Normal file
0
docs_md/components/custom/rich_input_manual.md
Normal file
15
docs_md/components/custom/rich_text_api.md
Normal file
15
docs_md/components/custom/rich_text_api.md
Normal file
@ -0,0 +1,15 @@
|
||||
## Rich Text Quick API reference
|
||||
|
||||
```lua
|
||||
rich_text:characters(word)
|
||||
rich_text:clear()
|
||||
rich_text:get_line_metric()
|
||||
rich_text:get_text()
|
||||
rich_text:get_words()
|
||||
rich_text:init(text_node, [value])
|
||||
rich_text:on_layout_change()
|
||||
rich_text:on_remove()
|
||||
rich_text:on_style_change(style)
|
||||
rich_text:set_text([text])
|
||||
rich_text:tagged(tag)
|
||||
```
|
0
docs_md/components/custom/rich_text_manual.md
Normal file
0
docs_md/components/custom/rich_text_manual.md
Normal file
26
docs_md/components/extended/container_api.md
Normal file
26
docs_md/components/extended/container_api.md
Normal file
@ -0,0 +1,26 @@
|
||||
# Container Quick API reference
|
||||
|
||||
```lua
|
||||
container:add_container(node_or_container, [mode], [on_resize_callback])
|
||||
container:clear_draggable_corners()
|
||||
container:fit_into_size(target_size)
|
||||
container:fit_into_window()
|
||||
container:get_position()
|
||||
container:get_scale()
|
||||
container:get_size()
|
||||
container:init(node, [mode], [callback])
|
||||
container:on_late_init()
|
||||
container:on_remove()
|
||||
container:on_style_change(style)
|
||||
container:on_window_resized()
|
||||
container:refresh()
|
||||
container:refresh_origins()
|
||||
container:set_draggable_corners([is_draggable])
|
||||
container:set_min_size([min_size_x], [min_size_y])
|
||||
container:set_node_fill([fill_x], [fill_y])
|
||||
container:set_node_offset([offset])
|
||||
container:set_parent_container([container])
|
||||
container:set_pivot(pivot)
|
||||
container:set_position(pos_x, pos_y)
|
||||
container:set_size([width], [height], [anchor_pivot])
|
||||
container:update_child_containers()
|
0
docs_md/components/extended/container_manual.md
Normal file
0
docs_md/components/extended/container_manual.md
Normal file
16
docs_md/components/extended/data_list_api.md
Normal file
16
docs_md/components/extended/data_list_api.md
Normal file
@ -0,0 +1,16 @@
|
||||
# Data List Quick API reference
|
||||
|
||||
```lua
|
||||
data_list:add(data, [index], [shift_policy])
|
||||
data_list:clear()
|
||||
data_list:get_created_components()
|
||||
data_list:get_created_nodes()
|
||||
data_list:get_data()
|
||||
data_list:get_index(data)
|
||||
data_list:init(scroll, grid, create_function)
|
||||
data_list:on_remove()
|
||||
data_list:remove([index], [shift_policy])
|
||||
data_list:remove_by_data(data, [shift_policy])
|
||||
data_list:scroll_to_index(index)
|
||||
data_list:set_data(data)
|
||||
data_list:set_use_cache(is_use_cache)
|
0
docs_md/components/extended/data_list_manual.md
Normal file
0
docs_md/components/extended/data_list_manual.md
Normal file
10
docs_md/components/extended/hotkey_api.md
Normal file
10
docs_md/components/extended/hotkey_api.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Hotkey Quick API reference
|
||||
|
||||
```lua
|
||||
hotkey:add_hotkey(keys, [callback_argument])
|
||||
hotkey:init(keys, callback, [callback_argument])
|
||||
hotkey:is_processing()
|
||||
hotkey:on_focus_gained()
|
||||
hotkey:on_input([action_id], [action])
|
||||
hotkey:on_style_change(style)
|
||||
hotkey:set_repeat(is_enabled_repeated)
|
0
docs_md/components/extended/hotkey_manual.md
Normal file
0
docs_md/components/extended/hotkey_manual.md
Normal file
23
docs_md/components/extended/input_api.md
Normal file
23
docs_md/components/extended/input_api.md
Normal file
@ -0,0 +1,23 @@
|
||||
# Input Quick API reference
|
||||
|
||||
```lua
|
||||
input:get_text()
|
||||
input:get_text_selected()
|
||||
input:get_text_selected_replaced(text)
|
||||
input:init(click_node, text_node, [keyboard_type])
|
||||
input:is_empty()
|
||||
input:is_full()
|
||||
input:is_selected()
|
||||
input:on_focus_lost()
|
||||
input:on_input([action_id], [action])
|
||||
input:on_input_interrupt()
|
||||
input:on_style_change(style)
|
||||
input:select()
|
||||
input:select_cursor([index])
|
||||
input:set_allowed_characters([pattern])
|
||||
input:set_keyboard_type([keyboard_type])
|
||||
input:set_marked_text([text])
|
||||
input:set_max_length([length])
|
||||
input:set_text([text])
|
||||
input:unselect()
|
||||
```
|
0
docs_md/components/extended/input_manual.md
Normal file
0
docs_md/components/extended/input_manual.md
Normal file
9
docs_md/components/extended/lang_text_api.md
Normal file
9
docs_md/components/extended/lang_text_api.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Lang Text Quick API reference
|
||||
|
||||
```lua
|
||||
lang_text:format(...)
|
||||
lang_text:init(node, [locale_id], [adjust_type])
|
||||
lang_text:on_language_change()
|
||||
lang_text:set_text(text)
|
||||
lang_text:set_to(text)
|
||||
lang_text:translate(locale_id, ...)
|
0
docs_md/components/extended/lang_text_manual.md
Normal file
0
docs_md/components/extended/lang_text_manual.md
Normal file
18
docs_md/components/extended/layout_api.md
Normal file
18
docs_md/components/extended/layout_api.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Layout Quick API reference
|
||||
|
||||
```lua
|
||||
layout:add(node_or_node_id)
|
||||
layout:get_content_size()
|
||||
layout:get_entities()
|
||||
layout:get_size()
|
||||
layout:init(node_or_node_id, layout_type)
|
||||
layout:refresh_layout()
|
||||
layout:remove(node_or_node_id)
|
||||
layout:set_dirty()
|
||||
layout:set_hug_content(is_hug_width, is_hug_height)
|
||||
layout:set_justify(is_justify)
|
||||
layout:set_margin([margin_x], [margin_y])
|
||||
layout:set_node_index(node, index)
|
||||
layout:set_padding([padding_x], [padding_y], [padding_z], [padding_w])
|
||||
layout:set_type(type)
|
||||
layout:update()
|
0
docs_md/components/extended/layout_manual.md
Normal file
0
docs_md/components/extended/layout_manual.md
Normal file
16
docs_md/components/extended/progress_api.md
Normal file
16
docs_md/components/extended/progress_api.md
Normal file
@ -0,0 +1,16 @@
|
||||
# Progress Quick API reference
|
||||
|
||||
```lua
|
||||
progress:empty()
|
||||
progress:fill()
|
||||
progress:get()
|
||||
progress:init(node, key, [init_value])
|
||||
progress:on_layout_change()
|
||||
progress:on_remove()
|
||||
progress:on_style_change(style)
|
||||
progress:set_max_size(max_size)
|
||||
progress:set_steps(steps, callback)
|
||||
progress:set_to(to)
|
||||
progress:to(to, [callback])
|
||||
progress:update(dt)
|
||||
```
|
0
docs_md/components/extended/progress_manual.md
Normal file
0
docs_md/components/extended/progress_manual.md
Normal file
13
docs_md/components/extended/slider_api.md
Normal file
13
docs_md/components/extended/slider_api.md
Normal file
@ -0,0 +1,13 @@
|
||||
# Slider Quick API reference
|
||||
|
||||
```lua
|
||||
slider:init(node, end_pos, [callback])
|
||||
slider:is_enabled()
|
||||
slider:on_input([action_id], [action])
|
||||
slider:on_layout_change()
|
||||
slider:on_remove()
|
||||
slider:on_window_resized()
|
||||
slider:set(value, [is_silent])
|
||||
slider:set_enabled(is_enabled)
|
||||
slider:set_input_node([input_node])
|
||||
slider:set_steps(steps)
|
0
docs_md/components/extended/slider_manual.md
Normal file
0
docs_md/components/extended/slider_manual.md
Normal file
9
docs_md/components/extended/swipe_api.md
Normal file
9
docs_md/components/extended/swipe_api.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Swipe Quick API reference
|
||||
|
||||
```lua
|
||||
swipe:init(node_or_node_id, on_swipe_callback)
|
||||
swipe:on_input([action_id], [action])
|
||||
swipe:on_input_interrupt()
|
||||
swipe:on_late_init()
|
||||
swipe:on_style_change(style)
|
||||
swipe:set_click_zone([zone])
|
0
docs_md/components/extended/swipe_manual.md
Normal file
0
docs_md/components/extended/swipe_manual.md
Normal file
10
docs_md/components/extended/timer_api.md
Normal file
10
docs_md/components/extended/timer_api.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Timer Quick API reference
|
||||
|
||||
```lua
|
||||
timer:init(node, [seconds_from], [seconds_to], [callback])
|
||||
timer:on_layout_change()
|
||||
timer:set_interval(from, to)
|
||||
timer:set_state([is_on])
|
||||
timer:set_to(set_to)
|
||||
timer:update(dt)
|
||||
```
|
0
docs_md/components/extended/timer_manual.md
Normal file
0
docs_md/components/extended/timer_manual.md
Normal file
0
docs_md/components/widgets/fps_panel_api.md
Normal file
0
docs_md/components/widgets/fps_panel_api.md
Normal file
0
docs_md/components/widgets/fps_panel_manual.md
Normal file
0
docs_md/components/widgets/fps_panel_manual.md
Normal file
0
docs_md/components/widgets/memory_panel_api.md
Normal file
0
docs_md/components/widgets/memory_panel_api.md
Normal file
0
docs_md/components/widgets/memory_panel_manual.md
Normal file
0
docs_md/components/widgets/memory_panel_manual.md
Normal file
0
docs_md/components/widgets/mini_graph_api.md
Normal file
0
docs_md/components/widgets/mini_graph_api.md
Normal file
0
docs_md/components/widgets/mini_graph_manual.md
Normal file
0
docs_md/components/widgets/mini_graph_manual.md
Normal file
0
docs_md/components/widgets/node_repeat_api.md
Normal file
0
docs_md/components/widgets/node_repeat_api.md
Normal file
0
docs_md/components/widgets/node_repeat_manual.md
Normal file
0
docs_md/components/widgets/node_repeat_manual.md
Normal file
0
docs_md/components/widgets/properties_panel_api.md
Normal file
0
docs_md/components/widgets/properties_panel_api.md
Normal file
@ -44,34 +44,37 @@ self.druid = druid.new(context, [style])
|
||||
|
||||
## Druid Instance
|
||||
```lua
|
||||
-- Lifecycle
|
||||
self.druid:final()
|
||||
self.druid:update(dt)
|
||||
self.druid:on_input(action_id, action)
|
||||
self.druid:on_message(message_id, message, sender)
|
||||
self.druid:on_window_event([window_event])
|
||||
|
||||
-- Component creation
|
||||
self.druid:new(component, ...)
|
||||
self.druid:new_widget(widget, [template], [nodes], ...)
|
||||
self.druid:new_button(node, [callback], [params], [anim_node])
|
||||
self.druid:new_text(node, [value], [no_adjust])
|
||||
self.druid:new_grid(parent_node, item, [in_row])
|
||||
self.druid:new_scroll(view_node, content_node)
|
||||
self.druid:new_data_list(druid_scroll, druid_grid, create_function)
|
||||
self.druid:new_progress(node, key, [init_value])
|
||||
self.druid:new_lang_text(node, [locale_id], [adjust_type])
|
||||
self.druid:new_rich_text(text_node, [value])
|
||||
self.druid:new_back_handler([callback], [params])
|
||||
self.druid:new_blocker(node)
|
||||
self.druid:new_button(node, [callback], [params], [anim_node])
|
||||
self.druid:new_container(node, [mode], [callback])
|
||||
self.druid:new_data_list(druid_scroll, druid_grid, create_function)
|
||||
self.druid:new_drag(node, [on_drag_callback])
|
||||
self.druid:new_grid(parent_node, item, [in_row])
|
||||
self.druid:new_hotkey(keys_array, [callback], [callback_argument])
|
||||
self.druid:new_hover(node, [on_hover_callback], [on_mouse_hover_callback])
|
||||
self.druid:new_input(click_node, text_node, [keyboard_type])
|
||||
self.druid:new_lang_text(node, [locale_id], [adjust_type])
|
||||
self.druid:new_layout(node, [mode])
|
||||
self.druid:new_progress(node, key, [init_value])
|
||||
self.druid:new_rich_input(template, [nodes])
|
||||
self.druid:new_rich_text(text_node, [value])
|
||||
self.druid:new_scroll(view_node, content_node)
|
||||
self.druid:new_slider(pin_node, end_pos, [callback])
|
||||
self.druid:new_drag(node, [on_drag_callback])
|
||||
self.druid:new_swipe(node, [on_swipe_callback])
|
||||
self.druid:new_text(node, [value], [no_adjust])
|
||||
self.druid:new_input(click_node, text_node, [keyboard_type])
|
||||
self.druid:new_rich_input(template, [nodes])
|
||||
self.druid:new_layout(node, [mode])
|
||||
self.druid:new_container(node, [mode], [callback])
|
||||
self.druid:new_hotkey(keys_array, [callback], [callback_argument])
|
||||
self.druid:new_slider(pin_node, end_pos, [callback])
|
||||
self.druid:new_timer(node, [seconds_from], [seconds_to], [callback])
|
||||
self.druid:new_widget(widget, [template], [nodes], ...)
|
||||
self.druid:on_window_event([window_event])
|
||||
|
||||
self.druid:remove(component)
|
||||
self.druid:set_blacklist(blacklist_components)
|
||||
self.druid:set_whitelist(whitelist_components)
|
||||
@ -81,6 +84,8 @@ self.druid:set_whitelist(whitelist_components)
|
||||
|
||||
### Base Component
|
||||
|
||||
Basic methods for all components.
|
||||
|
||||
```lua
|
||||
component:get_childrens()
|
||||
component:get_context()
|
||||
|
@ -5,6 +5,7 @@ local druid_instance = require("druid.system.druid_instance")
|
||||
|
||||
local default_style = require("druid.styles.default.style")
|
||||
|
||||
---Entry point for Druid UI Framework. Create a new Druid instance and adjust the settings.
|
||||
---@class druid
|
||||
local M = {}
|
||||
|
||||
@ -87,7 +88,7 @@ end
|
||||
local WRAPPED_WIDGETS = {}
|
||||
|
||||
---Set a widget to the current game object. The game object can acquire the widget by calling `bindings.get_widget`
|
||||
---It wraps with events only top level functions cross-context, so no access to nested widgets functions
|
||||
---It wraps with events only top level functions cross-context, so you will have no access to nested widgets functions
|
||||
---@param widget druid.widget
|
||||
function M.set_widget(widget)
|
||||
local object = msg.url()
|
||||
|
@ -16,65 +16,6 @@ local component = require("druid.component")
|
||||
local M = component.create("progress")
|
||||
|
||||
|
||||
local function check_steps(self, from, to, exactly)
|
||||
if not self.steps then
|
||||
return
|
||||
end
|
||||
|
||||
for i = 1, #self.steps do
|
||||
local step = self.steps[i]
|
||||
local v1, v2 = from, to
|
||||
if v1 > v2 then
|
||||
v1, v2 = v2, v1
|
||||
end
|
||||
|
||||
if v1 < step and step < v2 then
|
||||
self.step_callback(self:get_context(), step)
|
||||
end
|
||||
if exactly and exactly == step then
|
||||
self.step_callback(self:get_context(), step)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function set_bar_to(self, set_to, is_silent)
|
||||
local prev_value = self.last_value
|
||||
local other_side = self.key == const.SIDE.X and const.SIDE.Y or const.SIDE.X
|
||||
self.last_value = set_to
|
||||
|
||||
local total_width = set_to * self.max_size[self.key]
|
||||
|
||||
local scale = 1
|
||||
if self.slice_size[self.key] > 0 then
|
||||
scale = math.min(total_width / self.slice_size[self.key], 1)
|
||||
end
|
||||
local size = math.max(total_width, self.slice_size[self.key])
|
||||
|
||||
do -- Scale other side
|
||||
-- Decrease other side of progress bar to match the oppotize slice_size
|
||||
local minimal_size = self.size[other_side] - self.slice_size[other_side]
|
||||
local maximum_size = self.size[other_side]
|
||||
local scale_diff = (maximum_size - minimal_size) / maximum_size
|
||||
local other_scale = 1 - (scale_diff * (1 - scale))
|
||||
self.scale[other_side] = other_scale
|
||||
end
|
||||
|
||||
self.scale[self.key] = scale
|
||||
gui.set_scale(self.node, self.scale)
|
||||
|
||||
self.size[self.key] = size
|
||||
gui.set_size(self.node, self.size)
|
||||
|
||||
if not is_silent then
|
||||
check_steps(self, prev_value, set_to)
|
||||
if prev_value ~= self.last_value then
|
||||
self.on_change:trigger(self:get_context(), self.last_value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---@param node string|node Node name or GUI Node itself.
|
||||
---@param key string Progress bar direction: const.SIDE.X or const.SIDE.Y
|
||||
---@param init_value number|nil Initial value of progress bar. Default: 1
|
||||
@ -132,7 +73,7 @@ function M:update(dt)
|
||||
self:set_to(helper.step(self.last_value, self.target, step))
|
||||
|
||||
if self.last_value == self.target then
|
||||
check_steps(self, prev_value, self.target, self.target)
|
||||
self:_check_steps(prev_value, self.target, self.target)
|
||||
|
||||
if self.target_callback then
|
||||
self.target_callback(self:get_context(), self.target)
|
||||
@ -146,13 +87,13 @@ end
|
||||
|
||||
---Fill a progress bar and stop progress animation
|
||||
function M:fill()
|
||||
set_bar_to(self, 1, true)
|
||||
self:_set_bar_to(1, true)
|
||||
end
|
||||
|
||||
|
||||
---Empty a progress bar
|
||||
function M:empty()
|
||||
set_bar_to(self, 0, true)
|
||||
self:_set_bar_to(0, true)
|
||||
end
|
||||
|
||||
|
||||
@ -160,7 +101,7 @@ end
|
||||
---@param to number Progress bar value, from 0 to 1
|
||||
function M:set_to(to)
|
||||
to = helper.clamp(to, 0, 1)
|
||||
set_bar_to(self, to)
|
||||
self:_set_bar_to(to)
|
||||
end
|
||||
|
||||
|
||||
@ -207,4 +148,68 @@ function M:set_max_size(max_size)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
---@private
|
||||
function M:_check_steps(from, to, exactly)
|
||||
if not self.steps then
|
||||
return
|
||||
end
|
||||
|
||||
for i = 1, #self.steps do
|
||||
local step = self.steps[i]
|
||||
local v1, v2 = from, to
|
||||
if v1 > v2 then
|
||||
v1, v2 = v2, v1
|
||||
end
|
||||
|
||||
if v1 < step and step < v2 then
|
||||
self.step_callback(self:get_context(), step)
|
||||
end
|
||||
if exactly and exactly == step then
|
||||
self.step_callback(self:get_context(), step)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---@private
|
||||
function M:_set_bar_to(set_to, is_silent)
|
||||
local prev_value = self.last_value
|
||||
local other_side = self.key == const.SIDE.X and const.SIDE.Y or const.SIDE.X
|
||||
self.last_value = set_to
|
||||
|
||||
local total_width = set_to * self.max_size[self.key]
|
||||
|
||||
local scale = 1
|
||||
if self.slice_size[self.key] > 0 then
|
||||
scale = math.min(total_width / self.slice_size[self.key], 1)
|
||||
end
|
||||
local size = math.max(total_width, self.slice_size[self.key])
|
||||
|
||||
do -- Scale other side
|
||||
-- Decrease other side of progress bar to match the oppotize slice_size
|
||||
local minimal_size = self.size[other_side] - self.slice_size[other_side]
|
||||
local maximum_size = self.size[other_side]
|
||||
local scale_diff = (maximum_size - minimal_size) / maximum_size
|
||||
local other_scale = 1 - (scale_diff * (1 - scale))
|
||||
self.scale[other_side] = other_scale
|
||||
end
|
||||
|
||||
self.scale[self.key] = scale
|
||||
gui.set_scale(self.node, self.scale)
|
||||
|
||||
self.size[self.key] = size
|
||||
gui.set_size(self.node, self.size)
|
||||
|
||||
if not is_silent then
|
||||
self:_check_steps(prev_value, set_to)
|
||||
if prev_value ~= self.last_value then
|
||||
self.on_change:trigger(self:get_context(), self.last_value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
return M
|
||||
|
Loading…
x
Reference in New Issue
Block a user