@quenty/settings 11.6.1-canary.478.2801f00.0 → 11.6.1-canary.478.88914d9.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,11 +3,12 @@
|
|
|
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.6.1-canary.478.
|
|
6
|
+
## [11.6.1-canary.478.88914d9.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.0...@quenty/settings@11.6.1-canary.478.88914d9.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
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/settings",
|
|
3
|
-
"version": "11.6.1-canary.478.
|
|
3
|
+
"version": "11.6.1-canary.478.88914d9.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.3.1-canary.478.
|
|
29
|
-
"@quenty/baseobject": "10.3.1-canary.478.
|
|
30
|
-
"@quenty/binder": "14.4.1-canary.478.
|
|
31
|
-
"@quenty/cmdrservice": "13.5.1-canary.478.
|
|
32
|
-
"@quenty/datastore": "13.5.1-canary.478.
|
|
33
|
-
"@quenty/ducktype": "5.3.1-canary.478.
|
|
28
|
+
"@quenty/attributeutils": "14.3.1-canary.478.88914d9.0",
|
|
29
|
+
"@quenty/baseobject": "10.3.1-canary.478.88914d9.0",
|
|
30
|
+
"@quenty/binder": "14.4.1-canary.478.88914d9.0",
|
|
31
|
+
"@quenty/cmdrservice": "13.5.1-canary.478.88914d9.0",
|
|
32
|
+
"@quenty/datastore": "13.5.1-canary.478.88914d9.0",
|
|
33
|
+
"@quenty/ducktype": "5.3.1-canary.478.88914d9.0",
|
|
34
34
|
"@quenty/enumutils": "3.2.0",
|
|
35
|
-
"@quenty/jsonutils": "10.3.1-canary.478.
|
|
36
|
-
"@quenty/loader": "10.3.1-canary.478.
|
|
37
|
-
"@quenty/maid": "3.2.0",
|
|
38
|
-
"@quenty/observablecollection": "12.3.1-canary.478.
|
|
39
|
-
"@quenty/playerbinder": "14.4.1-canary.478.
|
|
40
|
-
"@quenty/playerutils": "8.3.1-canary.478.
|
|
41
|
-
"@quenty/remotefunctionutils": "10.3.1-canary.478.
|
|
42
|
-
"@quenty/remoting": "12.4.1-canary.478.
|
|
43
|
-
"@quenty/rx": "13.3.1-canary.478.
|
|
44
|
-
"@quenty/rxbinderutils": "14.4.1-canary.478.
|
|
45
|
-
"@quenty/servicebag": "11.4.1-canary.478.
|
|
46
|
-
"@quenty/signal": "7.3.1-canary.478.
|
|
47
|
-
"@quenty/statestack": "14.4.1-canary.478.
|
|
35
|
+
"@quenty/jsonutils": "10.3.1-canary.478.88914d9.0",
|
|
36
|
+
"@quenty/loader": "10.3.1-canary.478.88914d9.0",
|
|
37
|
+
"@quenty/maid": "3.2.1-canary.478.88914d9.0",
|
|
38
|
+
"@quenty/observablecollection": "12.3.1-canary.478.88914d9.0",
|
|
39
|
+
"@quenty/playerbinder": "14.4.1-canary.478.88914d9.0",
|
|
40
|
+
"@quenty/playerutils": "8.3.1-canary.478.88914d9.0",
|
|
41
|
+
"@quenty/remotefunctionutils": "10.3.1-canary.478.88914d9.0",
|
|
42
|
+
"@quenty/remoting": "12.4.1-canary.478.88914d9.0",
|
|
43
|
+
"@quenty/rx": "13.3.1-canary.478.88914d9.0",
|
|
44
|
+
"@quenty/rxbinderutils": "14.4.1-canary.478.88914d9.0",
|
|
45
|
+
"@quenty/servicebag": "11.4.1-canary.478.88914d9.0",
|
|
46
|
+
"@quenty/signal": "7.3.1-canary.478.88914d9.0",
|
|
47
|
+
"@quenty/statestack": "14.4.1-canary.478.88914d9.0",
|
|
48
48
|
"@quenty/string": "3.2.0",
|
|
49
49
|
"@quenty/symbol": "3.1.0",
|
|
50
50
|
"@quenty/table": "3.5.0",
|
|
51
|
-
"@quenty/throttle": "10.3.1-canary.478.
|
|
52
|
-
"@quenty/tie": "10.5.1-canary.478.
|
|
53
|
-
"@quenty/valueobject": "13.3.1-canary.478.
|
|
51
|
+
"@quenty/throttle": "10.3.1-canary.478.88914d9.0",
|
|
52
|
+
"@quenty/tie": "10.5.1-canary.478.88914d9.0",
|
|
53
|
+
"@quenty/valueobject": "13.3.1-canary.478.88914d9.0"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "88914d9021cfc9d91111f4d825341271dc292ec4"
|
|
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.
|
|
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.
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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"
|
|
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"
|
|
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"
|
|
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
|
-
|
|
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
|
--[=[
|