@quenty/rogue-properties 4.23.0 → 4.24.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.24.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/rogue-properties@4.23.0...@quenty/rogue-properties@4.24.0) (2023-07-15)
7
+
8
+
9
+ ### Features
10
+
11
+ * Add support for setting values in RoguePropertyValue ([df5cdc4](https://github.com/Quenty/NevermoreEngine/commit/df5cdc42d57756cf269fb887113a28e9feb50095))
12
+
13
+
14
+
15
+
16
+
6
17
  # [4.23.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/rogue-properties@4.22.2...@quenty/rogue-properties@4.23.0) (2023-07-10)
7
18
 
8
19
  **Note:** Version bump only for package @quenty/rogue-properties
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/rogue-properties",
3
- "version": "4.23.0",
3
+ "version": "4.24.0",
4
4
  "description": "Roguelike properties which can be modified by external provides",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -25,24 +25,24 @@
25
25
  ],
26
26
  "dependencies": {
27
27
  "@quenty/baseobject": "^6.2.1",
28
- "@quenty/binder": "^8.20.0",
29
- "@quenty/brio": "^8.14.0",
30
- "@quenty/instanceutils": "^7.16.0",
28
+ "@quenty/binder": "^8.21.0",
29
+ "@quenty/brio": "^8.15.0",
30
+ "@quenty/instanceutils": "^7.17.0",
31
31
  "@quenty/jsonutils": "^6.6.0",
32
- "@quenty/linkutils": "^7.16.0",
32
+ "@quenty/linkutils": "^7.17.0",
33
33
  "@quenty/loader": "^6.2.1",
34
34
  "@quenty/maid": "^2.5.0",
35
- "@quenty/rx": "^7.12.0",
36
- "@quenty/rxbinderutils": "^8.21.0",
35
+ "@quenty/rx": "^7.13.0",
36
+ "@quenty/rxbinderutils": "^8.22.0",
37
37
  "@quenty/servicebag": "^6.8.0",
38
38
  "@quenty/signal": "^2.4.0",
39
39
  "@quenty/table": "^3.2.0",
40
- "@quenty/valuebaseutils": "^7.16.0",
41
- "@quenty/valueobject": "^7.17.0",
40
+ "@quenty/valuebaseutils": "^7.17.0",
41
+ "@quenty/valueobject": "^7.18.0",
42
42
  "@quentystudios/t": "^3.0.0"
43
43
  },
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "6c9093879c4547ca55a7b42842e35ad277cc0f08"
47
+ "gitHead": "af7a623f58fe7ec96b47c80e385b71f820fd4cb8"
48
48
  }
@@ -53,6 +53,20 @@ function RogueAdditiveProvider:Create(additive, source)
53
53
  return obj
54
54
  end
55
55
 
56
+ function RogueAdditiveProvider:GetInvertedVersion(propObj, rogueProperty, baseValue)
57
+ if rogueProperty:GetDefinition():GetValueType() == "number" then
58
+ local value = baseValue
59
+
60
+ for _, item in pairs(self:_getAdditives(propObj)) do
61
+ value = value - item:GetAdditive()
62
+ end
63
+
64
+ return value
65
+ else
66
+ return baseValue
67
+ end
68
+ end
69
+
56
70
  function RogueAdditiveProvider:GetModifiedVersion(propObj, rogueProperty, baseValue)
57
71
  if rogueProperty:GetDefinition():GetValueType() == "number" then
58
72
  local value = baseValue
@@ -53,6 +53,20 @@ function RogueMultiplierProvider:Create(multiplier, source)
53
53
  return obj
54
54
  end
55
55
 
56
+ function RogueMultiplierProvider:GetInvertedVersion(propObj, rogueProperty, baseValue)
57
+ if rogueProperty:GetDefinition():GetValueType() == "number" then
58
+ local multiplier = 1
59
+
60
+ for _, item in pairs(self:_getMultipliers(propObj)) do
61
+ multiplier = multiplier*item:GetMultiplier()
62
+ end
63
+
64
+ return baseValue/multiplier
65
+ else
66
+ return baseValue
67
+ end
68
+ end
69
+
56
70
  function RogueMultiplierProvider:GetModifiedVersion(propObj, rogueProperty, baseValue)
57
71
  if rogueProperty:GetDefinition():GetValueType() == "number" then
58
72
  local multiplier = 1
@@ -47,6 +47,11 @@ function RogueSetterProvider:Create(value, source)
47
47
  return obj
48
48
  end
49
49
 
50
+ function RogueSetterProvider:GetInvertedVersion(_propObj, _rogueProperty, baseValue)
51
+ -- TODO: discard previous value chain
52
+ return baseValue
53
+ end
54
+
50
55
  function RogueSetterProvider:GetModifiedVersion(propObj, rogueProperty, baseValue)
51
56
  -- TODO: Support more than just the base value type
52
57
  if rogueProperty:GetDefinition():GetValueType() == "number" then
@@ -25,7 +25,7 @@ RogueProperty.ClassName = "RogueProperty"
25
25
  RogueProperty.__index = RogueProperty
26
26
 
27
27
  function RogueProperty.new(adornee, serviceBag, definition)
28
- local self = setmetatable({}, RogueProperty)
28
+ local self = {}
29
29
 
30
30
  self._serviceBag = assert(serviceBag, "No serviceBag")
31
31
  self._roguePropertyBinderGroups = self._serviceBag:GetService(RoguePropertyBinderGroups)
@@ -34,6 +34,8 @@ function RogueProperty.new(adornee, serviceBag, definition)
34
34
  self._adornee = assert(adornee, "Bad adornee")
35
35
  self._definition = assert(definition, "Bad definition")
36
36
 
37
+ self = setmetatable(self, RogueProperty)
38
+
37
39
  if self._roguePropertyService:CanInitializeProperties() then
38
40
  self:GetBaseValueObject()
39
41
  end
@@ -91,6 +93,22 @@ function RogueProperty:SetBaseValue(value)
91
93
  end
92
94
  end
93
95
 
96
+ function RogueProperty:SetValue(value)
97
+ local baseValue = self:GetBaseValueObject()
98
+ if not baseValue then
99
+ warn("Failed to get the baseValue to parent")
100
+ return
101
+ end
102
+
103
+ local current = value
104
+ -- TODO: Consider applying inverted chain here
105
+ for _, item in pairs(self._roguePropertyService:GetProviders()) do
106
+ current = item:GetInvertedVersion(baseValue, self, current)
107
+ end
108
+
109
+ baseValue.Value = self:_encodeValue(current)
110
+ end
111
+
94
112
  function RogueProperty:GetBaseValue()
95
113
  local baseValue = self:GetBaseValueObject()
96
114
  if baseValue then
@@ -100,7 +118,6 @@ function RogueProperty:GetBaseValue()
100
118
  end
101
119
  end
102
120
 
103
-
104
121
  function RogueProperty:GetValue()
105
122
  local propObj = self:GetBaseValueObject()
106
123
  if not propObj then
@@ -239,6 +256,19 @@ function RogueProperty:__index(index)
239
256
  end
240
257
  end
241
258
 
259
+ function RogueProperty:__newindex(index, value)
260
+ if index == "Value" then
261
+ self:SetValue(value)
262
+ elseif index == "Changed" then
263
+ error("Cannot set .Changed event")
264
+ elseif RogueProperty[index] then
265
+ return RogueProperty[index]
266
+ else
267
+ error(("Bad index %q"):format(tostring(index)))
268
+ end
269
+ end
270
+
271
+
242
272
  function RogueProperty:_decodeValue(current)
243
273
  return RoguePropertyUtils.decodeProperty(self._definition, current)
244
274
  end