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,47 +1,47 @@
|
|
|
1
|
-
--!strict
|
|
2
|
-
--!nolint LocalUnused
|
|
3
|
-
--!nolint LocalShadow
|
|
4
|
-
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
-
|
|
6
|
-
--[[
|
|
7
|
-
Given a `tweenInfo` and `currentTime`, returns a ratio which can be used to
|
|
8
|
-
tween between two values over time.
|
|
9
|
-
]]
|
|
10
|
-
|
|
11
|
-
local TweenService = game:GetService("TweenService")
|
|
12
|
-
|
|
13
|
-
local function getTweenRatio(
|
|
14
|
-
tweenInfo: TweenInfo,
|
|
15
|
-
currentTime: number
|
|
16
|
-
): number
|
|
17
|
-
local delay = tweenInfo.DelayTime
|
|
18
|
-
local duration = tweenInfo.Time
|
|
19
|
-
local reverses = tweenInfo.Reverses
|
|
20
|
-
local numCycles = 1 + tweenInfo.RepeatCount
|
|
21
|
-
local easeStyle = tweenInfo.EasingStyle
|
|
22
|
-
local easeDirection = tweenInfo.EasingDirection
|
|
23
|
-
local cycleDuration = delay + duration
|
|
24
|
-
if reverses then
|
|
25
|
-
cycleDuration += duration
|
|
26
|
-
end
|
|
27
|
-
-- If currentTime is infinity, then presumably the tween should be over.
|
|
28
|
-
-- This avoids NaN when the duration of an infinitely repeating tween is given.
|
|
29
|
-
if currentTime == math.huge then
|
|
30
|
-
return 1
|
|
31
|
-
end
|
|
32
|
-
if currentTime >= cycleDuration * numCycles and tweenInfo.RepeatCount > -1 then
|
|
33
|
-
return 1
|
|
34
|
-
end
|
|
35
|
-
local cycleTime = currentTime % cycleDuration
|
|
36
|
-
if cycleTime <= delay then
|
|
37
|
-
return 0
|
|
38
|
-
end
|
|
39
|
-
local tweenProgress = (cycleTime - delay) / duration
|
|
40
|
-
if tweenProgress > 1 then
|
|
41
|
-
tweenProgress = 2 - tweenProgress
|
|
42
|
-
end
|
|
43
|
-
local ratio = TweenService:GetValue(tweenProgress, easeStyle, easeDirection)
|
|
44
|
-
return ratio
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
return getTweenRatio
|
|
1
|
+
--!strict
|
|
2
|
+
--!nolint LocalUnused
|
|
3
|
+
--!nolint LocalShadow
|
|
4
|
+
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
+
|
|
6
|
+
--[[
|
|
7
|
+
Given a `tweenInfo` and `currentTime`, returns a ratio which can be used to
|
|
8
|
+
tween between two values over time.
|
|
9
|
+
]]
|
|
10
|
+
|
|
11
|
+
local TweenService = game:GetService("TweenService")
|
|
12
|
+
|
|
13
|
+
local function getTweenRatio(
|
|
14
|
+
tweenInfo: TweenInfo,
|
|
15
|
+
currentTime: number
|
|
16
|
+
): number
|
|
17
|
+
local delay = tweenInfo.DelayTime
|
|
18
|
+
local duration = tweenInfo.Time
|
|
19
|
+
local reverses = tweenInfo.Reverses
|
|
20
|
+
local numCycles = 1 + tweenInfo.RepeatCount
|
|
21
|
+
local easeStyle = tweenInfo.EasingStyle
|
|
22
|
+
local easeDirection = tweenInfo.EasingDirection
|
|
23
|
+
local cycleDuration = delay + duration
|
|
24
|
+
if reverses then
|
|
25
|
+
cycleDuration += duration
|
|
26
|
+
end
|
|
27
|
+
-- If currentTime is infinity, then presumably the tween should be over.
|
|
28
|
+
-- This avoids NaN when the duration of an infinitely repeating tween is given.
|
|
29
|
+
if currentTime == math.huge then
|
|
30
|
+
return 1
|
|
31
|
+
end
|
|
32
|
+
if currentTime >= cycleDuration * numCycles and tweenInfo.RepeatCount > -1 then
|
|
33
|
+
return 1
|
|
34
|
+
end
|
|
35
|
+
local cycleTime = currentTime % cycleDuration
|
|
36
|
+
if cycleTime <= delay then
|
|
37
|
+
return 0
|
|
38
|
+
end
|
|
39
|
+
local tweenProgress = (cycleTime - delay) / duration
|
|
40
|
+
if tweenProgress > 1 then
|
|
41
|
+
tweenProgress = 2 - tweenProgress
|
|
42
|
+
end
|
|
43
|
+
local ratio = TweenService:GetValue(tweenProgress, easeStyle, easeDirection)
|
|
44
|
+
return ratio
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
return getTweenRatio
|
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
--!strict
|
|
2
|
-
--!nolint LocalUnused
|
|
3
|
-
--!nolint LocalShadow
|
|
4
|
-
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
-
|
|
6
|
-
--[[
|
|
7
|
-
Linearly interpolates the given animatable types by a ratio.
|
|
8
|
-
If the types are different or not animatable, then the first value will be
|
|
9
|
-
returned for ratios below 0.5, and the second value for 0.5 and above.
|
|
10
|
-
]]
|
|
11
|
-
|
|
12
|
-
local Package = script.Parent.Parent
|
|
13
|
-
local Oklab = require(Package.Colour.Oklab)
|
|
14
|
-
|
|
15
|
-
local function lerpType(
|
|
16
|
-
from: unknown,
|
|
17
|
-
to: unknown,
|
|
18
|
-
ratio: number
|
|
19
|
-
): unknown
|
|
20
|
-
local typeString = typeof(from)
|
|
21
|
-
|
|
22
|
-
if typeof(to) == typeString then
|
|
23
|
-
-- both types must match for interpolation to make sense
|
|
24
|
-
if typeString == "number" then
|
|
25
|
-
local to, from = to :: number, from :: number
|
|
26
|
-
return (to - from) * ratio + from
|
|
27
|
-
|
|
28
|
-
elseif typeString == "CFrame" then
|
|
29
|
-
local to, from = to :: CFrame, from :: CFrame
|
|
30
|
-
return from:Lerp(to, ratio)
|
|
31
|
-
|
|
32
|
-
elseif typeString == "Color3" then
|
|
33
|
-
local to, from = to :: Color3, from :: Color3
|
|
34
|
-
local fromLab = Oklab.fromSRGB(from)
|
|
35
|
-
local toLab = Oklab.fromSRGB(to)
|
|
36
|
-
return Oklab.toSRGB(
|
|
37
|
-
fromLab:Lerp(toLab, ratio),
|
|
38
|
-
false
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
elseif typeString == "ColorSequenceKeypoint" then
|
|
42
|
-
local to, from = to :: ColorSequenceKeypoint, from :: ColorSequenceKeypoint
|
|
43
|
-
local fromLab = Oklab.fromSRGB(from.Value)
|
|
44
|
-
local toLab = Oklab.fromSRGB(to.Value)
|
|
45
|
-
return ColorSequenceKeypoint.new(
|
|
46
|
-
(to.Time - from.Time) * ratio + from.Time,
|
|
47
|
-
Oklab.toSRGB(
|
|
48
|
-
fromLab:Lerp(toLab, ratio),
|
|
49
|
-
false
|
|
50
|
-
)
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
elseif typeString == "DateTime" then
|
|
54
|
-
local to, from = to :: DateTime, from :: DateTime
|
|
55
|
-
return DateTime.fromUnixTimestampMillis(
|
|
56
|
-
(to.UnixTimestampMillis - from.UnixTimestampMillis) * ratio + from.UnixTimestampMillis
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
elseif typeString == "NumberRange" then
|
|
60
|
-
local to, from = to :: NumberRange, from :: NumberRange
|
|
61
|
-
return NumberRange.new(
|
|
62
|
-
(to.Min - from.Min) * ratio + from.Min,
|
|
63
|
-
(to.Max - from.Max) * ratio + from.Max
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
elseif typeString == "NumberSequenceKeypoint" then
|
|
67
|
-
local to, from = to :: NumberSequenceKeypoint, from :: NumberSequenceKeypoint
|
|
68
|
-
return NumberSequenceKeypoint.new(
|
|
69
|
-
(to.Time - from.Time) * ratio + from.Time,
|
|
70
|
-
(to.Value - from.Value) * ratio + from.Value,
|
|
71
|
-
(to.Envelope - from.Envelope) * ratio + from.Envelope
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
elseif typeString == "PhysicalProperties" then
|
|
75
|
-
local to, from = to :: PhysicalProperties, from :: PhysicalProperties
|
|
76
|
-
return PhysicalProperties.new(
|
|
77
|
-
(to.Density - from.Density) * ratio + from.Density,
|
|
78
|
-
(to.Friction - from.Friction) * ratio + from.Friction,
|
|
79
|
-
(to.Elasticity - from.Elasticity) * ratio + from.Elasticity,
|
|
80
|
-
(to.FrictionWeight - from.FrictionWeight) * ratio + from.FrictionWeight,
|
|
81
|
-
(to.ElasticityWeight - from.ElasticityWeight) * ratio + from.ElasticityWeight
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
elseif typeString == "Ray" then
|
|
85
|
-
local to, from = to :: Ray, from :: Ray
|
|
86
|
-
return Ray.new(
|
|
87
|
-
from.Origin:Lerp(to.Origin, ratio),
|
|
88
|
-
from.Direction:Lerp(to.Direction, ratio)
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
elseif typeString == "Rect" then
|
|
92
|
-
local to, from = to :: Rect, from :: Rect
|
|
93
|
-
return Rect.new(
|
|
94
|
-
from.Min:Lerp(to.Min, ratio),
|
|
95
|
-
from.Max:Lerp(to.Max, ratio)
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
elseif typeString == "Region3" then
|
|
99
|
-
local to, from = to :: Region3, from :: Region3
|
|
100
|
-
-- FUTURE: support rotated Region3s if/when they become constructable
|
|
101
|
-
local position = from.CFrame.Position:Lerp(to.CFrame.Position, ratio)
|
|
102
|
-
local halfSize = from.Size:Lerp(to.Size, ratio) / 2
|
|
103
|
-
return Region3.new(position - halfSize, position + halfSize)
|
|
104
|
-
|
|
105
|
-
elseif typeString == "Region3int16" then
|
|
106
|
-
local to, from = to :: Region3int16, from :: Region3int16
|
|
107
|
-
return Region3int16.new(
|
|
108
|
-
Vector3int16.new(
|
|
109
|
-
(to.Min.X - from.Min.X) * ratio + from.Min.X,
|
|
110
|
-
(to.Min.Y - from.Min.Y) * ratio + from.Min.Y,
|
|
111
|
-
(to.Min.Z - from.Min.Z) * ratio + from.Min.Z
|
|
112
|
-
),
|
|
113
|
-
Vector3int16.new(
|
|
114
|
-
(to.Max.X - from.Max.X) * ratio + from.Max.X,
|
|
115
|
-
(to.Max.Y - from.Max.Y) * ratio + from.Max.Y,
|
|
116
|
-
(to.Max.Z - from.Max.Z) * ratio + from.Max.Z
|
|
117
|
-
)
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
elseif typeString == "UDim" then
|
|
121
|
-
local to, from = to :: UDim, from :: UDim
|
|
122
|
-
return UDim.new(
|
|
123
|
-
(to.Scale - from.Scale) * ratio + from.Scale,
|
|
124
|
-
(to.Offset - from.Offset) * ratio + from.Offset
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
elseif typeString == "UDim2" then
|
|
128
|
-
local to, from = to :: UDim2, from :: UDim2
|
|
129
|
-
return from:Lerp(to, ratio)
|
|
130
|
-
|
|
131
|
-
elseif typeString == "Vector2" then
|
|
132
|
-
local to, from = to :: Vector2, from :: Vector2
|
|
133
|
-
return from:Lerp(to, ratio)
|
|
134
|
-
|
|
135
|
-
elseif typeString == "Vector2int16" then
|
|
136
|
-
local to, from = to :: Vector2int16, from :: Vector2int16
|
|
137
|
-
return Vector2int16.new(
|
|
138
|
-
(to.X - from.X) * ratio + from.X,
|
|
139
|
-
(to.Y - from.Y) * ratio + from.Y
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
elseif typeString == "Vector3" then
|
|
143
|
-
local to, from = to :: Vector3, from :: Vector3
|
|
144
|
-
return from:Lerp(to, ratio)
|
|
145
|
-
|
|
146
|
-
elseif typeString == "Vector3int16" then
|
|
147
|
-
local to, from = to :: Vector3int16, from :: Vector3int16
|
|
148
|
-
return Vector3int16.new(
|
|
149
|
-
(to.X - from.X) * ratio + from.X,
|
|
150
|
-
(to.Y - from.Y) * ratio + from.Y,
|
|
151
|
-
(to.Z - from.Z) * ratio + from.Z
|
|
152
|
-
)
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
-- fallback case: the types are different or not animatable
|
|
157
|
-
if ratio < 0.5 then
|
|
158
|
-
return from
|
|
159
|
-
else
|
|
160
|
-
return to
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
1
|
+
--!strict
|
|
2
|
+
--!nolint LocalUnused
|
|
3
|
+
--!nolint LocalShadow
|
|
4
|
+
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
+
|
|
6
|
+
--[[
|
|
7
|
+
Linearly interpolates the given animatable types by a ratio.
|
|
8
|
+
If the types are different or not animatable, then the first value will be
|
|
9
|
+
returned for ratios below 0.5, and the second value for 0.5 and above.
|
|
10
|
+
]]
|
|
11
|
+
|
|
12
|
+
local Package = script.Parent.Parent
|
|
13
|
+
local Oklab = require(Package.Colour.Oklab)
|
|
14
|
+
|
|
15
|
+
local function lerpType(
|
|
16
|
+
from: unknown,
|
|
17
|
+
to: unknown,
|
|
18
|
+
ratio: number
|
|
19
|
+
): unknown
|
|
20
|
+
local typeString = typeof(from)
|
|
21
|
+
|
|
22
|
+
if typeof(to) == typeString then
|
|
23
|
+
-- both types must match for interpolation to make sense
|
|
24
|
+
if typeString == "number" then
|
|
25
|
+
local to, from = to :: number, from :: number
|
|
26
|
+
return (to - from) * ratio + from
|
|
27
|
+
|
|
28
|
+
elseif typeString == "CFrame" then
|
|
29
|
+
local to, from = to :: CFrame, from :: CFrame
|
|
30
|
+
return from:Lerp(to, ratio)
|
|
31
|
+
|
|
32
|
+
elseif typeString == "Color3" then
|
|
33
|
+
local to, from = to :: Color3, from :: Color3
|
|
34
|
+
local fromLab = Oklab.fromSRGB(from)
|
|
35
|
+
local toLab = Oklab.fromSRGB(to)
|
|
36
|
+
return Oklab.toSRGB(
|
|
37
|
+
fromLab:Lerp(toLab, ratio),
|
|
38
|
+
false
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
elseif typeString == "ColorSequenceKeypoint" then
|
|
42
|
+
local to, from = to :: ColorSequenceKeypoint, from :: ColorSequenceKeypoint
|
|
43
|
+
local fromLab = Oklab.fromSRGB(from.Value)
|
|
44
|
+
local toLab = Oklab.fromSRGB(to.Value)
|
|
45
|
+
return ColorSequenceKeypoint.new(
|
|
46
|
+
(to.Time - from.Time) * ratio + from.Time,
|
|
47
|
+
Oklab.toSRGB(
|
|
48
|
+
fromLab:Lerp(toLab, ratio),
|
|
49
|
+
false
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
elseif typeString == "DateTime" then
|
|
54
|
+
local to, from = to :: DateTime, from :: DateTime
|
|
55
|
+
return DateTime.fromUnixTimestampMillis(
|
|
56
|
+
(to.UnixTimestampMillis - from.UnixTimestampMillis) * ratio + from.UnixTimestampMillis
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
elseif typeString == "NumberRange" then
|
|
60
|
+
local to, from = to :: NumberRange, from :: NumberRange
|
|
61
|
+
return NumberRange.new(
|
|
62
|
+
(to.Min - from.Min) * ratio + from.Min,
|
|
63
|
+
(to.Max - from.Max) * ratio + from.Max
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
elseif typeString == "NumberSequenceKeypoint" then
|
|
67
|
+
local to, from = to :: NumberSequenceKeypoint, from :: NumberSequenceKeypoint
|
|
68
|
+
return NumberSequenceKeypoint.new(
|
|
69
|
+
(to.Time - from.Time) * ratio + from.Time,
|
|
70
|
+
(to.Value - from.Value) * ratio + from.Value,
|
|
71
|
+
(to.Envelope - from.Envelope) * ratio + from.Envelope
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
elseif typeString == "PhysicalProperties" then
|
|
75
|
+
local to, from = to :: PhysicalProperties, from :: PhysicalProperties
|
|
76
|
+
return PhysicalProperties.new(
|
|
77
|
+
(to.Density - from.Density) * ratio + from.Density,
|
|
78
|
+
(to.Friction - from.Friction) * ratio + from.Friction,
|
|
79
|
+
(to.Elasticity - from.Elasticity) * ratio + from.Elasticity,
|
|
80
|
+
(to.FrictionWeight - from.FrictionWeight) * ratio + from.FrictionWeight,
|
|
81
|
+
(to.ElasticityWeight - from.ElasticityWeight) * ratio + from.ElasticityWeight
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
elseif typeString == "Ray" then
|
|
85
|
+
local to, from = to :: Ray, from :: Ray
|
|
86
|
+
return Ray.new(
|
|
87
|
+
from.Origin:Lerp(to.Origin, ratio),
|
|
88
|
+
from.Direction:Lerp(to.Direction, ratio)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
elseif typeString == "Rect" then
|
|
92
|
+
local to, from = to :: Rect, from :: Rect
|
|
93
|
+
return Rect.new(
|
|
94
|
+
from.Min:Lerp(to.Min, ratio),
|
|
95
|
+
from.Max:Lerp(to.Max, ratio)
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
elseif typeString == "Region3" then
|
|
99
|
+
local to, from = to :: Region3, from :: Region3
|
|
100
|
+
-- FUTURE: support rotated Region3s if/when they become constructable
|
|
101
|
+
local position = from.CFrame.Position:Lerp(to.CFrame.Position, ratio)
|
|
102
|
+
local halfSize = from.Size:Lerp(to.Size, ratio) / 2
|
|
103
|
+
return Region3.new(position - halfSize, position + halfSize)
|
|
104
|
+
|
|
105
|
+
elseif typeString == "Region3int16" then
|
|
106
|
+
local to, from = to :: Region3int16, from :: Region3int16
|
|
107
|
+
return Region3int16.new(
|
|
108
|
+
Vector3int16.new(
|
|
109
|
+
(to.Min.X - from.Min.X) * ratio + from.Min.X,
|
|
110
|
+
(to.Min.Y - from.Min.Y) * ratio + from.Min.Y,
|
|
111
|
+
(to.Min.Z - from.Min.Z) * ratio + from.Min.Z
|
|
112
|
+
),
|
|
113
|
+
Vector3int16.new(
|
|
114
|
+
(to.Max.X - from.Max.X) * ratio + from.Max.X,
|
|
115
|
+
(to.Max.Y - from.Max.Y) * ratio + from.Max.Y,
|
|
116
|
+
(to.Max.Z - from.Max.Z) * ratio + from.Max.Z
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
elseif typeString == "UDim" then
|
|
121
|
+
local to, from = to :: UDim, from :: UDim
|
|
122
|
+
return UDim.new(
|
|
123
|
+
(to.Scale - from.Scale) * ratio + from.Scale,
|
|
124
|
+
(to.Offset - from.Offset) * ratio + from.Offset
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
elseif typeString == "UDim2" then
|
|
128
|
+
local to, from = to :: UDim2, from :: UDim2
|
|
129
|
+
return from:Lerp(to, ratio)
|
|
130
|
+
|
|
131
|
+
elseif typeString == "Vector2" then
|
|
132
|
+
local to, from = to :: Vector2, from :: Vector2
|
|
133
|
+
return from:Lerp(to, ratio)
|
|
134
|
+
|
|
135
|
+
elseif typeString == "Vector2int16" then
|
|
136
|
+
local to, from = to :: Vector2int16, from :: Vector2int16
|
|
137
|
+
return Vector2int16.new(
|
|
138
|
+
(to.X - from.X) * ratio + from.X,
|
|
139
|
+
(to.Y - from.Y) * ratio + from.Y
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
elseif typeString == "Vector3" then
|
|
143
|
+
local to, from = to :: Vector3, from :: Vector3
|
|
144
|
+
return from:Lerp(to, ratio)
|
|
145
|
+
|
|
146
|
+
elseif typeString == "Vector3int16" then
|
|
147
|
+
local to, from = to :: Vector3int16, from :: Vector3int16
|
|
148
|
+
return Vector3int16.new(
|
|
149
|
+
(to.X - from.X) * ratio + from.X,
|
|
150
|
+
(to.Y - from.Y) * ratio + from.Y,
|
|
151
|
+
(to.Z - from.Z) * ratio + from.Z
|
|
152
|
+
)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
-- fallback case: the types are different or not animatable
|
|
157
|
+
if ratio < 0.5 then
|
|
158
|
+
return from
|
|
159
|
+
else
|
|
160
|
+
return to
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
164
|
return lerpType
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
--!strict
|
|
2
|
-
--!nolint LocalUnused
|
|
3
|
-
--!nolint LocalShadow
|
|
4
|
-
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
-
|
|
6
|
-
--[[
|
|
7
|
-
Packs an array of numbers into a given animatable data type.
|
|
8
|
-
If the type is not animatable, nil will be returned.
|
|
9
|
-
]]
|
|
10
|
-
|
|
11
|
-
local Package = script.Parent.Parent
|
|
12
|
-
local Types = require(Package.Types)
|
|
13
|
-
local Oklab = require(Package.Colour.Oklab)
|
|
14
|
-
|
|
15
|
-
local function packType(
|
|
16
|
-
numbers: {number},
|
|
17
|
-
typeString: string
|
|
18
|
-
): Types.Animatable?
|
|
19
|
-
if typeString == "number" then
|
|
20
|
-
return numbers[1]
|
|
21
|
-
|
|
22
|
-
elseif typeString == "CFrame" then
|
|
23
|
-
return
|
|
24
|
-
CFrame.new(numbers[1], numbers[2], numbers[3]) *
|
|
25
|
-
CFrame.fromAxisAngle(
|
|
26
|
-
Vector3.new(numbers[4], numbers[5], numbers[6]).Unit,
|
|
27
|
-
numbers[7]
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
elseif typeString == "Color3" then
|
|
31
|
-
return Oklab.toSRGB(
|
|
32
|
-
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
33
|
-
false
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
elseif typeString == "ColorSequenceKeypoint" then
|
|
37
|
-
return ColorSequenceKeypoint.new(
|
|
38
|
-
numbers[4],
|
|
39
|
-
Oklab.toSRGB(
|
|
40
|
-
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
41
|
-
false
|
|
42
|
-
)
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
elseif typeString == "DateTime" then
|
|
46
|
-
return DateTime.fromUnixTimestampMillis(numbers[1])
|
|
47
|
-
|
|
48
|
-
elseif typeString == "NumberRange" then
|
|
49
|
-
return NumberRange.new(numbers[1], numbers[2])
|
|
50
|
-
|
|
51
|
-
elseif typeString == "NumberSequenceKeypoint" then
|
|
52
|
-
return NumberSequenceKeypoint.new(numbers[2], numbers[1], numbers[3])
|
|
53
|
-
|
|
54
|
-
elseif typeString == "PhysicalProperties" then
|
|
55
|
-
return PhysicalProperties.new(numbers[1], numbers[2], numbers[3], numbers[4], numbers[5])
|
|
56
|
-
|
|
57
|
-
elseif typeString == "Ray" then
|
|
58
|
-
return Ray.new(
|
|
59
|
-
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
60
|
-
Vector3.new(numbers[4], numbers[5], numbers[6])
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
elseif typeString == "Rect" then
|
|
64
|
-
return Rect.new(numbers[1], numbers[2], numbers[3], numbers[4])
|
|
65
|
-
|
|
66
|
-
elseif typeString == "Region3" then
|
|
67
|
-
-- FUTURE: support rotated Region3s if/when they become constructable
|
|
68
|
-
local position = Vector3.new(numbers[1], numbers[2], numbers[3])
|
|
69
|
-
local halfSize = Vector3.new(numbers[4] / 2, numbers[5] / 2, numbers[6] / 2)
|
|
70
|
-
return Region3.new(position - halfSize, position + halfSize)
|
|
71
|
-
|
|
72
|
-
elseif typeString == "Region3int16" then
|
|
73
|
-
return Region3int16.new(
|
|
74
|
-
Vector3int16.new(numbers[1], numbers[2], numbers[3]),
|
|
75
|
-
Vector3int16.new(numbers[4], numbers[5], numbers[6])
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
elseif typeString == "UDim" then
|
|
79
|
-
return UDim.new(numbers[1], numbers[2])
|
|
80
|
-
|
|
81
|
-
elseif typeString == "UDim2" then
|
|
82
|
-
return UDim2.new(numbers[1], numbers[2], numbers[3], numbers[4])
|
|
83
|
-
|
|
84
|
-
elseif typeString == "Vector2" then
|
|
85
|
-
return Vector2.new(numbers[1], numbers[2])
|
|
86
|
-
|
|
87
|
-
elseif typeString == "Vector2int16" then
|
|
88
|
-
return Vector2int16.new(numbers[1], numbers[2])
|
|
89
|
-
|
|
90
|
-
elseif typeString == "Vector3" then
|
|
91
|
-
return Vector3.new(numbers[1], numbers[2], numbers[3])
|
|
92
|
-
|
|
93
|
-
elseif typeString == "Vector3int16" then
|
|
94
|
-
return Vector3int16.new(numbers[1], numbers[2], numbers[3])
|
|
95
|
-
else
|
|
96
|
-
return nil
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
1
|
+
--!strict
|
|
2
|
+
--!nolint LocalUnused
|
|
3
|
+
--!nolint LocalShadow
|
|
4
|
+
local task = nil -- Disable usage of Roblox's task scheduler
|
|
5
|
+
|
|
6
|
+
--[[
|
|
7
|
+
Packs an array of numbers into a given animatable data type.
|
|
8
|
+
If the type is not animatable, nil will be returned.
|
|
9
|
+
]]
|
|
10
|
+
|
|
11
|
+
local Package = script.Parent.Parent
|
|
12
|
+
local Types = require(Package.Types)
|
|
13
|
+
local Oklab = require(Package.Colour.Oklab)
|
|
14
|
+
|
|
15
|
+
local function packType(
|
|
16
|
+
numbers: {number},
|
|
17
|
+
typeString: string
|
|
18
|
+
): Types.Animatable?
|
|
19
|
+
if typeString == "number" then
|
|
20
|
+
return numbers[1]
|
|
21
|
+
|
|
22
|
+
elseif typeString == "CFrame" then
|
|
23
|
+
return
|
|
24
|
+
CFrame.new(numbers[1], numbers[2], numbers[3]) *
|
|
25
|
+
CFrame.fromAxisAngle(
|
|
26
|
+
Vector3.new(numbers[4], numbers[5], numbers[6]).Unit,
|
|
27
|
+
numbers[7]
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
elseif typeString == "Color3" then
|
|
31
|
+
return Oklab.toSRGB(
|
|
32
|
+
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
33
|
+
false
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
elseif typeString == "ColorSequenceKeypoint" then
|
|
37
|
+
return ColorSequenceKeypoint.new(
|
|
38
|
+
numbers[4],
|
|
39
|
+
Oklab.toSRGB(
|
|
40
|
+
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
41
|
+
false
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
elseif typeString == "DateTime" then
|
|
46
|
+
return DateTime.fromUnixTimestampMillis(numbers[1])
|
|
47
|
+
|
|
48
|
+
elseif typeString == "NumberRange" then
|
|
49
|
+
return NumberRange.new(numbers[1], numbers[2])
|
|
50
|
+
|
|
51
|
+
elseif typeString == "NumberSequenceKeypoint" then
|
|
52
|
+
return NumberSequenceKeypoint.new(numbers[2], numbers[1], numbers[3])
|
|
53
|
+
|
|
54
|
+
elseif typeString == "PhysicalProperties" then
|
|
55
|
+
return PhysicalProperties.new(numbers[1], numbers[2], numbers[3], numbers[4], numbers[5])
|
|
56
|
+
|
|
57
|
+
elseif typeString == "Ray" then
|
|
58
|
+
return Ray.new(
|
|
59
|
+
Vector3.new(numbers[1], numbers[2], numbers[3]),
|
|
60
|
+
Vector3.new(numbers[4], numbers[5], numbers[6])
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
elseif typeString == "Rect" then
|
|
64
|
+
return Rect.new(numbers[1], numbers[2], numbers[3], numbers[4])
|
|
65
|
+
|
|
66
|
+
elseif typeString == "Region3" then
|
|
67
|
+
-- FUTURE: support rotated Region3s if/when they become constructable
|
|
68
|
+
local position = Vector3.new(numbers[1], numbers[2], numbers[3])
|
|
69
|
+
local halfSize = Vector3.new(numbers[4] / 2, numbers[5] / 2, numbers[6] / 2)
|
|
70
|
+
return Region3.new(position - halfSize, position + halfSize)
|
|
71
|
+
|
|
72
|
+
elseif typeString == "Region3int16" then
|
|
73
|
+
return Region3int16.new(
|
|
74
|
+
Vector3int16.new(numbers[1], numbers[2], numbers[3]),
|
|
75
|
+
Vector3int16.new(numbers[4], numbers[5], numbers[6])
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
elseif typeString == "UDim" then
|
|
79
|
+
return UDim.new(numbers[1], numbers[2])
|
|
80
|
+
|
|
81
|
+
elseif typeString == "UDim2" then
|
|
82
|
+
return UDim2.new(numbers[1], numbers[2], numbers[3], numbers[4])
|
|
83
|
+
|
|
84
|
+
elseif typeString == "Vector2" then
|
|
85
|
+
return Vector2.new(numbers[1], numbers[2])
|
|
86
|
+
|
|
87
|
+
elseif typeString == "Vector2int16" then
|
|
88
|
+
return Vector2int16.new(numbers[1], numbers[2])
|
|
89
|
+
|
|
90
|
+
elseif typeString == "Vector3" then
|
|
91
|
+
return Vector3.new(numbers[1], numbers[2], numbers[3])
|
|
92
|
+
|
|
93
|
+
elseif typeString == "Vector3int16" then
|
|
94
|
+
return Vector3int16.new(numbers[1], numbers[2], numbers[3])
|
|
95
|
+
else
|
|
96
|
+
return nil
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
100
|
return packType
|