roblox-opencode 1.0.0 → 1.0.2
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/README.md +112 -122
- package/commands/setup-game.md +108 -108
- package/commands/sync-check.md +53 -53
- package/core/roblox-core.md +93 -93
- package/dist/server.js +189 -167
- package/package.json +35 -35
- package/skills/roblox-analytics/SKILL.md +277 -277
- package/skills/roblox-analytics/references/event-batcher.luau +75 -75
- package/skills/roblox-animation-vfx/SKILL.md +1325 -1325
- package/skills/roblox-architecture/SKILL.md +877 -863
- package/skills/roblox-architecture/references/combat-systems.md +1381 -1381
- package/skills/roblox-code-review/SKILL.md +686 -686
- package/skills/roblox-data/SKILL.md +889 -889
- package/skills/roblox-data/references/inventory-systems.md +1729 -1729
- package/skills/roblox-debug/SKILL.md +98 -98
- package/skills/roblox-gui/SKILL.md +1103 -1103
- package/skills/roblox-gui-fusion/SKILL.md +150 -150
- package/skills/roblox-gui-fusion/references/inventory.luau +427 -427
- package/skills/roblox-gui-fusion/references/settings-menu.luau +579 -579
- package/skills/roblox-gui-fusion/references/shop.luau +411 -411
- package/skills/roblox-luau-mastery/SKILL.md +1618 -1519
- package/skills/roblox-monetization/SKILL.md +1084 -1084
- package/skills/roblox-monetization/references/process-receipt.luau +131 -131
- package/skills/roblox-networking/SKILL.md +669 -669
- package/skills/roblox-networking/references/remote-validator.luau +193 -193
- package/skills/roblox-publish-checklist/SKILL.md +127 -127
- package/skills/roblox-runtime/SKILL.md +753 -753
- package/skills/roblox-sharp-edges/SKILL.md +294 -294
- package/skills/roblox-sync/SKILL.md +126 -126
- package/skills/roblox-testing/SKILL.md +943 -943
- package/skills/roblox-tooling/SKILL.md +149 -149
- package/vendor/LICENSES/ProfileStore-LICENSE +201 -201
- package/vendor/LICENSES/RbxUtil-LICENSE +7 -7
- package/vendor/LICENSES/promise-LICENSE +20 -20
- package/vendor/LICENSES/t-LICENSE +21 -21
- package/vendor/LICENSES/testez-LICENSE +200 -200
- package/vendor/README.md +83 -83
- package/vendor/fusion/Animation/ExternalTime.luau +83 -83
- package/vendor/fusion/Animation/Spring.luau +321 -321
- package/vendor/fusion/Animation/Stopwatch.luau +127 -127
- package/vendor/fusion/Animation/Tween.luau +187 -187
- package/vendor/fusion/Animation/getTweenDuration.luau +27 -27
- package/vendor/fusion/Animation/getTweenRatio.luau +47 -47
- package/vendor/fusion/Animation/lerpType.luau +163 -163
- package/vendor/fusion/Animation/packType.luau +99 -99
- package/vendor/fusion/Animation/springCoefficients.luau +80 -80
- package/vendor/fusion/Animation/unpackType.luau +102 -102
- package/vendor/fusion/Colour/Oklab.luau +70 -70
- package/vendor/fusion/Colour/sRGB.luau +54 -54
- package/vendor/fusion/External.luau +167 -167
- package/vendor/fusion/ExternalDebug.luau +69 -69
- package/vendor/fusion/Graph/Observer.luau +113 -113
- package/vendor/fusion/Graph/castToGraph.luau +28 -28
- package/vendor/fusion/Graph/change.luau +80 -80
- package/vendor/fusion/Graph/depend.luau +32 -32
- package/vendor/fusion/Graph/evaluate.luau +55 -55
- package/vendor/fusion/Instances/Attribute.luau +57 -57
- package/vendor/fusion/Instances/AttributeChange.luau +46 -46
- package/vendor/fusion/Instances/AttributeOut.luau +63 -63
- package/vendor/fusion/Instances/Child.luau +21 -21
- package/vendor/fusion/Instances/Children.luau +147 -147
- package/vendor/fusion/Instances/Hydrate.luau +32 -32
- package/vendor/fusion/Instances/New.luau +52 -52
- package/vendor/fusion/Instances/OnChange.luau +49 -49
- package/vendor/fusion/Instances/OnEvent.luau +53 -53
- package/vendor/fusion/Instances/Out.luau +69 -69
- package/vendor/fusion/Instances/applyInstanceProps.luau +148 -148
- package/vendor/fusion/Instances/defaultProps.luau +194 -194
- package/vendor/fusion/LICENSE +21 -21
- package/vendor/fusion/Logging/formatError.luau +48 -48
- package/vendor/fusion/Logging/messages.luau +51 -51
- package/vendor/fusion/Logging/parseError.luau +24 -24
- package/vendor/fusion/Memory/checkLifetime.luau +133 -133
- package/vendor/fusion/Memory/deriveScope.luau +23 -23
- package/vendor/fusion/Memory/deriveScopeImpl.luau +44 -44
- package/vendor/fusion/Memory/doCleanup.luau +78 -78
- package/vendor/fusion/Memory/innerScope.luau +33 -33
- package/vendor/fusion/Memory/legacyCleanup.luau +17 -17
- package/vendor/fusion/Memory/needsDestruction.luau +16 -16
- package/vendor/fusion/Memory/poisonScope.luau +33 -33
- package/vendor/fusion/Memory/scopePool.luau +54 -54
- package/vendor/fusion/Memory/scoped.luau +26 -26
- package/vendor/fusion/Memory/whichLivesLonger.luau +74 -74
- package/vendor/fusion/RobloxExternal.luau +97 -97
- package/vendor/fusion/State/Computed.luau +138 -138
- package/vendor/fusion/State/For/Disassembly.luau +210 -210
- package/vendor/fusion/State/For/ForTypes.luau +30 -30
- package/vendor/fusion/State/For/init.luau +109 -109
- package/vendor/fusion/State/ForKeys.luau +93 -93
- package/vendor/fusion/State/ForPairs.luau +96 -96
- package/vendor/fusion/State/ForValues.luau +93 -93
- package/vendor/fusion/State/Value.luau +87 -87
- package/vendor/fusion/State/castToState.luau +25 -25
- package/vendor/fusion/State/peek.luau +30 -30
- package/vendor/fusion/Types.luau +314 -314
- package/vendor/fusion/Utility/Contextual.luau +90 -90
- package/vendor/fusion/Utility/Safe.luau +22 -22
- package/vendor/fusion/Utility/isSimilar.luau +29 -29
- package/vendor/fusion/Utility/merge.luau +35 -35
- package/vendor/fusion/Utility/nameOf.luau +34 -34
- package/vendor/fusion/Utility/never.luau +13 -13
- package/vendor/fusion/Utility/nicknames.luau +10 -10
- package/vendor/fusion/Utility/xtypeof.luau +26 -26
- package/vendor/fusion/init.luau +82 -82
- package/vendor/profilestore/init.luau +2242 -2242
- package/vendor/promise/init.luau +1982 -1982
- package/vendor/rbxutil/buffer-util/Buffer.test.luau +25 -25
- package/vendor/rbxutil/buffer-util/BufferReader.luau +228 -228
- package/vendor/rbxutil/buffer-util/BufferWriter.luau +269 -269
- package/vendor/rbxutil/buffer-util/DataTypeBuffer.luau +223 -223
- package/vendor/rbxutil/buffer-util/Types.luau +60 -60
- package/vendor/rbxutil/buffer-util/index.d.ts +153 -153
- package/vendor/rbxutil/buffer-util/init.luau +41 -41
- package/vendor/rbxutil/buffer-util/package.json +16 -16
- package/vendor/rbxutil/buffer-util/wally.toml +9 -9
- package/vendor/rbxutil/comm/Client/ClientComm.luau +232 -232
- package/vendor/rbxutil/comm/Client/ClientRemoteProperty.luau +156 -156
- package/vendor/rbxutil/comm/Client/ClientRemoteSignal.luau +109 -109
- package/vendor/rbxutil/comm/Client/init.luau +135 -135
- package/vendor/rbxutil/comm/Server/RemoteProperty.luau +295 -295
- package/vendor/rbxutil/comm/Server/RemoteSignal.luau +211 -211
- package/vendor/rbxutil/comm/Server/ServerComm.luau +211 -211
- package/vendor/rbxutil/comm/Server/init.luau +140 -140
- package/vendor/rbxutil/comm/Types.luau +18 -18
- package/vendor/rbxutil/comm/Util.luau +27 -27
- package/vendor/rbxutil/comm/init.luau +35 -35
- package/vendor/rbxutil/comm/wally.toml +13 -13
- package/vendor/rbxutil/component/init.luau +759 -759
- package/vendor/rbxutil/component/init.test.luau +311 -311
- package/vendor/rbxutil/component/wally.toml +14 -14
- package/vendor/rbxutil/concur/init.luau +542 -542
- package/vendor/rbxutil/concur/init.test.luau +364 -364
- package/vendor/rbxutil/concur/wally.toml +8 -8
- package/vendor/rbxutil/enum-list/init.luau +101 -101
- package/vendor/rbxutil/enum-list/init.test.luau +91 -91
- package/vendor/rbxutil/enum-list/wally.toml +8 -8
- package/vendor/rbxutil/find/index.d.ts +20 -20
- package/vendor/rbxutil/find/init.luau +44 -44
- package/vendor/rbxutil/find/package.json +17 -17
- package/vendor/rbxutil/find/wally.toml +8 -8
- package/vendor/rbxutil/input/Gamepad.luau +559 -559
- package/vendor/rbxutil/input/Keyboard.luau +124 -124
- package/vendor/rbxutil/input/Mouse.luau +278 -278
- package/vendor/rbxutil/input/PreferredInput.luau +91 -91
- package/vendor/rbxutil/input/Touch.luau +120 -120
- package/vendor/rbxutil/input/init.luau +33 -33
- package/vendor/rbxutil/input/wally.toml +12 -12
- package/vendor/rbxutil/loader/index.d.ts +15 -15
- package/vendor/rbxutil/loader/init.luau +137 -137
- package/vendor/rbxutil/loader/wally.toml +8 -8
- package/vendor/rbxutil/log/index.d.ts +38 -38
- package/vendor/rbxutil/log/init.luau +746 -746
- package/vendor/rbxutil/log/wally.toml +8 -8
- package/vendor/rbxutil/net/init.luau +190 -190
- package/vendor/rbxutil/net/wally.toml +8 -8
- package/vendor/rbxutil/option/index.d.ts +44 -44
- package/vendor/rbxutil/option/init.luau +489 -489
- package/vendor/rbxutil/option/init.test.luau +342 -342
- package/vendor/rbxutil/option/wally.toml +8 -8
- package/vendor/rbxutil/pid/index.d.ts +53 -53
- package/vendor/rbxutil/pid/init.luau +195 -195
- package/vendor/rbxutil/pid/package.json +16 -16
- package/vendor/rbxutil/pid/wally.toml +9 -9
- package/vendor/rbxutil/quaternion/index.d.ts +117 -117
- package/vendor/rbxutil/quaternion/init.luau +570 -570
- package/vendor/rbxutil/quaternion/package.json +16 -16
- package/vendor/rbxutil/quaternion/wally.toml +9 -9
- package/vendor/rbxutil/query/index.d.ts +43 -43
- package/vendor/rbxutil/query/init.luau +117 -117
- package/vendor/rbxutil/query/package.json +18 -18
- package/vendor/rbxutil/query/wally.toml +9 -9
- package/vendor/rbxutil/sequent/index.d.ts +28 -28
- package/vendor/rbxutil/sequent/init.luau +340 -340
- package/vendor/rbxutil/sequent/package.json +16 -16
- package/vendor/rbxutil/sequent/wally.toml +9 -9
- package/vendor/rbxutil/ser/init.luau +175 -175
- package/vendor/rbxutil/ser/init.test.luau +50 -50
- package/vendor/rbxutil/ser/wally.toml +11 -11
- package/vendor/rbxutil/shake/index.d.ts +36 -36
- package/vendor/rbxutil/shake/init.luau +532 -532
- package/vendor/rbxutil/shake/init.test.luau +267 -267
- package/vendor/rbxutil/shake/package.json +16 -16
- package/vendor/rbxutil/shake/wally.toml +9 -9
- package/vendor/rbxutil/signal/index.d.ts +100 -100
- package/vendor/rbxutil/signal/init.luau +432 -432
- package/vendor/rbxutil/signal/init.test.luau +190 -190
- package/vendor/rbxutil/signal/package.json +17 -17
- package/vendor/rbxutil/signal/wally.toml +9 -9
- package/vendor/rbxutil/silo/TableWatcher.luau +65 -65
- package/vendor/rbxutil/silo/Util.luau +55 -55
- package/vendor/rbxutil/silo/init.luau +338 -338
- package/vendor/rbxutil/silo/init.test.luau +215 -215
- package/vendor/rbxutil/silo/wally.toml +8 -8
- package/vendor/rbxutil/spring/index.d.ts +40 -40
- package/vendor/rbxutil/spring/init.luau +97 -97
- package/vendor/rbxutil/spring/package.json +17 -17
- package/vendor/rbxutil/spring/wally.toml +8 -8
- package/vendor/rbxutil/stream/index.d.ts +88 -88
- package/vendor/rbxutil/stream/init.luau +597 -597
- package/vendor/rbxutil/stream/package.json +18 -18
- package/vendor/rbxutil/stream/wally.toml +9 -9
- package/vendor/rbxutil/streamable/Streamable.luau +202 -202
- package/vendor/rbxutil/streamable/StreamableUtil.luau +80 -80
- package/vendor/rbxutil/streamable/init.luau +8 -8
- package/vendor/rbxutil/streamable/wally.toml +12 -12
- package/vendor/rbxutil/symbol/init.luau +56 -56
- package/vendor/rbxutil/symbol/init.test.luau +37 -37
- package/vendor/rbxutil/symbol/wally.toml +8 -8
- package/vendor/rbxutil/table-util/init.luau +938 -938
- package/vendor/rbxutil/table-util/init.test.luau +439 -439
- package/vendor/rbxutil/task-queue/index.d.ts +27 -27
- package/vendor/rbxutil/task-queue/init.luau +97 -97
- package/vendor/rbxutil/task-queue/wally.toml +8 -8
- package/vendor/rbxutil/timer/index.d.ts +81 -81
- package/vendor/rbxutil/timer/init.luau +249 -249
- package/vendor/rbxutil/timer/init.test.luau +73 -73
- package/vendor/rbxutil/timer/wally.toml +11 -11
- package/vendor/rbxutil/tree/index.d.ts +15 -15
- package/vendor/rbxutil/tree/init.luau +137 -137
- package/vendor/rbxutil/tree/wally.toml +8 -8
- package/vendor/rbxutil/trove/index.d.ts +46 -46
- package/vendor/rbxutil/trove/init.luau +787 -787
- package/vendor/rbxutil/trove/init.test.luau +203 -203
- package/vendor/rbxutil/trove/wally.toml +8 -8
- package/vendor/rbxutil/typed-remote/init.luau +196 -196
- package/vendor/rbxutil/typed-remote/wally.toml +8 -8
- package/vendor/rbxutil/wait-for/index.d.ts +17 -17
- package/vendor/rbxutil/wait-for/init.luau +257 -257
- package/vendor/rbxutil/wait-for/init.test.luau +182 -182
- package/vendor/rbxutil/wait-for/wally.toml +11 -11
- package/vendor/t/t.lua +1350 -1350
- package/vendor/testez/Context.lua +26 -26
- package/vendor/testez/Expectation.lua +311 -311
- package/vendor/testez/ExpectationContext.lua +38 -38
- package/vendor/testez/LifecycleHooks.lua +89 -89
- package/vendor/testez/Reporters/TeamCityReporter.lua +101 -101
- package/vendor/testez/Reporters/TextReporter.lua +105 -105
- package/vendor/testez/Reporters/TextReporterQuiet.lua +96 -96
- package/vendor/testez/TestBootstrap.lua +146 -146
- package/vendor/testez/TestEnum.lua +27 -27
- package/vendor/testez/TestPlan.lua +304 -304
- package/vendor/testez/TestPlanner.lua +39 -39
- package/vendor/testez/TestResults.lua +111 -111
- package/vendor/testez/TestRunner.lua +188 -188
- package/vendor/testez/TestSession.lua +243 -243
- package/vendor/testez/init.lua +39 -39
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
local ServerScriptService = game:GetService("ServerScriptService")
|
|
2
|
-
|
|
3
|
-
local Test = require(ServerScriptService.TestRunner.Test)
|
|
4
|
-
|
|
5
|
-
-- local BufferReader = require(script.Parent.BufferReader)
|
|
6
|
-
-- local BufferWriter = require(script.Parent.BufferWriter)
|
|
7
|
-
|
|
8
|
-
return function(ctx: Test.TestContext)
|
|
9
|
-
ctx:Describe("Some test", function()
|
|
10
|
-
ctx:Test("1 + 1 == 2", function()
|
|
11
|
-
ctx:Expect(1 + 1):ToBe(2)
|
|
12
|
-
end)
|
|
13
|
-
ctx:Test("1 + 1 != 3", function()
|
|
14
|
-
ctx:Expect(1 + 1):Not():ToBe(3)
|
|
15
|
-
end)
|
|
16
|
-
ctx:Describe("Nested group", function()
|
|
17
|
-
ctx:Test("true == true", function()
|
|
18
|
-
ctx:Expect(true):ToBe(true)
|
|
19
|
-
ctx:Expect(function()
|
|
20
|
-
return 32
|
|
21
|
-
end):ToBe(32)
|
|
22
|
-
end)
|
|
23
|
-
end)
|
|
24
|
-
end)
|
|
25
|
-
end
|
|
1
|
+
local ServerScriptService = game:GetService("ServerScriptService")
|
|
2
|
+
|
|
3
|
+
local Test = require(ServerScriptService.TestRunner.Test)
|
|
4
|
+
|
|
5
|
+
-- local BufferReader = require(script.Parent.BufferReader)
|
|
6
|
+
-- local BufferWriter = require(script.Parent.BufferWriter)
|
|
7
|
+
|
|
8
|
+
return function(ctx: Test.TestContext)
|
|
9
|
+
ctx:Describe("Some test", function()
|
|
10
|
+
ctx:Test("1 + 1 == 2", function()
|
|
11
|
+
ctx:Expect(1 + 1):ToBe(2)
|
|
12
|
+
end)
|
|
13
|
+
ctx:Test("1 + 1 != 3", function()
|
|
14
|
+
ctx:Expect(1 + 1):Not():ToBe(3)
|
|
15
|
+
end)
|
|
16
|
+
ctx:Describe("Nested group", function()
|
|
17
|
+
ctx:Test("true == true", function()
|
|
18
|
+
ctx:Expect(true):ToBe(true)
|
|
19
|
+
ctx:Expect(function()
|
|
20
|
+
return 32
|
|
21
|
+
end):ToBe(32)
|
|
22
|
+
end)
|
|
23
|
+
end)
|
|
24
|
+
end)
|
|
25
|
+
end
|
|
@@ -1,228 +1,228 @@
|
|
|
1
|
-
--!native
|
|
2
|
-
|
|
3
|
-
local BufferWriter = require(script.Parent.BufferWriter)
|
|
4
|
-
local DataTypeBuffer = require(script.Parent.DataTypeBuffer)
|
|
5
|
-
local Types = require(script.Parent.Types)
|
|
6
|
-
|
|
7
|
-
--[=[
|
|
8
|
-
@class BufferReader
|
|
9
|
-
|
|
10
|
-
A BufferReader is an abstraction wrapper for `buffer` objects
|
|
11
|
-
that provides a convenient way of reading out data from buffers.
|
|
12
|
-
]=]
|
|
13
|
-
local BufferReader = {}
|
|
14
|
-
BufferReader.__index = BufferReader
|
|
15
|
-
|
|
16
|
-
function BufferReader.new(buf: string | buffer | Types.BufferWriter): Types.BufferReader
|
|
17
|
-
if typeof(buf) == "string" then
|
|
18
|
-
return BufferReader.fromString(buf)
|
|
19
|
-
elseif typeof(buf) == "buffer" then
|
|
20
|
-
return BufferReader.fromBuffer(buf)
|
|
21
|
-
elseif typeof(buf) == "table" and getmetatable(buf :: any) == BufferWriter then
|
|
22
|
-
return BufferReader.fromBuffer(buf:GetBuffer())
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
error(`expected string or buffer; got {typeof(buf)}`)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
function BufferReader.fromBuffer(buf: buffer)
|
|
29
|
-
local self = setmetatable({
|
|
30
|
-
_buffer = buf,
|
|
31
|
-
_size = buffer.len(buf),
|
|
32
|
-
_cursor = 0,
|
|
33
|
-
}, BufferReader)
|
|
34
|
-
|
|
35
|
-
return self
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
function BufferReader.fromString(str: string)
|
|
39
|
-
return BufferReader.fromBuffer(buffer.fromstring(str))
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
function BufferReader:_assertSize(desiredSize: number)
|
|
43
|
-
if desiredSize > self._size then
|
|
44
|
-
error(`cursor out of bounds`, 3)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
--[=[
|
|
49
|
-
Read a signed 8-bit integer from the buffer.
|
|
50
|
-
]=]
|
|
51
|
-
function BufferReader:ReadInt8(): number
|
|
52
|
-
self:_assertSize(self._cursor + 1)
|
|
53
|
-
local n = buffer.readi8(self._buffer, self._cursor)
|
|
54
|
-
self._cursor += 1
|
|
55
|
-
return n
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
--[=[
|
|
59
|
-
Read an unsigned 8-bit integer from the buffer.
|
|
60
|
-
]=]
|
|
61
|
-
function BufferReader:ReadUInt8(): number
|
|
62
|
-
self:_assertSize(self._cursor + 1)
|
|
63
|
-
local n = buffer.readu8(self._buffer, self._cursor)
|
|
64
|
-
self._cursor += 1
|
|
65
|
-
return n
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
--[=[
|
|
69
|
-
Read a signed 16-bit integer from the buffer.
|
|
70
|
-
]=]
|
|
71
|
-
function BufferReader:ReadInt16(): number
|
|
72
|
-
self:_assertSize(self._cursor + 2)
|
|
73
|
-
local n = buffer.readi16(self._buffer, self._cursor)
|
|
74
|
-
self._cursor += 2
|
|
75
|
-
return n
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
--[=[
|
|
79
|
-
Read an unsigned 16-bit integer from the buffer.
|
|
80
|
-
]=]
|
|
81
|
-
function BufferReader:ReadUInt16(): number
|
|
82
|
-
self:_assertSize(self._cursor + 2)
|
|
83
|
-
local n = buffer.readu16(self._buffer, self._cursor)
|
|
84
|
-
self._cursor += 2
|
|
85
|
-
return n
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
--[=[
|
|
89
|
-
Read a signed 32-bit integer from the buffer.
|
|
90
|
-
]=]
|
|
91
|
-
function BufferReader:ReadInt32(): number
|
|
92
|
-
self:_assertSize(self._cursor + 4)
|
|
93
|
-
local n = buffer.readi32(self._buffer, self._cursor)
|
|
94
|
-
self._cursor += 4
|
|
95
|
-
return n
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
--[=[
|
|
99
|
-
Read an unsigned 32-bit integer from the buffer.
|
|
100
|
-
]=]
|
|
101
|
-
function BufferReader:ReadUInt32(): number
|
|
102
|
-
self:_assertSize(self._cursor + 4)
|
|
103
|
-
local n = buffer.readu32(self._buffer, self._cursor)
|
|
104
|
-
self._cursor += 4
|
|
105
|
-
return n
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
--[=[
|
|
109
|
-
Read a 32-bit single-precision float from the buffer.
|
|
110
|
-
]=]
|
|
111
|
-
function BufferReader:ReadFloat32(): number
|
|
112
|
-
self:_assertSize(self._cursor + 4)
|
|
113
|
-
local n = buffer.readf32(self._buffer, self._cursor)
|
|
114
|
-
self._cursor += 4
|
|
115
|
-
return n
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
--[=[
|
|
119
|
-
Read a 64-bit double-precision float from the buffer.
|
|
120
|
-
]=]
|
|
121
|
-
function BufferReader:ReadFloat64(): number
|
|
122
|
-
self:_assertSize(self._cursor + 8)
|
|
123
|
-
local n = buffer.readf64(self._buffer, self._cursor)
|
|
124
|
-
self._cursor += 8
|
|
125
|
-
return n
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
--[=[
|
|
129
|
-
Read a boolean from the buffer.
|
|
130
|
-
]=]
|
|
131
|
-
function BufferReader:ReadBool(): boolean
|
|
132
|
-
local n = self:ReadUInt8()
|
|
133
|
-
return n == 1
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
--[=[
|
|
137
|
-
Read a string from the buffer.
|
|
138
|
-
|
|
139
|
-
:::info
|
|
140
|
-
This assumes the string was written using the `BufferWriter:WriteString()`
|
|
141
|
-
method, which stores an extra integer to mark the size of the string.
|
|
142
|
-
:::
|
|
143
|
-
]=]
|
|
144
|
-
function BufferReader:ReadString(): string
|
|
145
|
-
local strLen = self:ReadUInt32()
|
|
146
|
-
self:_assertSize(self._cursor + strLen)
|
|
147
|
-
local s = buffer.readstring(self._buffer, self._cursor, strLen)
|
|
148
|
-
self._cursor += strLen
|
|
149
|
-
return s
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
--[=[
|
|
153
|
-
Read a string from the buffer.
|
|
154
|
-
|
|
155
|
-
:::info
|
|
156
|
-
This assumes the string was written using the `BufferWriter:WriteStringRaw()`.
|
|
157
|
-
:::
|
|
158
|
-
]=]
|
|
159
|
-
function BufferReader:ReadStringRaw(length: number): string
|
|
160
|
-
length = math.max(0, math.floor(length))
|
|
161
|
-
self:_assertSize(self._cursor + length)
|
|
162
|
-
local s = buffer.readstring(self._buffer, self._cursor, length)
|
|
163
|
-
self._cursor += length
|
|
164
|
-
return s
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
--[=[
|
|
168
|
-
Read a DataType from the buffer.
|
|
169
|
-
|
|
170
|
-
```lua
|
|
171
|
-
local cframe = reader:ReadDataType(CFrame)
|
|
172
|
-
```
|
|
173
|
-
]=]
|
|
174
|
-
function BufferReader:ReadDataType<T>(dataType: T): T
|
|
175
|
-
local name = DataTypeBuffer.DataTypesToString[dataType]
|
|
176
|
-
if not name then
|
|
177
|
-
error("unsupported data type", 2)
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
local readWrite = DataTypeBuffer.ReadWrite[name]
|
|
181
|
-
return readWrite.read(self)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
--[=[
|
|
185
|
-
Sets the position of the cursor.
|
|
186
|
-
]=]
|
|
187
|
-
function BufferReader:SetCursor(position: number)
|
|
188
|
-
position = math.floor(position)
|
|
189
|
-
if position < 0 or position > self._size then
|
|
190
|
-
error(`cursor position {position} out of range [0, {self._size}]`, 3)
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
self._cursor = position
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
--[=[
|
|
197
|
-
Returns the position of the cursor.
|
|
198
|
-
]=]
|
|
199
|
-
function BufferReader:GetCursor(): number
|
|
200
|
-
return self._cursor
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
--[=[
|
|
204
|
-
Resets the position of the cursor.
|
|
205
|
-
]=]
|
|
206
|
-
function BufferReader:ResetCursor()
|
|
207
|
-
self._cursor = 0
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
--[=[
|
|
211
|
-
Returns the size of the buffer.
|
|
212
|
-
]=]
|
|
213
|
-
function BufferReader:GetSize(): number
|
|
214
|
-
return self._size
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
--[=[
|
|
218
|
-
Returns the `buffer` object.
|
|
219
|
-
]=]
|
|
220
|
-
function BufferReader:GetBuffer(): buffer
|
|
221
|
-
return self._buffer
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
function BufferReader:__tostring()
|
|
225
|
-
return "BufferReader"
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
return BufferReader
|
|
1
|
+
--!native
|
|
2
|
+
|
|
3
|
+
local BufferWriter = require(script.Parent.BufferWriter)
|
|
4
|
+
local DataTypeBuffer = require(script.Parent.DataTypeBuffer)
|
|
5
|
+
local Types = require(script.Parent.Types)
|
|
6
|
+
|
|
7
|
+
--[=[
|
|
8
|
+
@class BufferReader
|
|
9
|
+
|
|
10
|
+
A BufferReader is an abstraction wrapper for `buffer` objects
|
|
11
|
+
that provides a convenient way of reading out data from buffers.
|
|
12
|
+
]=]
|
|
13
|
+
local BufferReader = {}
|
|
14
|
+
BufferReader.__index = BufferReader
|
|
15
|
+
|
|
16
|
+
function BufferReader.new(buf: string | buffer | Types.BufferWriter): Types.BufferReader
|
|
17
|
+
if typeof(buf) == "string" then
|
|
18
|
+
return BufferReader.fromString(buf)
|
|
19
|
+
elseif typeof(buf) == "buffer" then
|
|
20
|
+
return BufferReader.fromBuffer(buf)
|
|
21
|
+
elseif typeof(buf) == "table" and getmetatable(buf :: any) == BufferWriter then
|
|
22
|
+
return BufferReader.fromBuffer(buf:GetBuffer())
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
error(`expected string or buffer; got {typeof(buf)}`)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
function BufferReader.fromBuffer(buf: buffer)
|
|
29
|
+
local self = setmetatable({
|
|
30
|
+
_buffer = buf,
|
|
31
|
+
_size = buffer.len(buf),
|
|
32
|
+
_cursor = 0,
|
|
33
|
+
}, BufferReader)
|
|
34
|
+
|
|
35
|
+
return self
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
function BufferReader.fromString(str: string)
|
|
39
|
+
return BufferReader.fromBuffer(buffer.fromstring(str))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
function BufferReader:_assertSize(desiredSize: number)
|
|
43
|
+
if desiredSize > self._size then
|
|
44
|
+
error(`cursor out of bounds`, 3)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
--[=[
|
|
49
|
+
Read a signed 8-bit integer from the buffer.
|
|
50
|
+
]=]
|
|
51
|
+
function BufferReader:ReadInt8(): number
|
|
52
|
+
self:_assertSize(self._cursor + 1)
|
|
53
|
+
local n = buffer.readi8(self._buffer, self._cursor)
|
|
54
|
+
self._cursor += 1
|
|
55
|
+
return n
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
--[=[
|
|
59
|
+
Read an unsigned 8-bit integer from the buffer.
|
|
60
|
+
]=]
|
|
61
|
+
function BufferReader:ReadUInt8(): number
|
|
62
|
+
self:_assertSize(self._cursor + 1)
|
|
63
|
+
local n = buffer.readu8(self._buffer, self._cursor)
|
|
64
|
+
self._cursor += 1
|
|
65
|
+
return n
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
--[=[
|
|
69
|
+
Read a signed 16-bit integer from the buffer.
|
|
70
|
+
]=]
|
|
71
|
+
function BufferReader:ReadInt16(): number
|
|
72
|
+
self:_assertSize(self._cursor + 2)
|
|
73
|
+
local n = buffer.readi16(self._buffer, self._cursor)
|
|
74
|
+
self._cursor += 2
|
|
75
|
+
return n
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
--[=[
|
|
79
|
+
Read an unsigned 16-bit integer from the buffer.
|
|
80
|
+
]=]
|
|
81
|
+
function BufferReader:ReadUInt16(): number
|
|
82
|
+
self:_assertSize(self._cursor + 2)
|
|
83
|
+
local n = buffer.readu16(self._buffer, self._cursor)
|
|
84
|
+
self._cursor += 2
|
|
85
|
+
return n
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
--[=[
|
|
89
|
+
Read a signed 32-bit integer from the buffer.
|
|
90
|
+
]=]
|
|
91
|
+
function BufferReader:ReadInt32(): number
|
|
92
|
+
self:_assertSize(self._cursor + 4)
|
|
93
|
+
local n = buffer.readi32(self._buffer, self._cursor)
|
|
94
|
+
self._cursor += 4
|
|
95
|
+
return n
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
--[=[
|
|
99
|
+
Read an unsigned 32-bit integer from the buffer.
|
|
100
|
+
]=]
|
|
101
|
+
function BufferReader:ReadUInt32(): number
|
|
102
|
+
self:_assertSize(self._cursor + 4)
|
|
103
|
+
local n = buffer.readu32(self._buffer, self._cursor)
|
|
104
|
+
self._cursor += 4
|
|
105
|
+
return n
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
--[=[
|
|
109
|
+
Read a 32-bit single-precision float from the buffer.
|
|
110
|
+
]=]
|
|
111
|
+
function BufferReader:ReadFloat32(): number
|
|
112
|
+
self:_assertSize(self._cursor + 4)
|
|
113
|
+
local n = buffer.readf32(self._buffer, self._cursor)
|
|
114
|
+
self._cursor += 4
|
|
115
|
+
return n
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
--[=[
|
|
119
|
+
Read a 64-bit double-precision float from the buffer.
|
|
120
|
+
]=]
|
|
121
|
+
function BufferReader:ReadFloat64(): number
|
|
122
|
+
self:_assertSize(self._cursor + 8)
|
|
123
|
+
local n = buffer.readf64(self._buffer, self._cursor)
|
|
124
|
+
self._cursor += 8
|
|
125
|
+
return n
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
--[=[
|
|
129
|
+
Read a boolean from the buffer.
|
|
130
|
+
]=]
|
|
131
|
+
function BufferReader:ReadBool(): boolean
|
|
132
|
+
local n = self:ReadUInt8()
|
|
133
|
+
return n == 1
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
--[=[
|
|
137
|
+
Read a string from the buffer.
|
|
138
|
+
|
|
139
|
+
:::info
|
|
140
|
+
This assumes the string was written using the `BufferWriter:WriteString()`
|
|
141
|
+
method, which stores an extra integer to mark the size of the string.
|
|
142
|
+
:::
|
|
143
|
+
]=]
|
|
144
|
+
function BufferReader:ReadString(): string
|
|
145
|
+
local strLen = self:ReadUInt32()
|
|
146
|
+
self:_assertSize(self._cursor + strLen)
|
|
147
|
+
local s = buffer.readstring(self._buffer, self._cursor, strLen)
|
|
148
|
+
self._cursor += strLen
|
|
149
|
+
return s
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
--[=[
|
|
153
|
+
Read a string from the buffer.
|
|
154
|
+
|
|
155
|
+
:::info
|
|
156
|
+
This assumes the string was written using the `BufferWriter:WriteStringRaw()`.
|
|
157
|
+
:::
|
|
158
|
+
]=]
|
|
159
|
+
function BufferReader:ReadStringRaw(length: number): string
|
|
160
|
+
length = math.max(0, math.floor(length))
|
|
161
|
+
self:_assertSize(self._cursor + length)
|
|
162
|
+
local s = buffer.readstring(self._buffer, self._cursor, length)
|
|
163
|
+
self._cursor += length
|
|
164
|
+
return s
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
--[=[
|
|
168
|
+
Read a DataType from the buffer.
|
|
169
|
+
|
|
170
|
+
```lua
|
|
171
|
+
local cframe = reader:ReadDataType(CFrame)
|
|
172
|
+
```
|
|
173
|
+
]=]
|
|
174
|
+
function BufferReader:ReadDataType<T>(dataType: T): T
|
|
175
|
+
local name = DataTypeBuffer.DataTypesToString[dataType]
|
|
176
|
+
if not name then
|
|
177
|
+
error("unsupported data type", 2)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
local readWrite = DataTypeBuffer.ReadWrite[name]
|
|
181
|
+
return readWrite.read(self)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
--[=[
|
|
185
|
+
Sets the position of the cursor.
|
|
186
|
+
]=]
|
|
187
|
+
function BufferReader:SetCursor(position: number)
|
|
188
|
+
position = math.floor(position)
|
|
189
|
+
if position < 0 or position > self._size then
|
|
190
|
+
error(`cursor position {position} out of range [0, {self._size}]`, 3)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
self._cursor = position
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
--[=[
|
|
197
|
+
Returns the position of the cursor.
|
|
198
|
+
]=]
|
|
199
|
+
function BufferReader:GetCursor(): number
|
|
200
|
+
return self._cursor
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
--[=[
|
|
204
|
+
Resets the position of the cursor.
|
|
205
|
+
]=]
|
|
206
|
+
function BufferReader:ResetCursor()
|
|
207
|
+
self._cursor = 0
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
--[=[
|
|
211
|
+
Returns the size of the buffer.
|
|
212
|
+
]=]
|
|
213
|
+
function BufferReader:GetSize(): number
|
|
214
|
+
return self._size
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
--[=[
|
|
218
|
+
Returns the `buffer` object.
|
|
219
|
+
]=]
|
|
220
|
+
function BufferReader:GetBuffer(): buffer
|
|
221
|
+
return self._buffer
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
function BufferReader:__tostring()
|
|
225
|
+
return "BufferReader"
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
return BufferReader
|