mirror of
https://github.com/Insality/druid
synced 2025-11-27 19:30:53 +01:00
First dirty commit of old code
This commit is contained in:
67
druid/components/counter.lua
Normal file
67
druid/components/counter.lua
Normal file
@@ -0,0 +1,67 @@
|
||||
local M = {}
|
||||
|
||||
local text_field = require "modules.ui.components.text_field"
|
||||
|
||||
local FRAMES = 60
|
||||
|
||||
--- Bounce text field
|
||||
M.bounce = text_field.bounce
|
||||
|
||||
--- Set text to text field
|
||||
-- @param set_to - set value to text field
|
||||
M.set_to = text_field.set_to
|
||||
|
||||
--- Set color
|
||||
-- @param color
|
||||
M.set_color = text_field.set_color
|
||||
|
||||
--- Set scale
|
||||
-- @param scale
|
||||
M.set_scale = text_field.set_scale
|
||||
|
||||
--- Called when layout updated (rotate for example)
|
||||
function M.on_layout_updated(instance)
|
||||
text_field.on_layout_updated(instance)
|
||||
if instance.last_value then
|
||||
text_field.set_to(instance, instance.last_value)
|
||||
end
|
||||
end
|
||||
|
||||
--- Animate counter
|
||||
-- @param set_to - set value to text field
|
||||
function M.animate_to(instance, set_to, frames)
|
||||
if set_to == instance.last_value then
|
||||
text_field.set_to(instance, set_to)
|
||||
elseif not instance.is_animate then
|
||||
frames = frames or FRAMES
|
||||
instance.end_anim_value = set_to
|
||||
local diff = set_to - instance.last_value
|
||||
instance.anim_step = math.floor((set_to - instance.last_value) / frames)
|
||||
if diff ~= 0 and instance.anim_step == 0 then
|
||||
instance.anim_step = diff > 0 and 1 or - 1
|
||||
end
|
||||
instance.is_animate = true
|
||||
else
|
||||
instance.end_anim_value = set_to
|
||||
end
|
||||
end
|
||||
|
||||
--- Called when update
|
||||
-- @param dt - delta time
|
||||
function M.on_updated(instance, dt)
|
||||
if instance.is_animate then
|
||||
instance.last_value = instance.last_value + instance.anim_step
|
||||
text_field.set_to(instance, instance.last_value)
|
||||
if not instance.is_in_bounce then
|
||||
instance.is_in_bounce = true
|
||||
text_field.bounce(instance, function() instance.is_in_bounce = false end)
|
||||
end
|
||||
if instance.anim_step > 0 and instance.last_value >= instance.end_anim_value or
|
||||
instance.anim_step < 0 and instance.last_value <= instance.end_anim_value then
|
||||
instance.is_animate = false
|
||||
text_field.set_to(instance, instance.end_anim_value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user