@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.0",
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.0",
29
- "@quenty/color3serializationutils": "^2.2.0",
30
- "@quenty/color3utils": "^11.18.0",
31
- "@quenty/loader": "^10.8.0",
32
- "@quenty/rx": "^13.17.0",
33
- "@quenty/table": "^3.7.1"
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": "e8ea56930e65322fcffc05a1556d5df988068f0b"
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) or nil;
118
- leftLegColor = bodyColorsData.leftLegColor and Color3SerializationUtils.serialize(bodyColorsData.leftLegColor) or nil;
119
- rightArmColor = bodyColorsData.rightArmColor and Color3SerializationUtils.serialize(bodyColorsData.rightArmColor) or nil;
120
- rightLegColor = bodyColorsData.rightLegColor and Color3SerializationUtils.serialize(bodyColorsData.rightLegColor) or nil;
121
- torsoColor = bodyColorsData.torsoColor and Color3SerializationUtils.serialize(bodyColorsData.torsoColor) or nil;
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
- function BodyColorsDataUtils.fromDataStoreSafeBodyColorsData(data)
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(typeof(humanoidDescription) == "Instance" and humanoidDescription:IsA("HumanoidDescription"), "Bad humanoidDescription")
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(bodyColors, bodyColorsData)
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 pairs(BodyColorsDataConstants.ATTRIBUTE_MAPPING) do
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(string.format("[BodyColorsDataUtils.fromAttributes] - Bad attribute %q of type %q",
270
- attributeName,
271
- typeof(value)))
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 pairs(BodyColorsDataConstants.ATTRIBUTE_MAPPING) do
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 pairs(BodyColorsDataConstants.ATTRIBUTE_MAPPING) do
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
- local bodyColorsData = {}
31
+ local bodyColorsData = {}
32
32
 
33
- for key, attributeName in pairs(BodyColorsDataConstants.ATTRIBUTE_MAPPING) do
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