Skip to content

Commit 47646be

Browse files
committed
perf: utilize builder for initializing effect defaults
1 parent 91cb540 commit 47646be

File tree

3 files changed

+54
-13
lines changed

3 files changed

+54
-13
lines changed

lua/tiny-glimmer/animation/effect.lua

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
---@class Effect
22
---@field settings table
33
---@field update_fn function
4+
---@field build_starter function
5+
---@field starter table
46

57
local Effect = {}
68
Effect.__index = Effect
79

8-
function Effect.new(settings, update_fn)
10+
function Effect.new(settings, update_fn, builder)
911
local self = setmetatable({}, Effect)
1012

1113
self.settings = settings
1214
self.update_fn = update_fn
1315

16+
self._starter_builder = builder
17+
1418
return self
1519
end
1620

21+
function Effect:build_starter()
22+
if self._starter_builder then
23+
self.starter = self._starter_builder(self)
24+
end
25+
end
26+
1727
function Effect:update_settings(settings)
1828
self.settings = settings
1929
end

lua/tiny-glimmer/glimmer_animation.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ function GlimmerAnimation.new(effect, opts)
3434
local self = setmetatable({}, GlimmerAnimation)
3535

3636
self.effect = effect
37+
self.effect:build_starter()
38+
3739
self.default_effect_settings = vim.deepcopy(effect.settings)
3840

3941
self.range = opts.range

lua/tiny-glimmer/premade_effects.lua

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ local easing_functions = require("tiny-glimmer.animation.easing")
33
local Effect = require("tiny-glimmer.animation.effect")
44

55
local function create_effect(opts)
6-
return Effect.new({}, opts.update_fn)
6+
return Effect.new({}, opts.update_fn, opts.builder)
77
end
88

99
return {
1010
fade = create_effect({
11+
builder = function(self)
12+
return {
13+
initial = utils.hex_to_rgb(self.settings.from_color),
14+
final = utils.hex_to_rgb(self.settings.to_color),
15+
}
16+
end,
1117
update_fn = function(self, progress, ease)
12-
local initial = utils.hex_to_rgb(self.settings.from_color)
13-
local final = utils.hex_to_rgb(self.settings.to_color)
18+
local initial = self.starter.initial
19+
local final = self.starter.final
1420
local current = {}
1521

1622
local fn = easing_functions[ease]
@@ -25,9 +31,15 @@ return {
2531
end,
2632
}),
2733
reverse_fade = create_effect({
34+
builder = function(self)
35+
return {
36+
initial = utils.hex_to_rgb(self.settings.from_color),
37+
final = utils.hex_to_rgb(self.settings.to_color),
38+
}
39+
end,
2840
update_fn = function(self, progress, ease)
29-
local initial = utils.hex_to_rgb(self.settings.from_color)
30-
local final = utils.hex_to_rgb(self.settings.to_color)
41+
local initial = self.starter.initial
42+
local final = self.starter.final
3143

3244
local fn = easing_functions[ease]
3345

@@ -41,11 +53,16 @@ return {
4153
end,
4254
}),
4355
bounce = create_effect({
56+
builder = function(self)
57+
return {
58+
initial = utils.hex_to_rgb(self.settings.from_color),
59+
final = utils.hex_to_rgb(self.settings.to_color),
60+
}
61+
end,
4462
update_fn = function(self, progress)
4563
local oscillation = math.abs(math.sin(progress * math.pi * self.settings.oscillation_count))
46-
47-
local initial = utils.hex_to_rgb(self.settings.from_color)
48-
local final = utils.hex_to_rgb(self.settings.to_color)
64+
local initial = self.starter.initial
65+
local final = self.starter.final
4966

5067
local current = {
5168
r = math.max(initial.r + (final.r - initial.r) * oscillation, 0),
@@ -57,9 +74,15 @@ return {
5774
end,
5875
}),
5976
left_to_right = create_effect({
77+
builder = function(self)
78+
return {
79+
initial = utils.hex_to_rgb(self.settings.from_color),
80+
final = utils.hex_to_rgb(self.settings.to_color),
81+
}
82+
end,
6083
update_fn = function(self, progress)
61-
local initial = utils.hex_to_rgb(self.settings.from_color)
62-
local final = utils.hex_to_rgb(self.settings.to_color)
84+
local initial = self.starter.initial
85+
local final = self.starter.final
6386

6487
local current = {
6588
r = initial.r + (final.r - initial.r) * math.min(self.settings.min_progress, progress),
@@ -71,9 +94,15 @@ return {
7194
end,
7295
}),
7396
pulse = create_effect({
97+
builder = function(self)
98+
return {
99+
initial = utils.hex_to_rgb(self.settings.from_color),
100+
final = utils.hex_to_rgb(self.settings.to_color),
101+
}
102+
end,
74103
update_fn = function(self, progress)
75-
local initial = utils.hex_to_rgb(self.settings.from_color)
76-
local final = utils.hex_to_rgb(self.settings.to_color)
104+
local initial = self.starter.initial
105+
local final = self.starter.final
77106

78107
local pulse = math.abs(math.sin(progress * math.pi * self.settings.pulse_count))
79108
pulse = pulse * self.settings.intensity

0 commit comments

Comments
 (0)