@quenty/timedtween 7.18.0 → 7.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/package.json +12 -12
- package/src/Shared/TimedTween.lua +60 -30
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [7.18.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/timedtween@7.18.0...@quenty/timedtween@7.18.1) (2025-04-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Add types to packages ([2374fb2](https://github.com/Quenty/NevermoreEngine/commit/2374fb2b043cfbe0e9b507b3316eec46a4e353a0))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [7.18.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/timedtween@7.17.2...@quenty/timedtween@7.18.0) (2025-04-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/timedtween
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/timedtween",
|
|
3
|
-
"version": "7.18.
|
|
3
|
+
"version": "7.18.1",
|
|
4
4
|
"description": "Linear timed tweening model",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,19 +25,19 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/basicpane": "^13.17.
|
|
29
|
-
"@quenty/blend": "^12.18.
|
|
30
|
-
"@quenty/loader": "^10.8.
|
|
31
|
-
"@quenty/maid": "^3.4.
|
|
32
|
-
"@quenty/math": "^2.7.
|
|
33
|
-
"@quenty/promise": "^10.10.
|
|
34
|
-
"@quenty/promisemaid": "^5.10.
|
|
35
|
-
"@quenty/rx": "^13.17.
|
|
36
|
-
"@quenty/steputils": "^3.5.
|
|
37
|
-
"@quenty/valueobject": "^13.17.
|
|
28
|
+
"@quenty/basicpane": "^13.17.1",
|
|
29
|
+
"@quenty/blend": "^12.18.1",
|
|
30
|
+
"@quenty/loader": "^10.8.1",
|
|
31
|
+
"@quenty/maid": "^3.4.1",
|
|
32
|
+
"@quenty/math": "^2.7.2",
|
|
33
|
+
"@quenty/promise": "^10.10.2",
|
|
34
|
+
"@quenty/promisemaid": "^5.10.2",
|
|
35
|
+
"@quenty/rx": "^13.17.1",
|
|
36
|
+
"@quenty/steputils": "^3.5.4",
|
|
37
|
+
"@quenty/valueobject": "^13.17.1"
|
|
38
38
|
},
|
|
39
39
|
"publishConfig": {
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "78c3ac0ab08dd18085b6e6e6e4f745e76ed99f68"
|
|
43
43
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Tween that is a specific time, useful for countdowns and other things
|
|
3
4
|
|
|
@@ -15,26 +16,55 @@ local StepUtils = require("StepUtils")
|
|
|
15
16
|
local Observable = require("Observable")
|
|
16
17
|
local Maid = require("Maid")
|
|
17
18
|
local Promise = require("Promise")
|
|
19
|
+
local _Signal = require("Signal")
|
|
18
20
|
|
|
19
21
|
local TimedTween = setmetatable({}, BasicPane)
|
|
20
22
|
TimedTween.ClassName = "TimedTween"
|
|
21
23
|
TimedTween.__index = TimedTween
|
|
22
24
|
|
|
25
|
+
type TimedTweenState = {
|
|
26
|
+
p0: number,
|
|
27
|
+
p1: number,
|
|
28
|
+
t0: number,
|
|
29
|
+
t1: number,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
type ComputedState = {
|
|
33
|
+
p: number,
|
|
34
|
+
v: number,
|
|
35
|
+
rtime: number,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type TimedTween = typeof(setmetatable(
|
|
39
|
+
{} :: {
|
|
40
|
+
_maid: Maid.Maid,
|
|
41
|
+
_state: ValueObject.ValueObject<TimedTweenState>,
|
|
42
|
+
_transitionTime: ValueObject.ValueObject<number>,
|
|
43
|
+
|
|
44
|
+
-- From BasicPane
|
|
45
|
+
IsVisible: (self: TimedTween) -> boolean,
|
|
46
|
+
SetVisible: (self: TimedTween, isVisible: boolean, doNotAnimate: boolean?) -> (),
|
|
47
|
+
VisibleChanged: _Signal.Signal<boolean, boolean>,
|
|
48
|
+
Destroy: (self: TimedTween) -> (),
|
|
49
|
+
},
|
|
50
|
+
{ __index = TimedTween }
|
|
51
|
+
))
|
|
52
|
+
|
|
23
53
|
--[=[
|
|
24
54
|
Timed transition module
|
|
25
55
|
|
|
26
56
|
@param transitionTime number? -- Optional
|
|
27
57
|
@return TimedTween
|
|
28
58
|
]=]
|
|
29
|
-
function TimedTween.new(transitionTime)
|
|
30
|
-
local self = setmetatable(BasicPane.new(), TimedTween)
|
|
59
|
+
function TimedTween.new(transitionTime: number?): TimedTween
|
|
60
|
+
local self: TimedTween = setmetatable(BasicPane.new() :: any, TimedTween)
|
|
31
61
|
|
|
32
62
|
self._transitionTime = self._maid:Add(ValueObject.new(0.15, "number"))
|
|
33
63
|
self._state = self._maid:Add(ValueObject.new({
|
|
34
|
-
p0 = 0
|
|
35
|
-
p1 = 0
|
|
36
|
-
t0 = 0
|
|
37
|
-
t1 = 0
|
|
64
|
+
p0 = 0,
|
|
65
|
+
p1 = 0,
|
|
66
|
+
t0 = 0,
|
|
67
|
+
t1 = 0,
|
|
38
68
|
}))
|
|
39
69
|
|
|
40
70
|
if transitionTime then
|
|
@@ -59,7 +89,7 @@ end
|
|
|
59
89
|
@param transitionTime number | Observable<number>
|
|
60
90
|
@return MaidTask
|
|
61
91
|
]=]
|
|
62
|
-
function TimedTween
|
|
92
|
+
function TimedTween.SetTransitionTime(self: TimedTween, transitionTime: number | Observable.Observable<number>)
|
|
63
93
|
return self._transitionTime:Mount(transitionTime)
|
|
64
94
|
end
|
|
65
95
|
|
|
@@ -68,7 +98,7 @@ end
|
|
|
68
98
|
|
|
69
99
|
@return number
|
|
70
100
|
]=]
|
|
71
|
-
function TimedTween
|
|
101
|
+
function TimedTween.GetTransitionTime(self: TimedTween): number
|
|
72
102
|
return self._transitionTime.Value
|
|
73
103
|
end
|
|
74
104
|
|
|
@@ -77,7 +107,7 @@ end
|
|
|
77
107
|
|
|
78
108
|
@return Observable<number>
|
|
79
109
|
]=]
|
|
80
|
-
function TimedTween
|
|
110
|
+
function TimedTween.ObserveTransitionTime(self: TimedTween): Observable.Observable<number>
|
|
81
111
|
return self._transitionTime:Observe()
|
|
82
112
|
end
|
|
83
113
|
|
|
@@ -86,7 +116,7 @@ end
|
|
|
86
116
|
|
|
87
117
|
@return Observable<number>
|
|
88
118
|
]=]
|
|
89
|
-
function TimedTween
|
|
119
|
+
function TimedTween.ObserveRenderStepped(self: TimedTween): Observable.Observable<number>
|
|
90
120
|
return self:ObserveOnSignal(RunService.RenderStepped)
|
|
91
121
|
end
|
|
92
122
|
|
|
@@ -96,7 +126,7 @@ end
|
|
|
96
126
|
@param signal Signal
|
|
97
127
|
@return Observable<number>
|
|
98
128
|
]=]
|
|
99
|
-
function TimedTween
|
|
129
|
+
function TimedTween.ObserveOnSignal(self: TimedTween, signal: RBXScriptSignal): Observable.Observable<number>
|
|
100
130
|
return Observable.new(function(sub)
|
|
101
131
|
local maid = Maid.new()
|
|
102
132
|
|
|
@@ -111,7 +141,7 @@ function TimedTween:ObserveOnSignal(signal)
|
|
|
111
141
|
startAnimate()
|
|
112
142
|
|
|
113
143
|
return maid
|
|
114
|
-
end)
|
|
144
|
+
end) :: any
|
|
115
145
|
end
|
|
116
146
|
|
|
117
147
|
--[=[
|
|
@@ -119,7 +149,7 @@ end
|
|
|
119
149
|
|
|
120
150
|
@return Observable<number>
|
|
121
151
|
]=]
|
|
122
|
-
function TimedTween
|
|
152
|
+
function TimedTween.Observe(self: TimedTween): Observable.Observable<number>
|
|
123
153
|
return self:ObserveOnSignal(RunService.RenderStepped)
|
|
124
154
|
end
|
|
125
155
|
|
|
@@ -128,9 +158,9 @@ end
|
|
|
128
158
|
|
|
129
159
|
@return Promise
|
|
130
160
|
]=]
|
|
131
|
-
function TimedTween
|
|
161
|
+
function TimedTween.PromiseFinished(self: TimedTween): Promise.Promise<()>
|
|
132
162
|
local initState = self:_computeState(os.clock())
|
|
133
|
-
if initState.rtime <=
|
|
163
|
+
if initState.rtime <= 0 then
|
|
134
164
|
return Promise.resolved()
|
|
135
165
|
end
|
|
136
166
|
|
|
@@ -150,45 +180,45 @@ function TimedTween:PromiseFinished()
|
|
|
150
180
|
end)
|
|
151
181
|
end))
|
|
152
182
|
|
|
153
|
-
self._maid[promise] = maid
|
|
183
|
+
self._maid[promise :: any] = maid
|
|
154
184
|
|
|
155
185
|
promise:Finally(function()
|
|
156
|
-
self._maid[promise] = nil
|
|
186
|
+
self._maid[promise :: any] = nil
|
|
157
187
|
end)
|
|
158
188
|
|
|
159
189
|
maid:GiveTask(function()
|
|
160
|
-
self._maid[promise] = nil
|
|
190
|
+
self._maid[promise :: any] = nil
|
|
161
191
|
end)
|
|
162
192
|
return promise
|
|
163
193
|
end
|
|
164
194
|
|
|
165
|
-
function TimedTween
|
|
195
|
+
function TimedTween._updateState(self: TimedTween, doNotAnimate: boolean?): ()
|
|
166
196
|
local transitionTime = self._transitionTime.Value
|
|
167
|
-
local target = self:IsVisible() and 1 or 0
|
|
197
|
+
local target = self:IsVisible() and 1 or 0
|
|
168
198
|
|
|
169
199
|
local now = os.clock()
|
|
170
|
-
local computed = self:_computeState(now)
|
|
200
|
+
local computed: ComputedState = self:_computeState(now)
|
|
171
201
|
local p0 = computed.p
|
|
172
202
|
|
|
173
203
|
local remainingDist = target - p0
|
|
174
204
|
if doNotAnimate then
|
|
175
205
|
self._state.Value = {
|
|
176
|
-
p0 = target
|
|
177
|
-
p1 = target
|
|
178
|
-
t0 = now
|
|
179
|
-
t1 = now
|
|
206
|
+
p0 = target,
|
|
207
|
+
p1 = target,
|
|
208
|
+
t0 = now,
|
|
209
|
+
t1 = now,
|
|
180
210
|
}
|
|
181
211
|
else
|
|
182
212
|
self._state.Value = {
|
|
183
|
-
p0 = p0
|
|
184
|
-
p1 = target
|
|
185
|
-
t0 = now
|
|
186
|
-
t1 = now + Math.map(math.abs(remainingDist), 0, 1, 0, transitionTime)
|
|
213
|
+
p0 = p0,
|
|
214
|
+
p1 = target,
|
|
215
|
+
t0 = now,
|
|
216
|
+
t1 = now + Math.map(math.abs(remainingDist), 0, 1, 0, transitionTime),
|
|
187
217
|
}
|
|
188
218
|
end
|
|
189
219
|
end
|
|
190
220
|
|
|
191
|
-
function TimedTween
|
|
221
|
+
function TimedTween._computeState(self: TimedTween, now: number): ComputedState
|
|
192
222
|
local state = self._state.Value
|
|
193
223
|
local p
|
|
194
224
|
|