Add set_steps to the slider component

This commit is contained in:
Insality 2020-03-22 00:37:28 +03:00
parent 84d2f3bf17
commit 05af3801d7

View File

@ -30,6 +30,12 @@ local function on_change_value(self)
end
local function set_position(self, value)
value = helper.clamp(value, 0, 1)
gui.set_position(self.node, self.start_pos + self.dist * value)
end
--- Component init function
-- @function slider:init
-- @tparam node node Gui pin node
@ -76,9 +82,8 @@ function M.on_input(self, action_id, action)
self.target_pos.x = helper.clamp(self.pos.x, self.start_pos.x, self.end_pos.x)
self.target_pos.y = helper.clamp(self.pos.y, self.start_pos.y, self.end_pos.y)
gui.set_position(self.node, self.target_pos)
if prev_x ~= self.target_pos.x or prev_y ~= self.target_pos.y then
local prev_value = self.value
if self.dist.x > 0 then
self.value = (self.target_pos.x - self.start_pos.x) / self.dist.x
@ -88,8 +93,27 @@ function M.on_input(self, action_id, action)
self.value = (self.target_pos.y - self.start_pos.y) / self.dist.y
end
on_change_value(self)
if self.steps then
local closest_dist = 1000
local closest = nil
for i = 1, #self.steps do
local dist = math.abs(self.value - self.steps[i])
if dist < closest_dist then
closest = self.steps[i]
closest_dist = dist
end
end
if closest then
self.value = closest
end
end
if prev_value ~= self.value then
on_change_value(self)
end
end
set_position(self, self.value)
end
if action.released then
@ -106,8 +130,7 @@ end
-- @tparam[opt] bool is_silent Don't trigger event if true
function M.set(self, value, is_silent)
value = helper.clamp(value, 0, 1)
gui.set_position(self.node, self.start_pos + self.dist * value)
set_position(self, value)
self.value = value
if not is_silent then
on_change_value(self)
@ -115,4 +138,14 @@ function M.set(self, value, is_silent)
end
--- Set slider steps. Pin node will
-- apply closest step position
-- @function slider:set_steps
-- @tparam number[] steps Array of steps
-- @usage slider:set_steps({0, 0.2, 0.6, 1})
function M.set_steps(self, steps)
self.steps = steps
end
return M