@quenty/settings 11.7.0-canary.490.601c967.0 → 11.8.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,17 +3,34 @@
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
- # [11.7.0-canary.490.601c967.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.0...@quenty/settings@11.7.0-canary.490.601c967.0) (2024-08-27)
6
+ # [11.8.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.7.0...@quenty/settings@11.8.0) (2024-09-12)
7
7
 
8
8
 
9
9
  ### Features
10
10
 
11
+ * Simplified settings manager usage ([71fdb58](https://github.com/Quenty/NevermoreEngine/commit/71fdb5870c07e8b73b36bd4b938c4fcca914ba1b))
11
12
  * Unedited all changes ([60e64e3](https://github.com/Quenty/NevermoreEngine/commit/60e64e3efce17c10c4b8965871187d231b338dd4))
12
13
 
13
14
 
14
15
 
15
16
 
16
17
 
18
+ # [11.7.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.1...@quenty/settings@11.7.0) (2024-08-09)
19
+
20
+ **Note:** Version bump only for package @quenty/settings
21
+
22
+
23
+
24
+
25
+
26
+ ## [11.6.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.0...@quenty/settings@11.6.1) (2024-07-16)
27
+
28
+ **Note:** Version bump only for package @quenty/settings
29
+
30
+
31
+
32
+
33
+
17
34
  # [11.6.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.5.0...@quenty/settings@11.6.0) (2024-05-09)
18
35
 
19
36
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/settings",
3
- "version": "11.7.0-canary.490.601c967.0",
3
+ "version": "11.8.0",
4
4
  "description": "Centralized player settings service",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -25,35 +25,35 @@
25
25
  "Quenty"
26
26
  ],
27
27
  "dependencies": {
28
- "@quenty/attributeutils": "14.4.0-canary.490.601c967.0",
29
- "@quenty/baseobject": "10.4.0-canary.490.601c967.0",
30
- "@quenty/binder": "14.5.0-canary.490.601c967.0",
31
- "@quenty/cmdrservice": "13.6.0-canary.490.601c967.0",
32
- "@quenty/datastore": "13.6.0-canary.490.601c967.0",
33
- "@quenty/ducktype": "5.4.0-canary.490.601c967.0",
34
- "@quenty/enumutils": "3.2.0",
35
- "@quenty/jsonutils": "10.4.0-canary.490.601c967.0",
36
- "@quenty/loader": "10.4.0-canary.490.601c967.0",
37
- "@quenty/maid": "3.2.0",
38
- "@quenty/observablecollection": "12.4.0-canary.490.601c967.0",
39
- "@quenty/playerbinder": "14.5.0-canary.490.601c967.0",
40
- "@quenty/playerutils": "8.4.0-canary.490.601c967.0",
41
- "@quenty/remotefunctionutils": "10.4.0-canary.490.601c967.0",
42
- "@quenty/remoting": "12.5.0-canary.490.601c967.0",
43
- "@quenty/rx": "13.4.0-canary.490.601c967.0",
44
- "@quenty/rxbinderutils": "14.5.0-canary.490.601c967.0",
45
- "@quenty/servicebag": "11.5.0-canary.490.601c967.0",
46
- "@quenty/signal": "7.4.0-canary.490.601c967.0",
47
- "@quenty/statestack": "14.5.0-canary.490.601c967.0",
48
- "@quenty/string": "3.2.0",
49
- "@quenty/symbol": "3.1.0",
50
- "@quenty/table": "3.5.0",
51
- "@quenty/throttle": "10.4.0-canary.490.601c967.0",
52
- "@quenty/tie": "10.6.0-canary.490.601c967.0",
53
- "@quenty/valueobject": "13.4.0-canary.490.601c967.0"
28
+ "@quenty/attributeutils": "^14.5.0",
29
+ "@quenty/baseobject": "^10.4.0",
30
+ "@quenty/binder": "^14.6.0",
31
+ "@quenty/cmdrservice": "^13.7.0",
32
+ "@quenty/datastore": "^13.7.0",
33
+ "@quenty/ducktype": "^5.4.0",
34
+ "@quenty/enumutils": "^3.2.0",
35
+ "@quenty/jsonutils": "^10.4.0",
36
+ "@quenty/loader": "^10.4.0",
37
+ "@quenty/maid": "^3.3.0",
38
+ "@quenty/observablecollection": "^12.5.0",
39
+ "@quenty/playerbinder": "^14.6.0",
40
+ "@quenty/playerutils": "^8.5.0",
41
+ "@quenty/remotefunctionutils": "^10.4.0",
42
+ "@quenty/remoting": "^12.6.0",
43
+ "@quenty/rx": "^13.5.0",
44
+ "@quenty/rxbinderutils": "^14.6.0",
45
+ "@quenty/servicebag": "^11.5.0",
46
+ "@quenty/signal": "^7.4.0",
47
+ "@quenty/statestack": "^14.6.0",
48
+ "@quenty/string": "^3.2.0",
49
+ "@quenty/symbol": "^3.1.0",
50
+ "@quenty/table": "^3.5.0",
51
+ "@quenty/throttle": "^10.5.0",
52
+ "@quenty/tie": "^10.7.0",
53
+ "@quenty/valueobject": "^13.5.0"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
57
57
  },
58
- "gitHead": "601c9671f09638be4f326e41fcfe3343ccfe76d8"
58
+ "gitHead": "fb172906f3ee725269ec1e5f4daf9dca227e729d"
59
59
  }
@@ -22,9 +22,11 @@ local require = require(script.Parent.loader).load(script)
22
22
 
23
23
  local Players = game:GetService("Players")
24
24
 
25
+ local SettingRegistryServiceShared = require("SettingRegistryServiceShared")
25
26
  local SettingProperty = require("SettingProperty")
26
27
  local ServiceBag = require("ServiceBag")
27
28
  local DuckTypeUtils = require("DuckTypeUtils")
29
+ local Maid = require("Maid")
28
30
 
29
31
  local SettingDefinition = {}
30
32
  SettingDefinition.ClassName = "SettingDefinition"
@@ -44,15 +46,96 @@ function SettingDefinition.new(settingName, defaultValue)
44
46
 
45
47
  local self = setmetatable({}, SettingDefinition)
46
48
 
47
-
48
49
  self._settingName = settingName
49
50
  self._defaultValue = defaultValue
50
51
 
51
- self.ServiceName = self._settingName
52
+ self.ServiceName = self._settingName .. "SettingDefinition"
52
53
 
53
54
  return self
54
55
  end
55
56
 
57
+ --[=[
58
+ Initializes the setting definition from a service bag.
59
+
60
+ @param serviceBag ServiceBag
61
+ ]=]
62
+ function SettingDefinition:Init(serviceBag)
63
+ assert(serviceBag, "No serviceBag")
64
+ assert(not self._maid, "Already initialized")
65
+
66
+ self._maid = Maid.new()
67
+ self._serviceBag = assert(serviceBag, "No serviceBag")
68
+
69
+ local settingRegistryServiceShared = self._serviceBag:GetService(SettingRegistryServiceShared)
70
+ self._maid:GiveTask(settingRegistryServiceShared:RegisterSettingDefinition(self))
71
+ end
72
+
73
+ --[=[
74
+ Gets the value for the given player
75
+
76
+ @param player Player
77
+ @return T
78
+ ]=]
79
+ function SettingDefinition:Get(player)
80
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
81
+ assert(self._serviceBag, "Retrieve from serviceBag")
82
+
83
+ return self:GetSettingProperty(self._serviceBag, player):GetValue()
84
+ end
85
+
86
+ --[=[
87
+ Sets the value
88
+
89
+ @param player Player
90
+ @param value T
91
+ ]=]
92
+ function SettingDefinition:Set(player, value)
93
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
94
+ assert(self._serviceBag, "Retrieve from serviceBag")
95
+
96
+ return self:GetSettingProperty(self._serviceBag, player):SetValue(value)
97
+ end
98
+
99
+ --[=[
100
+ Promise gets the value
101
+
102
+ @param player Player
103
+ @return Promise<T>
104
+ ]=]
105
+ function SettingDefinition:Promise(player)
106
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
107
+ assert(self._serviceBag, "Retrieve from serviceBag")
108
+
109
+ return self:GetSettingProperty(self._serviceBag, player):PromiseValue()
110
+ end
111
+
112
+ --[=[
113
+ Promise gets the value
114
+
115
+ @param player Player
116
+ @param value T
117
+ @return Promise<T>
118
+ ]=]
119
+ function SettingDefinition:PromiseSet(player, value)
120
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
121
+ assert(self._serviceBag, "Retrieve from serviceBag")
122
+
123
+ return self:GetSettingProperty(self._serviceBag, player):PromiseSetValue(value)
124
+ end
125
+
126
+ --[=[
127
+ Promise gets the value
128
+
129
+ @param player Player
130
+ @return Promise<T>
131
+ ]=]
132
+ function SettingDefinition:Observe(player)
133
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
134
+ assert(self._serviceBag, "Retrieve from serviceBag")
135
+
136
+ return self:GetSettingProperty(self._serviceBag, player):Observe()
137
+ end
138
+
56
139
  --[=[
57
140
  Returns true if the value is a setting definition
58
141
 
@@ -107,4 +190,8 @@ function SettingDefinition:GetDefaultValue()
107
190
  return self._defaultValue
108
191
  end
109
192
 
193
+ function SettingDefinition:Destroy()
194
+ self._maid:DoCleaning()
195
+ end
196
+
110
197
  return SettingDefinition
@@ -26,7 +26,6 @@
26
26
 
27
27
  local require = require(script.Parent.loader).load(script)
28
28
 
29
- local SettingRegistryServiceShared = require("SettingRegistryServiceShared")
30
29
  local Maid = require("Maid")
31
30
  local SettingDefinition = require("SettingDefinition")
32
31
 
@@ -39,6 +38,7 @@ SettingDefinitionProvider.__index = SettingDefinitionProvider
39
38
  Constructs a new provider with a list of [SettingDefinition]'s.
40
39
 
41
40
  ```lua
41
+ -- In one location
42
42
  local SettingDefinition = require("SettingDefinition")
43
43
 
44
44
  return require("SettingDefinitionProvider").new({
@@ -48,13 +48,28 @@ SettingDefinitionProvider.__index = SettingDefinitionProvider
48
48
  })
49
49
  ```
50
50
 
51
+ Usage:
52
+
53
+ ```lua
54
+ local ourSettings = serviceBag:GetService(require("OurSettings"))
55
+
56
+ print(ourSettings.CameraShake:Get(Players.LocalPlayer), true)
57
+
58
+ ourSettings.CameraShake:Set(Players.LocalPlayer, false)
59
+
60
+ ourSettings.CameraShake:Promise(Players.LocalPlayer)
61
+ :Then(function(cameraShake)
62
+ print(cameraShake)
63
+ end)
64
+ ```
65
+
51
66
  @param settingDefinitions { SettingDefinition }
52
67
  @return SettingDefinitionProvider
53
68
  ]=]
54
69
  function SettingDefinitionProvider.new(settingDefinitions)
55
70
  local self = setmetatable({}, SettingDefinitionProvider)
56
71
 
57
- self._settingDefinitions = {}
72
+ self._settingDefinitionList = {}
58
73
  self._lookup = {}
59
74
 
60
75
  for key, value in pairs(settingDefinitions) do
@@ -80,7 +95,7 @@ end
80
95
  function SettingDefinitionProvider:_addSettingDefinition(settingDefinition)
81
96
  assert(SettingDefinition.isSettingDefinition(settingDefinition), "Bad settingDefinition")
82
97
 
83
- table.insert(self._settingDefinitions, settingDefinition)
98
+ table.insert(self._settingDefinitionList, settingDefinition)
84
99
  self._lookup[settingDefinition:GetSettingName()] = settingDefinition
85
100
  end
86
101
 
@@ -94,10 +109,17 @@ function SettingDefinitionProvider:Init(serviceBag)
94
109
  assert(not self._maid, "Already initialized")
95
110
 
96
111
  self._maid = Maid.new()
112
+ self._serviceBag = assert(serviceBag, "No serviceBag")
113
+
114
+ self._initializedDefinitionLookup = {}
115
+
116
+ -- Register our setting definitions
117
+ for _, settingDefinition in pairs(self._settingDefinitionList) do
118
+ local initialized = self._serviceBag:GetService(settingDefinition)
119
+ self._initializedDefinitionLookup[settingDefinition] = initialized
97
120
 
98
- local settingRegistryServiceShared = serviceBag:GetService(SettingRegistryServiceShared)
99
- for _, settingDefinition in pairs(self._settingDefinitions) do
100
- self._maid:GiveTask(settingRegistryServiceShared:RegisterSettingDefinition(settingDefinition))
121
+ -- Store lookup to overcome metatable lookup
122
+ self[settingDefinition:GetSettingName()] = initialized
101
123
  end
102
124
  end
103
125
 
@@ -114,7 +136,17 @@ end
114
136
  @return { SettingDefinition }
115
137
  ]=]
116
138
  function SettingDefinitionProvider:GetSettingDefinitions()
117
- return self._settingDefinitions
139
+ if self._serviceBag then
140
+ local copy = table.clone(self._settingDefinitionList)
141
+
142
+ for key, settingDefinition in pairs(copy) do
143
+ copy[key] = assert(self._initializedDefinitionLookup[settingDefinition], "Missing settingDefinition")
144
+ end
145
+
146
+ return copy
147
+ end
148
+
149
+ return table.clone(self._settingDefinitionList)
118
150
  end
119
151
 
120
152
  --[=[
@@ -143,18 +175,27 @@ function SettingDefinitionProvider:__index(index)
143
175
  error("[SettingDefinitionProvider] - Cannot index provider with nil value")
144
176
  elseif SettingDefinitionProvider[index] then
145
177
  return SettingDefinitionProvider[index]
146
- elseif index == "_lookup" or index == "_settingDefinitions" or index == "_maid" then
178
+ elseif index == "_lookup"
179
+ or index == "_settingDefinitionList"
180
+ or index == "_maid"
181
+ or index == "_initializedDefinitionLookup"
182
+ or index == "_serviceBag" then
183
+
147
184
  return rawget(self, index)
148
185
  elseif type(index) == "string" then
149
186
  local lookup = rawget(self, "_lookup")
150
187
  local settingDefinition = lookup[index]
151
188
  if not settingDefinition then
152
- error(("Bad index %q into SettingDefinitionProvider"):format(tostring(index)))
189
+ error(string.format("Bad index %q into SettingDefinitionProvider", tostring(index)))
190
+ end
191
+
192
+ if self._serviceBag then
193
+ return assert(self._initializedDefinitionLookup[settingDefinition], "Missing settingDefinition")
153
194
  else
154
195
  return settingDefinition
155
196
  end
156
197
  else
157
- error(("Bad index %q into SettingDefinitionProvider"):format(tostring(index)))
198
+ error(string.format("Bad index %q into SettingDefinitionProvider", tostring(index)))
158
199
  end
159
200
  end
160
201
 
@@ -167,7 +208,16 @@ end
167
208
  function SettingDefinitionProvider:Get(settingName)
168
209
  assert(type(settingName) == "string", "Bad settingName")
169
210
 
170
- return self._lookup[settingName]
211
+ local found = self._lookup[settingName]
212
+ if not found then
213
+ return nil
214
+ end
215
+
216
+ if self._serviceBag then
217
+ return assert(self._initializedDefinitionLookup[found], "Missing settingDefinition")
218
+ else
219
+ return found
220
+ end
171
221
  end
172
222
 
173
223
  --[=[