@quenty/animations 8.18.0-canary.ae8d76d.0 → 8.18.1-canary.bc9c542.0

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 CHANGED
@@ -3,7 +3,18 @@
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
- # [8.18.0-canary.ae8d76d.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/animations@8.17.3...@quenty/animations@8.18.0-canary.ae8d76d.0) (2025-05-10)
6
+ ## [8.18.1-canary.bc9c542.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/animations@8.18.0...@quenty/animations@8.18.1-canary.bc9c542.0) (2025-07-11)
7
+
8
+
9
+ ### Features
10
+
11
+ * **AnimationSlotPlayer:** promise animation Stopped ([674b3af](https://github.com/Quenty/NevermoreEngine/commit/674b3afe54848bddd18faebace0f075e1b541a12))
12
+
13
+
14
+
15
+
16
+
17
+ # [8.18.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/animations@8.17.3...@quenty/animations@8.18.0) (2025-05-10)
7
18
 
8
19
 
9
20
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/animations",
3
- "version": "8.18.0-canary.ae8d76d.0",
3
+ "version": "8.18.1-canary.bc9c542.0",
4
4
  "description": "Utility methods for playing back animations on Roblox",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -25,20 +25,20 @@
25
25
  "Quenty"
26
26
  ],
27
27
  "dependencies": {
28
- "@quenty/baseobject": "10.8.3",
28
+ "@quenty/baseobject": "10.9.0",
29
29
  "@quenty/enumutils": "3.4.2",
30
- "@quenty/humanoidanimatorutils": "3.1.2",
31
- "@quenty/loader": "10.8.3",
32
- "@quenty/maid": "3.4.3",
33
- "@quenty/promise": "10.11.0-canary.ae8d76d.0",
34
- "@quenty/promisemaid": "5.11.0-canary.ae8d76d.0",
35
- "@quenty/rbxasset": "5.8.3",
36
- "@quenty/rx": "13.18.0-canary.ae8d76d.0",
37
- "@quenty/signal": "7.10.3",
38
- "@quenty/valueobject": "13.18.0-canary.ae8d76d.0"
30
+ "@quenty/humanoidanimatorutils": "3.2.0",
31
+ "@quenty/loader": "10.9.0",
32
+ "@quenty/maid": "3.5.0",
33
+ "@quenty/promise": "10.11.0",
34
+ "@quenty/promisemaid": "5.11.0",
35
+ "@quenty/rbxasset": "5.9.0",
36
+ "@quenty/rx": "13.18.0",
37
+ "@quenty/signal": "7.11.0",
38
+ "@quenty/valueobject": "13.18.0"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public"
42
42
  },
43
- "gitHead": "ae8d76d996594e017ac4bfa19f3c064ebe307cd8"
43
+ "gitHead": "bc9c54214ba5ef245787085e26626eaaf9fb0e9e"
44
44
  }
@@ -100,7 +100,10 @@ end
100
100
  @param keyframeName string
101
101
  @return Promise
102
102
  ]=]
103
- function AnimationPromiseUtils.promiseKeyframeReached(animationTrack: AnimationTrack, keyframeName: string): Promise.Promise<()>
103
+ function AnimationPromiseUtils.promiseKeyframeReached(
104
+ animationTrack: AnimationTrack,
105
+ keyframeName: string
106
+ ): Promise.Promise<()>
104
107
  assert(typeof(animationTrack) == "Instance", "Bad animationTrack")
105
108
  assert(type(keyframeName) == "string", "Bad endMarkerName")
106
109
 
@@ -127,5 +130,4 @@ function AnimationPromiseUtils.promiseKeyframeReached(animationTrack: AnimationT
127
130
  return promise
128
131
  end
129
132
 
130
-
131
- return AnimationPromiseUtils
133
+ return AnimationPromiseUtils
@@ -12,6 +12,8 @@ local AnimationUtils = require("AnimationUtils")
12
12
  local BaseObject = require("BaseObject")
13
13
  local EnumUtils = require("EnumUtils")
14
14
  local Maid = require("Maid")
15
+ local Promise = require("Promise")
16
+ local PromiseMaidUtils = require("PromiseMaidUtils")
15
17
  local RbxAssetUtils = require("RbxAssetUtils")
16
18
  local ValueObject = require("ValueObject")
17
19
 
@@ -93,6 +95,44 @@ type AnimationData = {
93
95
  originalPriority: Enum.AnimationPriority?,
94
96
  }
95
97
 
98
+ --[=[
99
+ Promises that the animation has stopped playing
100
+ ]=]
101
+ function AnimationSlotPlayer.PromiseStopped(self: AnimationSlotPlayer): Promise.Promise<boolean>
102
+ local promise = Promise.new()
103
+
104
+ PromiseMaidUtils.whilePromise(promise, function(topMaid)
105
+ topMaid:GiveTask(self._currentAnimationTrackData
106
+ :ObserveBrio(function(data: AnimationData?)
107
+ return data ~= nil
108
+ end)
109
+ :Subscribe(function(brio)
110
+ if brio:IsDead() then
111
+ return
112
+ end
113
+
114
+ local data: AnimationData = brio:GetValue()
115
+ if not data.track.IsPlaying then
116
+ promise:Resolve(true)
117
+ return
118
+ end
119
+
120
+ local maid = brio:ToMaid()
121
+ maid:GiveTask(data.track.Stopped:Connect(function()
122
+ promise:Resolve()
123
+ end))
124
+ end))
125
+
126
+ topMaid:GiveTask(function()
127
+ self._maid[promise] = nil
128
+ end)
129
+ end)
130
+
131
+ self._maid[promise] = promise
132
+
133
+ return promise
134
+ end
135
+
96
136
  --[=[
97
137
  Adjusts the speed of the animation playing in the slot
98
138
 
@@ -7,11 +7,11 @@
7
7
 
8
8
  local require = require(script.Parent.loader).load(script)
9
9
 
10
+ local AnimationUtils = require("AnimationUtils")
10
11
  local BaseObject = require("BaseObject")
11
- local ValueObject = require("ValueObject")
12
12
  local Rx = require("Rx")
13
- local AnimationUtils = require("AnimationUtils")
14
13
  local Signal = require("Signal")
14
+ local ValueObject = require("ValueObject")
15
15
 
16
16
  local AnimationTrackPlayer = setmetatable({}, BaseObject)
17
17
  AnimationTrackPlayer.ClassName = "AnimationTrackPlayer"
@@ -215,16 +215,18 @@ function AnimationTrackPlayer:IsPlaying(): boolean
215
215
  end
216
216
 
217
217
  function AnimationTrackPlayer:_onEachTrack(callback)
218
- return self._currentTrack:ObserveBrio(function(track)
219
- return track ~= nil
220
- end):Subscribe(function(brio)
221
- if brio:IsDead() then
222
- return
223
- end
218
+ return self._currentTrack
219
+ :ObserveBrio(function(track)
220
+ return track ~= nil
221
+ end)
222
+ :Subscribe(function(brio)
223
+ if brio:IsDead() then
224
+ return
225
+ end
224
226
 
225
- local track = brio:GetValue()
226
- callback(brio:ToMaid(), track)
227
- end)
227
+ local track = brio:GetValue()
228
+ callback(brio:ToMaid(), track)
229
+ end)
228
230
  end
229
231
 
230
- return AnimationTrackPlayer
232
+ return AnimationTrackPlayer
@@ -5,9 +5,9 @@
5
5
 
6
6
  local require = require(script.Parent.loader).load(script)
7
7
 
8
- local RbxAssetUtils = require("RbxAssetUtils")
9
- local HumanoidAnimatorUtils = require("HumanoidAnimatorUtils")
10
8
  local EnumUtils = require("EnumUtils")
9
+ local HumanoidAnimatorUtils = require("HumanoidAnimatorUtils")
10
+ local RbxAssetUtils = require("RbxAssetUtils")
11
11
 
12
12
  local AnimationUtils = {}
13
13
 
@@ -173,7 +173,9 @@ end
173
173
  --[=[
174
174
  Finds an animator for the current instance
175
175
  ]=]
176
- function AnimationUtils.getOrCreateAnimator(target: Animator | Player | Model | Humanoid | AnimationController): Animator?
176
+ function AnimationUtils.getOrCreateAnimator(
177
+ target: Animator | Player | Model | Humanoid | AnimationController
178
+ ): Animator?
177
179
  assert(typeof(target) == "Instance", "Bad target")
178
180
 
179
181
  if target:IsA("Animator") then
@@ -13,8 +13,8 @@ local require = require(script.Parent.loader).load(script)
13
13
 
14
14
  local RunService = game:GetService("RunService")
15
15
 
16
- local BaseObject = require("BaseObject")
17
16
  local AnimationUtils = require("AnimationUtils")
17
+ local BaseObject = require("BaseObject")
18
18
 
19
19
  local StudioRigAnimator = setmetatable({}, BaseObject)
20
20
  StudioRigAnimator.ClassName = "StudioRigAnimator"