@quenty/settings 11.6.1 → 11.7.0-canary.478.211e09e.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,9 +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](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.0...@quenty/settings@11.6.1) (2024-07-16)
6
+ # [11.7.0-canary.478.211e09e.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.6.0...@quenty/settings@11.7.0-canary.478.211e09e.0) (2024-08-27)
7
7
 
8
- **Note:** Version bump only for package @quenty/settings
8
+
9
+ ### Features
10
+
11
+ * Unedited all changes ([60e64e3](https://github.com/Quenty/NevermoreEngine/commit/60e64e3efce17c10c4b8965871187d231b338dd4))
9
12
 
10
13
 
11
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/settings",
3
- "version": "11.6.1",
3
+ "version": "11.7.0-canary.478.211e09e.0",
4
4
  "description": "Centralized player settings service",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -25,33 +25,35 @@
25
25
  "Quenty"
26
26
  ],
27
27
  "dependencies": {
28
- "@quenty/attributeutils": "^14.3.0",
29
- "@quenty/baseobject": "^10.3.0",
30
- "@quenty/binder": "^14.4.0",
31
- "@quenty/cmdrservice": "^13.5.0",
32
- "@quenty/datastore": "^13.5.0",
33
- "@quenty/enumutils": "^3.2.0",
34
- "@quenty/jsonutils": "^10.3.0",
35
- "@quenty/loader": "^10.3.0",
36
- "@quenty/maid": "^3.2.0",
37
- "@quenty/observablecollection": "^12.3.1",
38
- "@quenty/playerbinder": "^14.4.0",
39
- "@quenty/playerutils": "^8.3.0",
40
- "@quenty/remotefunctionutils": "^10.3.0",
41
- "@quenty/remoting": "^12.4.0",
42
- "@quenty/rx": "^13.3.0",
43
- "@quenty/rxbinderutils": "^14.4.0",
44
- "@quenty/servicebag": "^11.4.0",
45
- "@quenty/signal": "^7.3.0",
46
- "@quenty/statestack": "^14.4.0",
47
- "@quenty/string": "^3.2.0",
48
- "@quenty/symbol": "^3.1.0",
49
- "@quenty/table": "^3.5.0",
50
- "@quenty/throttle": "^10.3.0",
51
- "@quenty/valueobject": "^13.3.0"
28
+ "@quenty/attributeutils": "14.4.0-canary.478.211e09e.0",
29
+ "@quenty/baseobject": "10.4.0-canary.478.211e09e.0",
30
+ "@quenty/binder": "14.5.0-canary.478.211e09e.0",
31
+ "@quenty/cmdrservice": "13.6.0-canary.478.211e09e.0",
32
+ "@quenty/datastore": "13.6.0-canary.478.211e09e.0",
33
+ "@quenty/ducktype": "5.4.0-canary.478.211e09e.0",
34
+ "@quenty/enumutils": "3.2.0",
35
+ "@quenty/jsonutils": "10.4.0-canary.478.211e09e.0",
36
+ "@quenty/loader": "10.4.0-canary.478.211e09e.0",
37
+ "@quenty/maid": "3.2.0",
38
+ "@quenty/observablecollection": "12.4.0-canary.478.211e09e.0",
39
+ "@quenty/playerbinder": "14.5.0-canary.478.211e09e.0",
40
+ "@quenty/playerutils": "8.4.0-canary.478.211e09e.0",
41
+ "@quenty/remotefunctionutils": "10.4.0-canary.478.211e09e.0",
42
+ "@quenty/remoting": "12.5.0-canary.478.211e09e.0",
43
+ "@quenty/rx": "13.4.0-canary.478.211e09e.0",
44
+ "@quenty/rxbinderutils": "14.5.0-canary.478.211e09e.0",
45
+ "@quenty/servicebag": "11.5.0-canary.478.211e09e.0",
46
+ "@quenty/signal": "7.4.0-canary.478.211e09e.0",
47
+ "@quenty/statestack": "14.5.0-canary.478.211e09e.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.478.211e09e.0",
52
+ "@quenty/tie": "10.6.0-canary.478.211e09e.0",
53
+ "@quenty/valueobject": "13.4.0-canary.478.211e09e.0"
52
54
  },
53
55
  "publishConfig": {
54
56
  "access": "public"
55
57
  },
56
- "gitHead": "7f8a9f3c05df360add0f774bb94048c6d43f6af8"
58
+ "gitHead": "211e09ec811d87f8ad4596230f8ee53f81eb6eaa"
57
59
  }
@@ -10,13 +10,15 @@ local require = require(script.Parent.loader).load(script)
10
10
 
11
11
  local Players = game:GetService("Players")
12
12
 
13
+ local Binder = require("Binder")
13
14
  local DataStoreStringUtils = require("DataStoreStringUtils")
14
15
  local Maid = require("Maid")
15
16
  local Observable = require("Observable")
16
17
  local PlayerSettingsBase = require("PlayerSettingsBase")
17
18
  local PlayerSettingsConstants = require("PlayerSettingsConstants")
19
+ local PlayerSettingsInterface = require("PlayerSettingsInterface")
18
20
  local PlayerSettingsUtils = require("PlayerSettingsUtils")
19
- local RemoteFunctionUtils = require("RemoteFunctionUtils")
21
+ local Remoting = require("Remoting")
20
22
  local Symbol = require("Symbol")
21
23
  local ThrottledFunction = require("ThrottledFunction")
22
24
  local ValueObject = require("ValueObject")
@@ -27,8 +29,6 @@ local PlayerSettingsClient = setmetatable({}, PlayerSettingsBase)
27
29
  PlayerSettingsClient.ClassName = "PlayerSettingsClient"
28
30
  PlayerSettingsClient.__index = PlayerSettingsClient
29
31
 
30
- require("PromiseRemoteFunctionMixin"):Add(PlayerSettingsClient, PlayerSettingsConstants.REMOTE_FUNCTION_NAME)
31
-
32
32
  --[=[
33
33
  See [SettingsBindersClient] and [SettingsServiceClient] on how to properly use this class.
34
34
 
@@ -40,21 +40,23 @@ function PlayerSettingsClient.new(folder, serviceBag)
40
40
  local self = setmetatable(PlayerSettingsBase.new(folder, serviceBag), PlayerSettingsClient)
41
41
 
42
42
  if self:GetPlayer() == Players.LocalPlayer then
43
+ self._remoting = self._maid:Add(Remoting.new(self._obj, "PlayerSettings", Remoting.Realms.CLIENT))
44
+
43
45
  self._toReplicate = nil
44
46
  self._toReplicateCallbacks = {}
45
47
 
46
48
  -- We only want to keep this data here until we're
47
49
  -- actually done sending and the server acknowledges this is the state that
48
50
  -- we have. Otherwise we accept the server as the state of truth
49
- self._pendingReplicationDataInTransit = ValueObject.new(nil)
50
- self._maid:GiveTask(self._pendingReplicationDataInTransit)
51
+ self._pendingReplicationDataInTransit = self._maid:Add(ValueObject.new(nil))
51
52
 
52
53
  -- We need to avoid sending these quickly because otherwise
53
54
  -- sliding a slider can lag out stuff.
54
- self._queueSendSettingsFunc = ThrottledFunction.new(0.3, function()
55
+ self._queueSendSettingsFunc = self._maid:Add(ThrottledFunction.new(0.3, function()
55
56
  self:_sendSettings()
56
- end, { leading = true, trailing = true })
57
- self._maid:GiveTask(self._queueSendSettingsFunc)
57
+ end, { leading = true, trailing = true }))
58
+
59
+ self._maid:GiveTask(PlayerSettingsInterface.Client:Implement(self._obj, self))
58
60
  end
59
61
 
60
62
  return self
@@ -229,14 +231,7 @@ end
229
231
  function PlayerSettingsClient:_promiseReplicateSettings(settingsMap)
230
232
  assert(type(settingsMap) == "table", "Bad settingsMap")
231
233
 
232
- return self:PromiseRemoteFunction()
233
- :Then(function(remoteFunction)
234
- return self._maid:GivePromise(RemoteFunctionUtils.promiseInvokeServer(
235
- remoteFunction,
236
- PlayerSettingsConstants.REQUEST_UPDATE_SETTINGS,
237
- settingsMap))
238
- end)
234
+ return self._remoting.RequestUpdateSettings:PromiseInvokeServer(settingsMap)
239
235
  end
240
236
 
241
-
242
- return PlayerSettingsClient
237
+ return Binder.new("PlayerSettings", PlayerSettingsClient)
@@ -32,7 +32,7 @@ function SettingsServiceClient:Init(serviceBag)
32
32
 
33
33
  -- Internal
34
34
  self._serviceBag:GetService(require("SettingRegistryServiceShared")):RegisterSettingService(self)
35
- self._binders = self._serviceBag:GetService(require("SettingsBindersClient"))
35
+ self._playerSettingsBinder = self._serviceBag:GetService(require("PlayerSettingsClient"))
36
36
  end
37
37
 
38
38
  function SettingsServiceClient:Start()
@@ -84,7 +84,7 @@ end
84
84
  function SettingsServiceClient:ObservePlayerSettings(player)
85
85
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
86
86
 
87
- return PlayerSettingsUtils.observePlayerSettings(self._binders.PlayerSettings, player)
87
+ return PlayerSettingsUtils.observePlayerSettings(self._playerSettingsBinder, player)
88
88
  end
89
89
 
90
90
  --[=[
@@ -96,7 +96,7 @@ end
96
96
  function SettingsServiceClient:ObservePlayerSettingsBrio(player)
97
97
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
98
98
 
99
- return PlayerSettingsUtils.observePlayerSettingsBrio(self._binders.PlayerSettings, player)
99
+ return PlayerSettingsUtils.observePlayerSettingsBrio(self._playerSettingsBinder, player)
100
100
  end
101
101
 
102
102
  --[=[
@@ -108,7 +108,7 @@ end
108
108
  function SettingsServiceClient:GetPlayerSettings(player)
109
109
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
110
110
 
111
- return PlayerSettingsUtils.getPlayerSettings(self._binders.PlayerSettings, player)
111
+ return PlayerSettingsUtils.getPlayerSettings(self._playerSettingsBinder, player)
112
112
  end
113
113
 
114
114
  --[=[
@@ -6,10 +6,11 @@ local require = require(script.Parent.loader).load(script)
6
6
 
7
7
  local BaseObject = require("BaseObject")
8
8
  local PlayerSettingsUtils = require("PlayerSettingsUtils")
9
- local SettingsBindersServer = require("SettingsBindersServer")
9
+ local PlayerSettings = require("PlayerSettings")
10
10
  local PlayerDataStoreService = require("PlayerDataStoreService")
11
11
  local DataStoreStringUtils = require("DataStoreStringUtils")
12
12
  local PlayerSettingsConstants = require("PlayerSettingsConstants")
13
+ local PlayerBinder = require("PlayerBinder")
13
14
 
14
15
  local PlayerHasSettings = setmetatable({}, BaseObject)
15
16
  PlayerHasSettings.ClassName = "PlayerHasSettings"
@@ -19,7 +20,7 @@ function PlayerHasSettings.new(player, serviceBag)
19
20
  local self = setmetatable(BaseObject.new(player), PlayerHasSettings)
20
21
 
21
22
  self._serviceBag = assert(serviceBag, "No serviceBag")
22
- self._settingsBindersServer = self._serviceBag:GetService(SettingsBindersServer)
23
+ self._playerSettingsBinder = self._serviceBag:GetService(PlayerSettings)
23
24
  self._playerDataStoreService = self._serviceBag:GetService(PlayerDataStoreService)
24
25
 
25
26
  self:_promiseLoadSettings()
@@ -28,8 +29,7 @@ function PlayerHasSettings.new(player, serviceBag)
28
29
  end
29
30
 
30
31
  function PlayerHasSettings:_promiseLoadSettings()
31
- self._settings = PlayerSettingsUtils.create(self._settingsBindersServer.PlayerSettings)
32
- self._maid:GiveTask(self._settings)
32
+ self._settings = self._maid:Add(PlayerSettingsUtils.create())
33
33
 
34
34
  self._maid:GivePromise(self._playerDataStoreService:PromiseDataStore(self._obj))
35
35
  :Then(function(dataStore)
@@ -51,7 +51,7 @@ function PlayerHasSettings:_promiseLoadSettings()
51
51
  end)
52
52
  end)
53
53
  :Catch(function(err)
54
- warn(("[PlayerHasSettings] - Failed to load settings for player. %s"):format(tostring(err)))
54
+ warn(string.format("[PlayerHasSettings] - Failed to load settings for player. %s", tostring(err)))
55
55
  end)
56
56
  :Finally(function()
57
57
  -- Parent anyway...
@@ -84,4 +84,4 @@ function PlayerHasSettings:_handleAttributeChanged(subStore, attributeName)
84
84
  subStore:Store(settingName, newValue)
85
85
  end
86
86
 
87
- return PlayerHasSettings
87
+ return PlayerBinder.new("PlayerHasSettings", PlayerHasSettings)
@@ -4,11 +4,14 @@
4
4
 
5
5
  local require = require(script.Parent.loader).load(script)
6
6
 
7
+ local Binder = require("Binder")
8
+ local DataStoreStringUtils = require("DataStoreStringUtils")
7
9
  local PlayerSettingsBase = require("PlayerSettingsBase")
8
10
  local PlayerSettingsConstants = require("PlayerSettingsConstants")
11
+ local PlayerSettingsInterface = require("PlayerSettingsInterface")
9
12
  local PlayerSettingsUtils = require("PlayerSettingsUtils")
13
+ local Remoting = require("Remoting")
10
14
  local SettingRegistryServiceShared = require("SettingRegistryServiceShared")
11
- local DataStoreStringUtils = require("DataStoreStringUtils")
12
15
 
13
16
  local PlayerSettings = setmetatable({}, PlayerSettingsBase)
14
17
  PlayerSettings.ClassName = "PlayerSettings"
@@ -20,15 +23,7 @@ function PlayerSettings.new(obj, serviceBag)
20
23
  self._serviceBag = assert(serviceBag, "No serviceBag")
21
24
  self._settingRegistryServiceShared = self._serviceBag:GetService(SettingRegistryServiceShared)
22
25
 
23
- self._remoteFunction = Instance.new("RemoteFunction")
24
- self._remoteFunction.Name = PlayerSettingsConstants.REMOTE_FUNCTION_NAME
25
- self._remoteFunction.Archivable = false
26
- self._remoteFunction.Parent = self._obj
27
- self._maid:GiveTask(self._remoteFunction)
28
-
29
- self._remoteFunction.OnServerInvoke = function(...)
30
- return self:_handleServerInvoke(...)
31
- end
26
+ self:_setupRemoting()
32
27
 
33
28
  self._maid:GiveTask(self._settingRegistryServiceShared:ObserveRegisteredDefinitionsBrio():Subscribe(function(brio)
34
29
  if brio:IsDead() then
@@ -39,6 +34,8 @@ function PlayerSettings.new(obj, serviceBag)
39
34
  self:EnsureInitialized(value:GetSettingName(), value:GetDefaultValue())
40
35
  end))
41
36
 
37
+ self._maid:GiveTask(PlayerSettingsInterface.Server:Implement(self._obj, self))
38
+
42
39
  return self
43
40
  end
44
41
 
@@ -65,17 +62,17 @@ function PlayerSettings:EnsureInitialized(settingName, defaultValue)
65
62
  end
66
63
  end
67
64
 
68
- function PlayerSettings:_handleServerInvoke(player, request, ...)
69
- assert(self:GetPlayer() == player, "Bad player")
65
+ function PlayerSettings:_setupRemoting()
66
+ self._remoting = self._maid:Add(Remoting.new(self._obj, "PlayerSettings", Remoting.Realms.SERVER))
70
67
 
71
- if request == PlayerSettingsConstants.REQUEST_UPDATE_SETTINGS then
72
- return self:_setSettings(...)
73
- else
74
- error(("Unknown request %q"):format(tostring(request)))
75
- end
68
+ self._maid:Add(self._remoting.RequestUpdateSettings:Bind(function(player, settingsMap)
69
+ assert(self:GetPlayer() == player, "Bad player")
70
+
71
+ return self:_setSettingsMap(settingsMap)
72
+ end))
76
73
  end
77
74
 
78
- function PlayerSettings:_setSettings(settingsMap)
75
+ function PlayerSettings:_setSettingsMap(settingsMap)
79
76
  assert(type(settingsMap) == "table", "Bad settingsMap")
80
77
 
81
78
  for settingName, value in pairs(settingsMap) do
@@ -123,4 +120,4 @@ function PlayerSettings:_setSettings(settingsMap)
123
120
  end
124
121
  end
125
122
 
126
- return PlayerSettings
123
+ return Binder.new("PlayerSettings", PlayerSettings)
@@ -22,26 +22,28 @@ function SettingsService:Init(serviceBag)
22
22
 
23
23
 
24
24
  -- Internal
25
- self._binders = self._serviceBag:GetService(require("SettingsBindersServer"))
25
+ self._playerSettingsBinder = self._serviceBag:GetService(require("PlayerSettings"))
26
+ self._serviceBag:GetService(require("PlayerHasSettings"))
27
+
26
28
  self._serviceBag:GetService(require("SettingRegistryServiceShared")):RegisterSettingService(self)
27
29
  end
28
30
 
29
31
  function SettingsService:ObservePlayerSettingsBrio(player)
30
32
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
31
33
 
32
- return PlayerSettingsUtils.observePlayerSettingsBrio(self._binders.PlayerSettings, player)
34
+ return PlayerSettingsUtils.observePlayerSettingsBrio(self._playerSettingsBinder, player)
33
35
  end
34
36
 
35
37
  function SettingsService:ObservePlayerSettings(player)
36
38
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
37
39
 
38
- return PlayerSettingsUtils.observePlayerSettings(self._binders.PlayerSettings, player)
40
+ return PlayerSettingsUtils.observePlayerSettings(self._playerSettingsBinder, player)
39
41
  end
40
42
 
41
43
  function SettingsService:GetPlayerSettings(player)
42
44
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
43
45
 
44
- return PlayerSettingsUtils.getPlayerSettings(self._binders.PlayerSettings, player)
46
+ return PlayerSettingsUtils.getPlayerSettings(self._playerSettingsBinder, player)
45
47
  end
46
48
 
47
49
  function SettingsService:PromisePlayerSettings(player, cancelToken)
@@ -0,0 +1,16 @@
1
+ --[=[
2
+ @class PlayerSettingsInterface
3
+ ]=]
4
+
5
+ local require = require(script.Parent.loader).load(script)
6
+
7
+ local TieDefinition = require("TieDefinition")
8
+
9
+ return TieDefinition.new("PlayerSettings", {
10
+ GetSettingProperty = TieDefinition.Types.METHOD;
11
+ GetValue = TieDefinition.Types.METHOD;
12
+ SetValue = TieDefinition.Types.METHOD;
13
+ ObserveValue = TieDefinition.Types.METHOD;
14
+ RestoreDefault = TieDefinition.Types.METHOD;
15
+ EnsureInitialized = TieDefinition.Types.METHOD;
16
+ })
@@ -20,16 +20,12 @@ local PlayerSettingsUtils = {}
20
20
  --[=[
21
21
  Creates a new player settings
22
22
 
23
- @param binder Binder<PlayerSettings>
24
23
  @return Folder
25
24
  ]=]
26
- function PlayerSettingsUtils.create(binder)
27
- assert(Binder.isBinder(binder), "No binder")
28
-
25
+ function PlayerSettingsUtils.create()
29
26
  local playerSettings = Instance.new("Folder")
30
27
  playerSettings.Name = PlayerSettingsConstants.PLAYER_SETTINGS_NAME
31
-
32
- binder:Bind(playerSettings)
28
+ playerSettings:AddTag("PlayerSettings")
33
29
 
34
30
  return playerSettings
35
31
  end
@@ -10,8 +10,8 @@
10
10
  local SettingDefinition = require("SettingDefinition")
11
11
 
12
12
  return require("SettingDefinitionProvider").new({
13
- SettingDefinition.new("LastTimeUpdateSeen", 0);
14
- SettingDefinition.new("LastTimeShopSeen", 0);
13
+ LastTimeUpdateSeen = 0;
14
+ LastTimeShopSeen = 0;
15
15
  })
16
16
  ```
17
17
 
@@ -24,6 +24,7 @@ local Players = game:GetService("Players")
24
24
 
25
25
  local SettingProperty = require("SettingProperty")
26
26
  local ServiceBag = require("ServiceBag")
27
+ local DuckTypeUtils = require("DuckTypeUtils")
27
28
 
28
29
  local SettingDefinition = {}
29
30
  SettingDefinition.ClassName = "SettingDefinition"
@@ -38,11 +39,12 @@ SettingDefinition.__index = SettingDefinition
38
39
  @return SettingDefinition<T>
39
40
  ]=]
40
41
  function SettingDefinition.new(settingName, defaultValue)
41
- local self = setmetatable({}, SettingDefinition)
42
-
43
42
  assert(type(settingName) == "string", "Bad settingName")
44
43
  assert(defaultValue ~= nil, "DefaultValue cannot be nil")
45
44
 
45
+ local self = setmetatable({}, SettingDefinition)
46
+
47
+
46
48
  self._settingName = settingName
47
49
  self._defaultValue = defaultValue
48
50
 
@@ -51,6 +53,16 @@ function SettingDefinition.new(settingName, defaultValue)
51
53
  return self
52
54
  end
53
55
 
56
+ --[=[
57
+ Returns true if the value is a setting definition
58
+
59
+ @param value any
60
+ @return boolean
61
+ ]=]
62
+ function SettingDefinition.isSettingDefinition(value)
63
+ return DuckTypeUtils.isImplementation(SettingDefinition, value)
64
+ end
65
+
54
66
  --[=[
55
67
  Gets a new setting property for the given definition
56
68
 
@@ -60,7 +72,9 @@ end
60
72
  ]=]
61
73
  function SettingDefinition:GetSettingProperty(serviceBag, player)
62
74
  assert(ServiceBag.isServiceBag(serviceBag), "Bad serviceBag")
63
- assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
75
+ assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
76
+
77
+ player = player or Players.LocalPlayer
64
78
 
65
79
  return SettingProperty.new(serviceBag, player, self)
66
80
  end
@@ -15,9 +15,9 @@
15
15
  local SettingDefinition = require("SettingDefinition")
16
16
 
17
17
  return require("SettingDefinitionProvider").new({
18
- SettingDefinition.new("KeyBinding", Enum.KeyCode.X);
19
- SettingDefinition.new("CameraShake", true);
20
- SettingDefinition.new("CameraSensitivity", 1);
18
+ KeyBinding = Enum.KeyCode.X;
19
+ CameraShake = true;
20
+ CameraSensitivity = 1;
21
21
  })
22
22
  ```
23
23
 
@@ -28,6 +28,7 @@ local require = require(script.Parent.loader).load(script)
28
28
 
29
29
  local SettingRegistryServiceShared = require("SettingRegistryServiceShared")
30
30
  local Maid = require("Maid")
31
+ local SettingDefinition = require("SettingDefinition")
31
32
 
32
33
  local SettingDefinitionProvider = {}
33
34
  SettingDefinitionProvider.ClassName = "SettingDefinitionProvider"
@@ -41,9 +42,9 @@ SettingDefinitionProvider.__index = SettingDefinitionProvider
41
42
  local SettingDefinition = require("SettingDefinition")
42
43
 
43
44
  return require("SettingDefinitionProvider").new({
44
- SettingDefinition.new("KeyBinding", Enum.KeyCode.X);
45
- SettingDefinition.new("CameraShake", true);
46
- SettingDefinition.new("CameraSensitivity", 1);
45
+ KeyBinding = Enum.KeyCode.X;
46
+ CameraShake = true;
47
+ CameraSensitivity = 1;
47
48
  })
48
49
  ```
49
50
 
@@ -56,14 +57,33 @@ function SettingDefinitionProvider.new(settingDefinitions)
56
57
  self._settingDefinitions = {}
57
58
  self._lookup = {}
58
59
 
59
- for _, settingDefinition in pairs(settingDefinitions) do
60
- table.insert(self._settingDefinitions, settingDefinition)
61
- self._lookup[settingDefinition:GetSettingName()] = settingDefinition
60
+ for key, value in pairs(settingDefinitions) do
61
+ if type(key) == "number" then
62
+ assert(SettingDefinition.isSettingDefinition(key), "Bad settingDefinition")
63
+
64
+ self:_addSettingDefinition(key)
65
+ elseif type(key) == "string" then
66
+ if SettingDefinition.isSettingDefinition(value) then
67
+ self:_addSettingDefinition(value)
68
+ else
69
+ local definition = SettingDefinition.new(key, value)
70
+ self:_addSettingDefinition(definition)
71
+ end
72
+ else
73
+ error("Bad key for settingDefinitions")
74
+ end
62
75
  end
63
76
 
64
77
  return self
65
78
  end
66
79
 
80
+ function SettingDefinitionProvider:_addSettingDefinition(settingDefinition)
81
+ assert(SettingDefinition.isSettingDefinition(settingDefinition), "Bad settingDefinition")
82
+
83
+ table.insert(self._settingDefinitions, settingDefinition)
84
+ self._lookup[settingDefinition:GetSettingName()] = settingDefinition
85
+ end
86
+
67
87
  --[=[
68
88
  Initializes the provider, storing the data in [SettingRegistryServiceShared]
69
89
 
@@ -104,9 +124,9 @@ end
104
124
  local SettingDefinition = require("SettingDefinition")
105
125
 
106
126
  local provider = require("SettingDefinitionProvider").new({
107
- SettingDefinition.new("KeyBinding", Enum.KeyCode.X);
108
- SettingDefinition.new("CameraShake", true);
109
- SettingDefinition.new("CameraSensitivity", 1);
127
+ KeyBinding = Enum.KeyCode.X;
128
+ CameraShake = true;
129
+ CameraSensitivity = 1;
110
130
  })
111
131
 
112
132
  local service = serviceBag:GetService(provider)
@@ -83,7 +83,7 @@ function SettingProperty:__index(index)
83
83
  elseif SettingProperty[index] then
84
84
  return SettingProperty[index]
85
85
  else
86
- error(("%q is not a member of SettingProperty %s"):format(tostring(index), self._definition:GetSettingName()))
86
+ error(string.format("%q is not a member of SettingProperty %s", tostring(index), self._definition:GetSettingName()))
87
87
  end
88
88
  end
89
89
 
@@ -91,7 +91,7 @@ function SettingProperty:__newindex(index, value)
91
91
  if index == "Value" then
92
92
  self:SetValue(value)
93
93
  elseif index == "DefaultValue" or index == "Changed" or SettingProperty[index] then
94
- error(("Cannot set %q"):format(tostring(index)))
94
+ error(string.format("Cannot set %q", tostring(index)))
95
95
  else
96
96
  rawset(self, index, value)
97
97
  end
@@ -1,12 +0,0 @@
1
- --[=[
2
- @class SettingsBindersClient
3
- ]=]
4
-
5
- local require = require(script.Parent.loader).load(script)
6
-
7
- local BinderProvider = require("BinderProvider")
8
- local Binder = require("Binder")
9
-
10
- return BinderProvider.new(script.Name, function(self, serviceBag)
11
- self:Add(Binder.new("PlayerSettings", require("PlayerSettingsClient"), serviceBag))
12
- end)
@@ -1,14 +0,0 @@
1
- --[=[
2
- @class SettingsBindersServer
3
- ]=]
4
-
5
- local require = require(script.Parent.loader).load(script)
6
-
7
- local BinderProvider = require("BinderProvider")
8
- local Binder = require("Binder")
9
- local PlayerBinder = require("PlayerBinder")
10
-
11
- return BinderProvider.new(script.Name, function(self, serviceBag)
12
- self:Add(Binder.new("PlayerSettings", require("PlayerSettings"), serviceBag))
13
- self:Add(PlayerBinder.new("PlayerHasSettings", require("PlayerHasSettings"), serviceBag))
14
- end)