@quenty/bodycolorsutils 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
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/bodycolorsutils@7.18.0...@quenty/bodycolorsutils@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/bodycolorsutils@7.17.2...@quenty/bodycolorsutils@7.18.0) (2025-04-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/bodycolorsutils
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/bodycolorsutils",
|
|
3
|
-
"version": "7.18.
|
|
3
|
+
"version": "7.18.1",
|
|
4
4
|
"description": "Body color helper utilities for merging and representing body colors over the network and datastore",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/attributeutils": "^14.17.
|
|
29
|
-
"@quenty/color3serializationutils": "^2.2.
|
|
30
|
-
"@quenty/color3utils": "^11.18.
|
|
31
|
-
"@quenty/loader": "^10.8.
|
|
32
|
-
"@quenty/rx": "^13.17.
|
|
33
|
-
"@quenty/table": "^3.7.
|
|
28
|
+
"@quenty/attributeutils": "^14.17.1",
|
|
29
|
+
"@quenty/color3serializationutils": "^2.2.1",
|
|
30
|
+
"@quenty/color3utils": "^11.18.1",
|
|
31
|
+
"@quenty/loader": "^10.8.1",
|
|
32
|
+
"@quenty/rx": "^13.17.1",
|
|
33
|
+
"@quenty/table": "^3.7.2"
|
|
34
34
|
},
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "78c3ac0ab08dd18085b6e6e6e4f745e76ed99f68"
|
|
39
39
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Utility to transfer and manipulate body colors for a character
|
|
3
4
|
|
|
@@ -24,13 +25,21 @@ local BodyColorsDataUtils = {}
|
|
|
24
25
|
.torsoColor Color3
|
|
25
26
|
@within BodyColorsDataUtils
|
|
26
27
|
]=]
|
|
28
|
+
export type BodyColorsData = {
|
|
29
|
+
headColor: Color3?,
|
|
30
|
+
leftArmColor: Color3?,
|
|
31
|
+
leftLegColor: Color3?,
|
|
32
|
+
rightArmColor: Color3?,
|
|
33
|
+
rightLegColor: Color3?,
|
|
34
|
+
torsoColor: Color3?,
|
|
35
|
+
}
|
|
27
36
|
|
|
28
37
|
--[=[
|
|
29
38
|
Creates a new BodyColorsData
|
|
30
39
|
@param bodyColorsData any
|
|
31
40
|
@return BodyColorsData
|
|
32
41
|
]=]
|
|
33
|
-
function BodyColorsDataUtils.createBodyColorsData(bodyColorsData)
|
|
42
|
+
function BodyColorsDataUtils.createBodyColorsData(bodyColorsData: BodyColorsData): BodyColorsData
|
|
34
43
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
35
44
|
|
|
36
45
|
return bodyColorsData
|
|
@@ -41,7 +50,7 @@ end
|
|
|
41
50
|
@param value any
|
|
42
51
|
@return boolean
|
|
43
52
|
]=]
|
|
44
|
-
function BodyColorsDataUtils.isBodyColorsData(value)
|
|
53
|
+
function BodyColorsDataUtils.isBodyColorsData(value: any): boolean
|
|
45
54
|
return type(value) == "table"
|
|
46
55
|
and (typeof(value.headColor) == "Color3" or value.headColor == nil)
|
|
47
56
|
and (typeof(value.leftArmColor) == "Color3" or value.leftArmColor == nil)
|
|
@@ -57,16 +66,16 @@ end
|
|
|
57
66
|
@param color3 Color3
|
|
58
67
|
@return BodyColorsData
|
|
59
68
|
]=]
|
|
60
|
-
function BodyColorsDataUtils.fromUniformColor(color3)
|
|
69
|
+
function BodyColorsDataUtils.fromUniformColor(color3: Color3): BodyColorsData
|
|
61
70
|
assert(typeof(color3) == "Color3", "Bad color3")
|
|
62
71
|
|
|
63
72
|
return BodyColorsDataUtils.createBodyColorsData({
|
|
64
|
-
headColor = color3
|
|
65
|
-
leftArmColor = color3
|
|
66
|
-
leftLegColor = color3
|
|
67
|
-
rightArmColor = color3
|
|
68
|
-
rightLegColor = color3
|
|
69
|
-
torsoColor = color3
|
|
73
|
+
headColor = color3,
|
|
74
|
+
leftArmColor = color3,
|
|
75
|
+
leftLegColor = color3,
|
|
76
|
+
rightArmColor = color3,
|
|
77
|
+
rightLegColor = color3,
|
|
78
|
+
torsoColor = color3,
|
|
70
79
|
})
|
|
71
80
|
end
|
|
72
81
|
|
|
@@ -76,16 +85,16 @@ end
|
|
|
76
85
|
@param bodyColors BodyColors
|
|
77
86
|
@return BodyColorsData
|
|
78
87
|
]=]
|
|
79
|
-
function BodyColorsDataUtils.fromBodyColors(bodyColors)
|
|
88
|
+
function BodyColorsDataUtils.fromBodyColors(bodyColors: BodyColors): BodyColorsData
|
|
80
89
|
assert(typeof(bodyColors) == "Instance" and bodyColors:IsA("BodyColors"), "Bad bodyColors")
|
|
81
90
|
|
|
82
91
|
return BodyColorsDataUtils.createBodyColorsData({
|
|
83
|
-
headColor = bodyColors.HeadColor3
|
|
84
|
-
leftArmColor = bodyColors.LeftArmColor3
|
|
85
|
-
leftLegColor = bodyColors.LeftLegColor3
|
|
86
|
-
rightArmColor = bodyColors.RightArmColor3
|
|
87
|
-
rightLegColor = bodyColors.RightLegColor3
|
|
88
|
-
torsoColor = bodyColors.TorsoColor3
|
|
92
|
+
headColor = bodyColors.HeadColor3,
|
|
93
|
+
leftArmColor = bodyColors.LeftArmColor3,
|
|
94
|
+
leftLegColor = bodyColors.LeftLegColor3,
|
|
95
|
+
rightArmColor = bodyColors.RightArmColor3,
|
|
96
|
+
rightLegColor = bodyColors.RightLegColor3,
|
|
97
|
+
torsoColor = bodyColors.TorsoColor3,
|
|
89
98
|
})
|
|
90
99
|
end
|
|
91
100
|
|
|
@@ -94,7 +103,7 @@ end
|
|
|
94
103
|
@param value any
|
|
95
104
|
@return boolean
|
|
96
105
|
]=]
|
|
97
|
-
function BodyColorsDataUtils.isDataStoreSafeBodyColorsData(value)
|
|
106
|
+
function BodyColorsDataUtils.isDataStoreSafeBodyColorsData(value: any): boolean
|
|
98
107
|
return type(value) == "table"
|
|
99
108
|
and (Color3SerializationUtils.isSerializedColor3(value.headColor) or value.headColor == nil)
|
|
100
109
|
and (Color3SerializationUtils.isSerializedColor3(value.leftArmColor) or value.leftArmColor == nil)
|
|
@@ -104,34 +113,54 @@ function BodyColorsDataUtils.isDataStoreSafeBodyColorsData(value)
|
|
|
104
113
|
and (Color3SerializationUtils.isSerializedColor3(value.torsoColor) or value.torsoColor == nil)
|
|
105
114
|
end
|
|
106
115
|
|
|
116
|
+
export type DataStoreSafeBodyColorsData = {
|
|
117
|
+
headColor: Color3SerializationUtils.SerializedColor3?,
|
|
118
|
+
leftArmColor: Color3SerializationUtils.SerializedColor3?,
|
|
119
|
+
leftLegColor: Color3SerializationUtils.SerializedColor3?,
|
|
120
|
+
rightArmColor: Color3SerializationUtils.SerializedColor3?,
|
|
121
|
+
rightLegColor: Color3SerializationUtils.SerializedColor3?,
|
|
122
|
+
torsoColor: Color3SerializationUtils.SerializedColor3?,
|
|
123
|
+
}
|
|
124
|
+
|
|
107
125
|
--[=[
|
|
108
126
|
Gets a datastore safe version of body color
|
|
109
127
|
@param bodyColorsData BodyColorsData
|
|
110
128
|
@return DataStoreSafeBodyColorsData
|
|
111
129
|
]=]
|
|
112
|
-
function BodyColorsDataUtils.toDataStoreSafeBodyColorsData(bodyColorsData)
|
|
130
|
+
function BodyColorsDataUtils.toDataStoreSafeBodyColorsData(bodyColorsData: BodyColorsData): DataStoreSafeBodyColorsData
|
|
113
131
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
114
132
|
|
|
115
133
|
return {
|
|
116
|
-
headColor = bodyColorsData.headColor and Color3SerializationUtils.serialize(bodyColorsData.headColor) or nil
|
|
117
|
-
leftArmColor = bodyColorsData.leftArmColor and Color3SerializationUtils.serialize(bodyColorsData.leftArmColor)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
134
|
+
headColor = bodyColorsData.headColor and Color3SerializationUtils.serialize(bodyColorsData.headColor) or nil,
|
|
135
|
+
leftArmColor = bodyColorsData.leftArmColor and Color3SerializationUtils.serialize(bodyColorsData.leftArmColor)
|
|
136
|
+
or nil,
|
|
137
|
+
leftLegColor = bodyColorsData.leftLegColor and Color3SerializationUtils.serialize(bodyColorsData.leftLegColor)
|
|
138
|
+
or nil,
|
|
139
|
+
rightArmColor = bodyColorsData.rightArmColor and Color3SerializationUtils.serialize(
|
|
140
|
+
bodyColorsData.rightArmColor
|
|
141
|
+
) or nil,
|
|
142
|
+
rightLegColor = bodyColorsData.rightLegColor and Color3SerializationUtils.serialize(
|
|
143
|
+
bodyColorsData.rightLegColor
|
|
144
|
+
) or nil,
|
|
145
|
+
torsoColor = bodyColorsData.torsoColor and Color3SerializationUtils.serialize(bodyColorsData.torsoColor) or nil,
|
|
122
146
|
}
|
|
123
147
|
end
|
|
124
148
|
|
|
125
|
-
|
|
149
|
+
--[=[
|
|
150
|
+
Constructs a BodyColorsData from a datastore safe body color
|
|
151
|
+
@param data DataStoreSafeBodyColorsData
|
|
152
|
+
@return BodyColorsData
|
|
153
|
+
]=]
|
|
154
|
+
function BodyColorsDataUtils.fromDataStoreSafeBodyColorsData(data: DataStoreSafeBodyColorsData): BodyColorsData
|
|
126
155
|
assert(BodyColorsDataUtils.isDataStoreSafeBodyColorsData(data), "Bad dataStoreSafeBodyColorsData")
|
|
127
156
|
|
|
128
157
|
return BodyColorsDataUtils.createBodyColorsData({
|
|
129
|
-
headColor = data.headColor and Color3SerializationUtils.deserialize(data.headColor) or nil
|
|
130
|
-
leftArmColor = data.leftArmColor and Color3SerializationUtils.deserialize(data.leftArmColor) or nil
|
|
131
|
-
leftLegColor = data.leftLegColor and Color3SerializationUtils.deserialize(data.leftLegColor) or nil
|
|
132
|
-
rightArmColor = data.rightArmColor and Color3SerializationUtils.deserialize(data.rightArmColor) or nil
|
|
133
|
-
rightLegColor = data.rightLegColor and Color3SerializationUtils.deserialize(data.rightLegColor) or nil
|
|
134
|
-
torsoColor = data.torsoColor and Color3SerializationUtils.deserialize(data.torsoColor) or nil
|
|
158
|
+
headColor = data.headColor and Color3SerializationUtils.deserialize(data.headColor) or nil,
|
|
159
|
+
leftArmColor = data.leftArmColor and Color3SerializationUtils.deserialize(data.leftArmColor) or nil,
|
|
160
|
+
leftLegColor = data.leftLegColor and Color3SerializationUtils.deserialize(data.leftLegColor) or nil,
|
|
161
|
+
rightArmColor = data.rightArmColor and Color3SerializationUtils.deserialize(data.rightArmColor) or nil,
|
|
162
|
+
rightLegColor = data.rightLegColor and Color3SerializationUtils.deserialize(data.rightLegColor) or nil,
|
|
163
|
+
torsoColor = data.torsoColor and Color3SerializationUtils.deserialize(data.torsoColor) or nil,
|
|
135
164
|
})
|
|
136
165
|
end
|
|
137
166
|
|
|
@@ -141,16 +170,19 @@ end
|
|
|
141
170
|
@param humanoidDescription HumanoidDescription
|
|
142
171
|
@return BodyColorsData
|
|
143
172
|
]=]
|
|
144
|
-
function BodyColorsDataUtils.fromHumanoidDescription(humanoidDescription)
|
|
145
|
-
assert(
|
|
173
|
+
function BodyColorsDataUtils.fromHumanoidDescription(humanoidDescription: HumanoidDescription): BodyColorsData
|
|
174
|
+
assert(
|
|
175
|
+
typeof(humanoidDescription) == "Instance" and humanoidDescription:IsA("HumanoidDescription"),
|
|
176
|
+
"Bad humanoidDescription"
|
|
177
|
+
)
|
|
146
178
|
|
|
147
179
|
return BodyColorsDataUtils.createBodyColorsData({
|
|
148
|
-
headColor = humanoidDescription.HeadColor
|
|
149
|
-
leftArmColor = humanoidDescription.LeftArmColor
|
|
150
|
-
leftLegColor = humanoidDescription.LeftLegColor
|
|
151
|
-
rightArmColor = humanoidDescription.RightArmColor
|
|
152
|
-
rightLegColor = humanoidDescription.RightLegColor
|
|
153
|
-
torsoColor = humanoidDescription.TorsoColor
|
|
180
|
+
headColor = humanoidDescription.HeadColor,
|
|
181
|
+
leftArmColor = humanoidDescription.LeftArmColor,
|
|
182
|
+
leftLegColor = humanoidDescription.LeftLegColor,
|
|
183
|
+
rightArmColor = humanoidDescription.RightArmColor,
|
|
184
|
+
rightLegColor = humanoidDescription.RightLegColor,
|
|
185
|
+
torsoColor = humanoidDescription.TorsoColor,
|
|
154
186
|
})
|
|
155
187
|
end
|
|
156
188
|
|
|
@@ -160,7 +192,7 @@ end
|
|
|
160
192
|
@param bodyColorsData BodyColorsData
|
|
161
193
|
@return boolean
|
|
162
194
|
]=]
|
|
163
|
-
function BodyColorsDataUtils.isUniformColor(bodyColorsData)
|
|
195
|
+
function BodyColorsDataUtils.isUniformColor(bodyColorsData: BodyColorsData): boolean
|
|
164
196
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
165
197
|
|
|
166
198
|
local headColor = bodyColorsData.headColor
|
|
@@ -191,7 +223,7 @@ function BodyColorsDataUtils.isUniformColor(bodyColorsData)
|
|
|
191
223
|
return true
|
|
192
224
|
end
|
|
193
225
|
|
|
194
|
-
function BodyColorsDataUtils.getUniformColor(bodyColorsData)
|
|
226
|
+
function BodyColorsDataUtils.getUniformColor(bodyColorsData): Color3?
|
|
195
227
|
if BodyColorsDataUtils.isUniformColor(bodyColorsData) then
|
|
196
228
|
return bodyColorsData.headColor
|
|
197
229
|
end
|
|
@@ -205,11 +237,11 @@ end
|
|
|
205
237
|
@param bodyColorsData BodyColorsData
|
|
206
238
|
@return BodyColors
|
|
207
239
|
]=]
|
|
208
|
-
function BodyColorsDataUtils.toBodyColors(bodyColorsData)
|
|
240
|
+
function BodyColorsDataUtils.toBodyColors(bodyColorsData: BodyColorsData): BodyColors
|
|
209
241
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
210
242
|
|
|
211
243
|
local bodyColors = Instance.new("BodyColors")
|
|
212
|
-
BodyColorsDataUtils.applyToBodyColors(
|
|
244
|
+
BodyColorsDataUtils.applyToBodyColors(bodyColorsData, bodyColors)
|
|
213
245
|
|
|
214
246
|
return bodyColors
|
|
215
247
|
end
|
|
@@ -221,7 +253,7 @@ end
|
|
|
221
253
|
@param bodyColors BodyColors
|
|
222
254
|
@return BodyColors
|
|
223
255
|
]=]
|
|
224
|
-
function BodyColorsDataUtils.applyToBodyColors(bodyColorsData, bodyColors)
|
|
256
|
+
function BodyColorsDataUtils.applyToBodyColors(bodyColorsData: BodyColorsData, bodyColors: BodyColors)
|
|
225
257
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
226
258
|
assert(typeof(bodyColors) == "Instance" and bodyColors:IsA("BodyColors"), "Bad bodyColors")
|
|
227
259
|
|
|
@@ -255,20 +287,24 @@ end
|
|
|
255
287
|
@param instance Instance
|
|
256
288
|
@return BodyColorsData
|
|
257
289
|
]=]
|
|
258
|
-
function BodyColorsDataUtils.fromAttributes(instance)
|
|
290
|
+
function BodyColorsDataUtils.fromAttributes(instance: Instance): BodyColorsData
|
|
259
291
|
assert(typeof(instance) == "Instance", "Bad instance")
|
|
260
292
|
|
|
261
293
|
local bodyColorsData = {}
|
|
262
294
|
|
|
263
|
-
for key, attributeName in
|
|
295
|
+
for key, attributeName in BodyColorsDataConstants.ATTRIBUTE_MAPPING do
|
|
264
296
|
local value = instance:GetAttribute(attributeName)
|
|
265
297
|
if value ~= nil then
|
|
266
298
|
if typeof(value) == "Color3" then
|
|
267
299
|
bodyColorsData[key] = value
|
|
268
300
|
else
|
|
269
|
-
warn(
|
|
270
|
-
|
|
271
|
-
|
|
301
|
+
warn(
|
|
302
|
+
string.format(
|
|
303
|
+
"[BodyColorsDataUtils.fromAttributes] - Bad attribute %q of type %q",
|
|
304
|
+
attributeName,
|
|
305
|
+
typeof(value)
|
|
306
|
+
)
|
|
307
|
+
)
|
|
272
308
|
end
|
|
273
309
|
end
|
|
274
310
|
end
|
|
@@ -281,11 +317,11 @@ end
|
|
|
281
317
|
@param instance Instance
|
|
282
318
|
@param bodyColorsData BodyColorsData
|
|
283
319
|
]=]
|
|
284
|
-
function BodyColorsDataUtils.setAttributes(instance, bodyColorsData)
|
|
320
|
+
function BodyColorsDataUtils.setAttributes(instance: Instance, bodyColorsData: BodyColorsData)
|
|
285
321
|
assert(typeof(instance) == "Instance", "Bad instance")
|
|
286
322
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
287
323
|
|
|
288
|
-
for key, attributeName in
|
|
324
|
+
for key, attributeName in BodyColorsDataConstants.ATTRIBUTE_MAPPING do
|
|
289
325
|
local value = bodyColorsData[key]
|
|
290
326
|
if value then
|
|
291
327
|
instance:SetAttribute(attributeName, value)
|
|
@@ -302,7 +338,7 @@ end
|
|
|
302
338
|
@param humanoidDescription HumanoidDescription
|
|
303
339
|
@return BodyColors
|
|
304
340
|
]=]
|
|
305
|
-
function BodyColorsDataUtils.applyToHumanoidDescription(bodyColorsData, humanoidDescription)
|
|
341
|
+
function BodyColorsDataUtils.applyToHumanoidDescription(bodyColorsData: BodyColorsData, humanoidDescription: HumanoidDescription)
|
|
306
342
|
assert(BodyColorsDataUtils.isBodyColorsData(bodyColorsData), "Bad bodyColorsData")
|
|
307
343
|
assert(typeof(humanoidDescription) == "Instance" and humanoidDescription:IsA("HumanoidDescription"), "Bad humanoidDescription")
|
|
308
344
|
|
|
@@ -22,15 +22,15 @@ function RxBodyColorsDataUtils.observeFromAttributes(instance)
|
|
|
22
22
|
|
|
23
23
|
local observables = {}
|
|
24
24
|
|
|
25
|
-
for key, attributeName in
|
|
25
|
+
for key, attributeName in BodyColorsDataConstants.ATTRIBUTE_MAPPING do
|
|
26
26
|
observables[key] = RxAttributeUtils.observeAttribute(instance, attributeName)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
return Rx.combineLatest(observables):Pipe({
|
|
30
30
|
Rx.map(function(latestValues)
|
|
31
|
-
|
|
31
|
+
local bodyColorsData = {}
|
|
32
32
|
|
|
33
|
-
for key, attributeName in
|
|
33
|
+
for key, attributeName in BodyColorsDataConstants.ATTRIBUTE_MAPPING do
|
|
34
34
|
local value = latestValues[key]
|
|
35
35
|
if typeof(value) == "Color3" then
|
|
36
36
|
bodyColorsData[key] = value
|