@quenty/rogue-properties 4.24.0 → 4.25.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,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
+ # [4.25.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/rogue-properties@4.24.0...@quenty/rogue-properties@4.25.0) (2023-07-17)
7
+
8
+
9
+ ### Features
10
+
11
+ * Can set rogue properties setter ([b3c148a](https://github.com/Quenty/NevermoreEngine/commit/b3c148a2d81a0c88e1fc7d9ae8e3c1cfc2033bf9))
12
+
13
+
14
+
15
+
16
+
6
17
  # [4.24.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/rogue-properties@4.23.0...@quenty/rogue-properties@4.24.0) (2023-07-15)
7
18
 
8
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/rogue-properties",
3
- "version": "4.24.0",
3
+ "version": "4.25.0",
4
4
  "description": "Roguelike properties which can be modified by external provides",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -44,5 +44,5 @@
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "af7a623f58fe7ec96b47c80e385b71f820fd4cb8"
47
+ "gitHead": "ce69150f3e814a2e38a086bc90c7d92121b0c28b"
48
48
  }
@@ -11,6 +11,7 @@ local RogueBindersShared = require("RogueBindersShared")
11
11
  local BinderUtils = require("BinderUtils")
12
12
  local RoguePropertyModifierUtils = require("RoguePropertyModifierUtils")
13
13
  local RoguePropertyService = require("RoguePropertyService")
14
+ local ValueBaseUtils = require("ValueBaseUtils")
14
15
 
15
16
  local RogueSetterProvider = {}
16
17
  RogueSetterProvider.ServiceName = "RogueSetterProvider"
@@ -31,10 +32,15 @@ function RogueSetterProvider:GetBinder()
31
32
  end
32
33
 
33
34
  function RogueSetterProvider:Create(value, source)
34
- assert(type(value) == "number", "Bad value")
35
35
  assert(typeof(source) == "Instance" or source == nil, "Bad source")
36
36
 
37
- local obj = Instance.new("NumberValue")
37
+ local className = ValueBaseUtils.getClassNameFromType(typeof(value))
38
+ if not className then
39
+ error(string.format("[RogueSetterProvider] - Can't set to type %q", typeof(value)))
40
+ return nil
41
+ end
42
+
43
+ local obj = Instance.new(className)
38
44
  obj.Name = "Setter"
39
45
  obj.Value = value
40
46
 
@@ -52,38 +58,30 @@ function RogueSetterProvider:GetInvertedVersion(_propObj, _rogueProperty, baseVa
52
58
  return baseValue
53
59
  end
54
60
 
55
- function RogueSetterProvider:GetModifiedVersion(propObj, rogueProperty, baseValue)
56
- -- TODO: Support more than just the base value type
57
- if rogueProperty:GetDefinition():GetValueType() == "number" then
58
- for _, item in pairs(self:_getSetters(propObj)) do
59
- return item:GetValue()
60
- end
61
-
62
- return baseValue
63
- else
64
- return baseValue
61
+ function RogueSetterProvider:GetModifiedVersion(propObj, _rogueProperty, baseValue)
62
+ -- Just return the first value
63
+ for _, item in pairs(self:_getSetters(propObj)) do
64
+ return item:GetValue()
65
65
  end
66
+
67
+ return baseValue
66
68
  end
67
69
 
68
70
  function RogueSetterProvider:ObserveModifiedVersion(propObj, rogueProperty, observeBaseValue)
69
- if rogueProperty:GetDefinition():GetValueType() == "number" then
70
- -- TODO: optimize this.
71
- return RxBrioUtils.flatCombineLatest({
72
- value = observeBaseValue;
73
- allSetters = self:_observeSettersBrio(propObj):Pipe({
74
- RxBrioUtils.flatMapBrio(function(item)
75
- return item:ObserveValue();
76
- end); -- this gets us a list of multipliers which should mutate pretty frequently.
77
- Rx.defaultsToNil;
78
- });
79
- }):Pipe({
80
- Rx.map(function(state)
81
- return self:GetModifiedVersion(propObj, rogueProperty, state.value)
82
- end);
83
- })
84
- else
85
- return observeBaseValue
86
- end
71
+ -- TODO: optimize this.
72
+ return RxBrioUtils.flatCombineLatest({
73
+ value = observeBaseValue;
74
+ allSetters = self:_observeSettersBrio(propObj):Pipe({
75
+ RxBrioUtils.flatMapBrio(function(item)
76
+ return item:ObserveValue();
77
+ end); -- this gets us a list of multipliers which should mutate pretty frequently.
78
+ Rx.defaultsToNil;
79
+ });
80
+ }):Pipe({
81
+ Rx.map(function(state)
82
+ return self:GetModifiedVersion(propObj, rogueProperty, state.value)
83
+ end);
84
+ })
87
85
  end
88
86
 
89
87
  function RogueSetterProvider:_observeSettersBrio(propObj)
@@ -89,14 +89,14 @@ function RogueProperty:SetBaseValue(value)
89
89
  if baseValue then
90
90
  baseValue.Value = self:_encodeValue(value)
91
91
  else
92
- warn("Failed to get the baseValue to parent")
92
+ warn("[RogueProperty] - Failed to get the baseValue to parent")
93
93
  end
94
94
  end
95
95
 
96
96
  function RogueProperty:SetValue(value)
97
97
  local baseValue = self:GetBaseValueObject()
98
98
  if not baseValue then
99
- warn("Failed to get the baseValue to parent")
99
+ warn("[RogueProperty] - Failed to get the baseValue to parent")
100
100
  return
101
101
  end
102
102
 
@@ -199,7 +199,7 @@ function RogueProperty:CreateMultiplier(amount, source)
199
199
  local baseValue = self:GetBaseValueObject()
200
200
 
201
201
  if not baseValue then
202
- warn("Failed to get the baseValue to parent")
202
+ warn("[RogueProperty] - Failed to get the baseValue to parent")
203
203
  end
204
204
 
205
205
  local multiplier = provider:Create(amount, source)
@@ -215,7 +215,7 @@ function RogueProperty:CreateAdditive(amount, source)
215
215
  local baseValue = self:GetBaseValueObject()
216
216
 
217
217
  if not baseValue then
218
- warn("Failed to get the baseValue to parent")
218
+ warn("[RogueProperty] - Failed to get the baseValue to parent")
219
219
  end
220
220
 
221
221
  local multiplier = provider:Create(amount, source)
@@ -224,17 +224,15 @@ function RogueProperty:CreateAdditive(amount, source)
224
224
  return multiplier
225
225
  end
226
226
 
227
- function RogueProperty:CreateSetter(amount, source)
228
- assert(type(amount) == "number", "Bad amount")
229
-
227
+ function RogueProperty:CreateSetter(value, source)
230
228
  local provider = self._serviceBag:GetService(RogueSetterProvider)
231
229
  local baseValue = self:GetBaseValueObject()
232
230
 
233
231
  if not baseValue then
234
- warn("Failed to get the baseValue to parent")
232
+ warn("[RogueProperty] - Failed to get the baseValue to parent")
235
233
  end
236
234
 
237
- local setter = provider:Create(amount, source)
235
+ local setter = provider:Create(value, source)
238
236
  setter.Parent = baseValue
239
237
 
240
238
  return setter