roblox-opencode 1.0.0 → 1.0.1
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 +863 -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 +1519 -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,267 +1,267 @@
|
|
|
1
|
-
local RunService = game:GetService("RunService")
|
|
2
|
-
local ServerScriptService = game:GetService("ServerScriptService")
|
|
3
|
-
|
|
4
|
-
local Test = require(ServerScriptService.TestRunner.Test)
|
|
5
|
-
|
|
6
|
-
local function AwaitStop(shake): number
|
|
7
|
-
local start = os.clock()
|
|
8
|
-
shake:Update()
|
|
9
|
-
while shake:IsShaking() do
|
|
10
|
-
task.wait()
|
|
11
|
-
shake:Update()
|
|
12
|
-
end
|
|
13
|
-
return os.clock() - start
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
return function(ctx: Test.TestContext)
|
|
17
|
-
local Shake = require(script.Parent)
|
|
18
|
-
|
|
19
|
-
ctx:Describe("Construct", function()
|
|
20
|
-
ctx:Test("should construct a new shake instance", function()
|
|
21
|
-
ctx:Expect(function()
|
|
22
|
-
local _shake = Shake.new()
|
|
23
|
-
end)
|
|
24
|
-
:Not()
|
|
25
|
-
:ToThrow()
|
|
26
|
-
end)
|
|
27
|
-
end)
|
|
28
|
-
|
|
29
|
-
ctx:Describe("Static Functions", function()
|
|
30
|
-
ctx:Test("should get next render name", function()
|
|
31
|
-
local r1 = Shake.NextRenderName()
|
|
32
|
-
local r2 = Shake.NextRenderName()
|
|
33
|
-
local r3 = Shake.NextRenderName()
|
|
34
|
-
ctx:Expect(r1):ToBeA("string")
|
|
35
|
-
ctx:Expect(r2):ToBeA("string")
|
|
36
|
-
ctx:Expect(r3):ToBeA("string")
|
|
37
|
-
ctx:Expect(r1):Not():ToBe(r2)
|
|
38
|
-
ctx:Expect(r2):Not():ToBe(r3)
|
|
39
|
-
ctx:Expect(r3):Not():ToBe(r1)
|
|
40
|
-
end)
|
|
41
|
-
|
|
42
|
-
ctx:Test("should perform inverse square", function()
|
|
43
|
-
local vector = Vector3.new(10, 10, 10)
|
|
44
|
-
local distance = 10
|
|
45
|
-
local expectedIntensity = 1 / (distance * distance)
|
|
46
|
-
local expectedVector = vector * expectedIntensity
|
|
47
|
-
local vectorInverseSq = Shake.InverseSquare(vector, distance)
|
|
48
|
-
ctx:Expect(typeof(vectorInverseSq)):ToBe("Vector3")
|
|
49
|
-
ctx:Expect(vectorInverseSq):ToBe(expectedVector)
|
|
50
|
-
end)
|
|
51
|
-
end)
|
|
52
|
-
|
|
53
|
-
ctx:Describe("Cloning", function()
|
|
54
|
-
ctx:Test("should clone a shake instance", function()
|
|
55
|
-
local shake1 = Shake.new()
|
|
56
|
-
shake1.Amplitude = 5
|
|
57
|
-
shake1.Frequency = 2
|
|
58
|
-
shake1.FadeInTime = 3
|
|
59
|
-
shake1.FadeOutTime = 4
|
|
60
|
-
shake1.SustainTime = 6
|
|
61
|
-
shake1.Sustain = true
|
|
62
|
-
shake1.PositionInfluence = Vector3.new(1, 2, 3)
|
|
63
|
-
shake1.RotationInfluence = Vector3.new(3, 2, 1)
|
|
64
|
-
shake1.TimeFunction = function()
|
|
65
|
-
return os.clock()
|
|
66
|
-
end
|
|
67
|
-
local shake2 = shake1:Clone()
|
|
68
|
-
ctx:Expect(shake2):ToBeA("table")
|
|
69
|
-
ctx:Expect(getmetatable(shake2)):ToBe(getmetatable(shake1))
|
|
70
|
-
ctx:Expect(shake2):Not():ToBe(shake1)
|
|
71
|
-
local clonedFields = {
|
|
72
|
-
"Amplitude",
|
|
73
|
-
"Frequency",
|
|
74
|
-
"FadeInTime",
|
|
75
|
-
"FadeOutTime",
|
|
76
|
-
"SustainTime",
|
|
77
|
-
"Sustain",
|
|
78
|
-
"PositionInfluence",
|
|
79
|
-
"RotationInfluence",
|
|
80
|
-
}
|
|
81
|
-
for _, field in clonedFields do
|
|
82
|
-
ctx:Expect(shake1[field]):ToBe(shake2[field])
|
|
83
|
-
end
|
|
84
|
-
ctx:Expect(shake1.TimeFunction == shake2.TimeFunction):ToBe(true)
|
|
85
|
-
end)
|
|
86
|
-
|
|
87
|
-
ctx:Test("should clone a shake instance but ignore running state", function()
|
|
88
|
-
local shake1 = Shake.new()
|
|
89
|
-
shake1:Start()
|
|
90
|
-
local shake2 = shake1:Clone()
|
|
91
|
-
ctx:Expect(shake1:IsShaking()):ToBe(true)
|
|
92
|
-
ctx:Expect(shake2:IsShaking()):ToBe(false)
|
|
93
|
-
end)
|
|
94
|
-
end)
|
|
95
|
-
|
|
96
|
-
ctx:Describe("Shaking", function()
|
|
97
|
-
ctx:Test("should start", function()
|
|
98
|
-
local shake = Shake.new()
|
|
99
|
-
ctx:Expect(shake:IsShaking()):ToBe(false)
|
|
100
|
-
shake:Start()
|
|
101
|
-
ctx:Expect(shake:IsShaking()):ToBe(true)
|
|
102
|
-
end)
|
|
103
|
-
|
|
104
|
-
ctx:Test("should stop", function()
|
|
105
|
-
local shake = Shake.new()
|
|
106
|
-
shake:Start()
|
|
107
|
-
ctx:Expect(shake:IsShaking()):ToBe(true)
|
|
108
|
-
shake:Stop()
|
|
109
|
-
ctx:Expect(shake:IsShaking()):ToBe(false)
|
|
110
|
-
end)
|
|
111
|
-
|
|
112
|
-
ctx:Test("should shake for nearly no time", function()
|
|
113
|
-
local shake = Shake.new()
|
|
114
|
-
shake.FadeInTime = 0
|
|
115
|
-
shake.FadeOutTime = 0
|
|
116
|
-
shake.SustainTime = 0
|
|
117
|
-
shake:Start()
|
|
118
|
-
local duration = AwaitStop(shake)
|
|
119
|
-
ctx:Expect(duration):ToBeNear(0, 0.05)
|
|
120
|
-
end)
|
|
121
|
-
|
|
122
|
-
ctx:Test("should shake for fade in time", function()
|
|
123
|
-
local shake = Shake.new()
|
|
124
|
-
shake.FadeInTime = 0.1
|
|
125
|
-
shake.FadeOutTime = 0
|
|
126
|
-
shake.SustainTime = 0
|
|
127
|
-
shake:Start()
|
|
128
|
-
local duration = AwaitStop(shake)
|
|
129
|
-
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
130
|
-
end)
|
|
131
|
-
|
|
132
|
-
ctx:Test("should shake for fade out time", function()
|
|
133
|
-
local shake = Shake.new()
|
|
134
|
-
shake.FadeInTime = 0
|
|
135
|
-
shake.FadeOutTime = 0.1
|
|
136
|
-
shake.SustainTime = 0
|
|
137
|
-
shake:Start()
|
|
138
|
-
local duration = AwaitStop(shake)
|
|
139
|
-
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
140
|
-
end)
|
|
141
|
-
|
|
142
|
-
ctx:Test("should shake for sustain time", function()
|
|
143
|
-
local shake = Shake.new()
|
|
144
|
-
shake.FadeInTime = 0
|
|
145
|
-
shake.FadeOutTime = 0
|
|
146
|
-
shake.SustainTime = 0.1
|
|
147
|
-
shake:Start()
|
|
148
|
-
local duration = AwaitStop(shake)
|
|
149
|
-
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
150
|
-
end)
|
|
151
|
-
|
|
152
|
-
ctx:Test("should shake for fade in and sustain time", function()
|
|
153
|
-
local shake = Shake.new()
|
|
154
|
-
shake.FadeInTime = 0.1
|
|
155
|
-
shake.FadeOutTime = 0
|
|
156
|
-
shake.SustainTime = 0.1
|
|
157
|
-
shake:Start()
|
|
158
|
-
local duration = AwaitStop(shake)
|
|
159
|
-
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
160
|
-
end)
|
|
161
|
-
|
|
162
|
-
ctx:Test("should shake for fade out and sustain time", function()
|
|
163
|
-
local shake = Shake.new()
|
|
164
|
-
shake.FadeInTime = 0
|
|
165
|
-
shake.FadeOutTime = 0.1
|
|
166
|
-
shake.SustainTime = 0.1
|
|
167
|
-
shake:Start()
|
|
168
|
-
local duration = AwaitStop(shake)
|
|
169
|
-
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
170
|
-
end)
|
|
171
|
-
|
|
172
|
-
ctx:Test("should shake for fade in and fade out time", function()
|
|
173
|
-
local shake = Shake.new()
|
|
174
|
-
shake.FadeInTime = 0.1
|
|
175
|
-
shake.FadeOutTime = 0.1
|
|
176
|
-
shake.SustainTime = 0
|
|
177
|
-
shake:Start()
|
|
178
|
-
local duration = AwaitStop(shake)
|
|
179
|
-
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
180
|
-
end)
|
|
181
|
-
|
|
182
|
-
ctx:Test("should shake for fading and sustain time", function()
|
|
183
|
-
local shake = Shake.new()
|
|
184
|
-
shake.FadeInTime = 0.1
|
|
185
|
-
shake.FadeOutTime = 0.1
|
|
186
|
-
shake.SustainTime = 0.1
|
|
187
|
-
shake:Start()
|
|
188
|
-
local duration = AwaitStop(shake)
|
|
189
|
-
ctx:Expect(duration):ToBeNear(0.3, 0.05)
|
|
190
|
-
end)
|
|
191
|
-
|
|
192
|
-
ctx:Test("should shake indefinitely", function()
|
|
193
|
-
local shake = Shake.new()
|
|
194
|
-
shake.FadeInTime = 0
|
|
195
|
-
shake.FadeOutTime = 0
|
|
196
|
-
shake.SustainTime = 0
|
|
197
|
-
shake.Sustain = true
|
|
198
|
-
shake:Start()
|
|
199
|
-
local shakeTime = 0.1
|
|
200
|
-
task.delay(shakeTime, function()
|
|
201
|
-
shake:StopSustain()
|
|
202
|
-
end)
|
|
203
|
-
local duration = AwaitStop(shake)
|
|
204
|
-
ctx:Expect(duration):ToBeNear(shakeTime, 0.05)
|
|
205
|
-
end)
|
|
206
|
-
|
|
207
|
-
ctx:Test("should shake indefinitely and fade out", function()
|
|
208
|
-
local shake = Shake.new()
|
|
209
|
-
shake.FadeInTime = 0
|
|
210
|
-
shake.FadeOutTime = 0.1
|
|
211
|
-
shake.SustainTime = 0
|
|
212
|
-
shake.Sustain = true
|
|
213
|
-
shake:Start()
|
|
214
|
-
local shakeTime = 0.1
|
|
215
|
-
task.delay(shakeTime, function()
|
|
216
|
-
shake:StopSustain()
|
|
217
|
-
end)
|
|
218
|
-
local duration = AwaitStop(shake)
|
|
219
|
-
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
220
|
-
end)
|
|
221
|
-
|
|
222
|
-
ctx:Test("should shake indefinitely and fade out with fade in time", function()
|
|
223
|
-
local shake = Shake.new()
|
|
224
|
-
shake.FadeInTime = 0.1
|
|
225
|
-
shake.FadeOutTime = 0.1
|
|
226
|
-
shake.SustainTime = 0
|
|
227
|
-
shake.Sustain = true
|
|
228
|
-
shake:Start()
|
|
229
|
-
local shakeTime = 0.3
|
|
230
|
-
task.delay(shakeTime, function()
|
|
231
|
-
shake:StopSustain()
|
|
232
|
-
end)
|
|
233
|
-
local duration = AwaitStop(shake)
|
|
234
|
-
ctx:Expect(duration):ToBeNear(0.4, 0.05)
|
|
235
|
-
end)
|
|
236
|
-
|
|
237
|
-
ctx:Test("should connect to signal", function()
|
|
238
|
-
local shake = Shake.new()
|
|
239
|
-
shake.SustainTime = 0.1
|
|
240
|
-
shake:Start()
|
|
241
|
-
local signaled = false
|
|
242
|
-
local connection = shake:OnSignal(RunService.Heartbeat, function()
|
|
243
|
-
signaled = true
|
|
244
|
-
end)
|
|
245
|
-
ctx:Expect(typeof(connection)):ToBe("RBXScriptConnection")
|
|
246
|
-
ctx:Expect(connection.Connected):ToBe(true)
|
|
247
|
-
AwaitStop(shake)
|
|
248
|
-
ctx:Expect(signaled):ToBe(true)
|
|
249
|
-
ctx:Expect(connection.Connected):ToBe(false)
|
|
250
|
-
end)
|
|
251
|
-
|
|
252
|
-
-- RenderStepped only works on the client:
|
|
253
|
-
if RunService:IsClient() and RunService:IsRunning() then
|
|
254
|
-
ctx:Test("should bind to render step", function()
|
|
255
|
-
local shake = Shake.new()
|
|
256
|
-
shake.SustainTime = 0.1
|
|
257
|
-
shake:Start()
|
|
258
|
-
local bound = false
|
|
259
|
-
shake:BindToRenderStep("ShakeTest", Enum.RenderPriority.Last.Value, function()
|
|
260
|
-
bound = true
|
|
261
|
-
end)
|
|
262
|
-
AwaitStop(shake)
|
|
263
|
-
ctx:Expect(bound):ToBe(true)
|
|
264
|
-
end)
|
|
265
|
-
end
|
|
266
|
-
end)
|
|
267
|
-
end
|
|
1
|
+
local RunService = game:GetService("RunService")
|
|
2
|
+
local ServerScriptService = game:GetService("ServerScriptService")
|
|
3
|
+
|
|
4
|
+
local Test = require(ServerScriptService.TestRunner.Test)
|
|
5
|
+
|
|
6
|
+
local function AwaitStop(shake): number
|
|
7
|
+
local start = os.clock()
|
|
8
|
+
shake:Update()
|
|
9
|
+
while shake:IsShaking() do
|
|
10
|
+
task.wait()
|
|
11
|
+
shake:Update()
|
|
12
|
+
end
|
|
13
|
+
return os.clock() - start
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
return function(ctx: Test.TestContext)
|
|
17
|
+
local Shake = require(script.Parent)
|
|
18
|
+
|
|
19
|
+
ctx:Describe("Construct", function()
|
|
20
|
+
ctx:Test("should construct a new shake instance", function()
|
|
21
|
+
ctx:Expect(function()
|
|
22
|
+
local _shake = Shake.new()
|
|
23
|
+
end)
|
|
24
|
+
:Not()
|
|
25
|
+
:ToThrow()
|
|
26
|
+
end)
|
|
27
|
+
end)
|
|
28
|
+
|
|
29
|
+
ctx:Describe("Static Functions", function()
|
|
30
|
+
ctx:Test("should get next render name", function()
|
|
31
|
+
local r1 = Shake.NextRenderName()
|
|
32
|
+
local r2 = Shake.NextRenderName()
|
|
33
|
+
local r3 = Shake.NextRenderName()
|
|
34
|
+
ctx:Expect(r1):ToBeA("string")
|
|
35
|
+
ctx:Expect(r2):ToBeA("string")
|
|
36
|
+
ctx:Expect(r3):ToBeA("string")
|
|
37
|
+
ctx:Expect(r1):Not():ToBe(r2)
|
|
38
|
+
ctx:Expect(r2):Not():ToBe(r3)
|
|
39
|
+
ctx:Expect(r3):Not():ToBe(r1)
|
|
40
|
+
end)
|
|
41
|
+
|
|
42
|
+
ctx:Test("should perform inverse square", function()
|
|
43
|
+
local vector = Vector3.new(10, 10, 10)
|
|
44
|
+
local distance = 10
|
|
45
|
+
local expectedIntensity = 1 / (distance * distance)
|
|
46
|
+
local expectedVector = vector * expectedIntensity
|
|
47
|
+
local vectorInverseSq = Shake.InverseSquare(vector, distance)
|
|
48
|
+
ctx:Expect(typeof(vectorInverseSq)):ToBe("Vector3")
|
|
49
|
+
ctx:Expect(vectorInverseSq):ToBe(expectedVector)
|
|
50
|
+
end)
|
|
51
|
+
end)
|
|
52
|
+
|
|
53
|
+
ctx:Describe("Cloning", function()
|
|
54
|
+
ctx:Test("should clone a shake instance", function()
|
|
55
|
+
local shake1 = Shake.new()
|
|
56
|
+
shake1.Amplitude = 5
|
|
57
|
+
shake1.Frequency = 2
|
|
58
|
+
shake1.FadeInTime = 3
|
|
59
|
+
shake1.FadeOutTime = 4
|
|
60
|
+
shake1.SustainTime = 6
|
|
61
|
+
shake1.Sustain = true
|
|
62
|
+
shake1.PositionInfluence = Vector3.new(1, 2, 3)
|
|
63
|
+
shake1.RotationInfluence = Vector3.new(3, 2, 1)
|
|
64
|
+
shake1.TimeFunction = function()
|
|
65
|
+
return os.clock()
|
|
66
|
+
end
|
|
67
|
+
local shake2 = shake1:Clone()
|
|
68
|
+
ctx:Expect(shake2):ToBeA("table")
|
|
69
|
+
ctx:Expect(getmetatable(shake2)):ToBe(getmetatable(shake1))
|
|
70
|
+
ctx:Expect(shake2):Not():ToBe(shake1)
|
|
71
|
+
local clonedFields = {
|
|
72
|
+
"Amplitude",
|
|
73
|
+
"Frequency",
|
|
74
|
+
"FadeInTime",
|
|
75
|
+
"FadeOutTime",
|
|
76
|
+
"SustainTime",
|
|
77
|
+
"Sustain",
|
|
78
|
+
"PositionInfluence",
|
|
79
|
+
"RotationInfluence",
|
|
80
|
+
}
|
|
81
|
+
for _, field in clonedFields do
|
|
82
|
+
ctx:Expect(shake1[field]):ToBe(shake2[field])
|
|
83
|
+
end
|
|
84
|
+
ctx:Expect(shake1.TimeFunction == shake2.TimeFunction):ToBe(true)
|
|
85
|
+
end)
|
|
86
|
+
|
|
87
|
+
ctx:Test("should clone a shake instance but ignore running state", function()
|
|
88
|
+
local shake1 = Shake.new()
|
|
89
|
+
shake1:Start()
|
|
90
|
+
local shake2 = shake1:Clone()
|
|
91
|
+
ctx:Expect(shake1:IsShaking()):ToBe(true)
|
|
92
|
+
ctx:Expect(shake2:IsShaking()):ToBe(false)
|
|
93
|
+
end)
|
|
94
|
+
end)
|
|
95
|
+
|
|
96
|
+
ctx:Describe("Shaking", function()
|
|
97
|
+
ctx:Test("should start", function()
|
|
98
|
+
local shake = Shake.new()
|
|
99
|
+
ctx:Expect(shake:IsShaking()):ToBe(false)
|
|
100
|
+
shake:Start()
|
|
101
|
+
ctx:Expect(shake:IsShaking()):ToBe(true)
|
|
102
|
+
end)
|
|
103
|
+
|
|
104
|
+
ctx:Test("should stop", function()
|
|
105
|
+
local shake = Shake.new()
|
|
106
|
+
shake:Start()
|
|
107
|
+
ctx:Expect(shake:IsShaking()):ToBe(true)
|
|
108
|
+
shake:Stop()
|
|
109
|
+
ctx:Expect(shake:IsShaking()):ToBe(false)
|
|
110
|
+
end)
|
|
111
|
+
|
|
112
|
+
ctx:Test("should shake for nearly no time", function()
|
|
113
|
+
local shake = Shake.new()
|
|
114
|
+
shake.FadeInTime = 0
|
|
115
|
+
shake.FadeOutTime = 0
|
|
116
|
+
shake.SustainTime = 0
|
|
117
|
+
shake:Start()
|
|
118
|
+
local duration = AwaitStop(shake)
|
|
119
|
+
ctx:Expect(duration):ToBeNear(0, 0.05)
|
|
120
|
+
end)
|
|
121
|
+
|
|
122
|
+
ctx:Test("should shake for fade in time", function()
|
|
123
|
+
local shake = Shake.new()
|
|
124
|
+
shake.FadeInTime = 0.1
|
|
125
|
+
shake.FadeOutTime = 0
|
|
126
|
+
shake.SustainTime = 0
|
|
127
|
+
shake:Start()
|
|
128
|
+
local duration = AwaitStop(shake)
|
|
129
|
+
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
130
|
+
end)
|
|
131
|
+
|
|
132
|
+
ctx:Test("should shake for fade out time", function()
|
|
133
|
+
local shake = Shake.new()
|
|
134
|
+
shake.FadeInTime = 0
|
|
135
|
+
shake.FadeOutTime = 0.1
|
|
136
|
+
shake.SustainTime = 0
|
|
137
|
+
shake:Start()
|
|
138
|
+
local duration = AwaitStop(shake)
|
|
139
|
+
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
140
|
+
end)
|
|
141
|
+
|
|
142
|
+
ctx:Test("should shake for sustain time", function()
|
|
143
|
+
local shake = Shake.new()
|
|
144
|
+
shake.FadeInTime = 0
|
|
145
|
+
shake.FadeOutTime = 0
|
|
146
|
+
shake.SustainTime = 0.1
|
|
147
|
+
shake:Start()
|
|
148
|
+
local duration = AwaitStop(shake)
|
|
149
|
+
ctx:Expect(duration):ToBeNear(0.1, 0.05)
|
|
150
|
+
end)
|
|
151
|
+
|
|
152
|
+
ctx:Test("should shake for fade in and sustain time", function()
|
|
153
|
+
local shake = Shake.new()
|
|
154
|
+
shake.FadeInTime = 0.1
|
|
155
|
+
shake.FadeOutTime = 0
|
|
156
|
+
shake.SustainTime = 0.1
|
|
157
|
+
shake:Start()
|
|
158
|
+
local duration = AwaitStop(shake)
|
|
159
|
+
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
160
|
+
end)
|
|
161
|
+
|
|
162
|
+
ctx:Test("should shake for fade out and sustain time", function()
|
|
163
|
+
local shake = Shake.new()
|
|
164
|
+
shake.FadeInTime = 0
|
|
165
|
+
shake.FadeOutTime = 0.1
|
|
166
|
+
shake.SustainTime = 0.1
|
|
167
|
+
shake:Start()
|
|
168
|
+
local duration = AwaitStop(shake)
|
|
169
|
+
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
170
|
+
end)
|
|
171
|
+
|
|
172
|
+
ctx:Test("should shake for fade in and fade out time", function()
|
|
173
|
+
local shake = Shake.new()
|
|
174
|
+
shake.FadeInTime = 0.1
|
|
175
|
+
shake.FadeOutTime = 0.1
|
|
176
|
+
shake.SustainTime = 0
|
|
177
|
+
shake:Start()
|
|
178
|
+
local duration = AwaitStop(shake)
|
|
179
|
+
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
180
|
+
end)
|
|
181
|
+
|
|
182
|
+
ctx:Test("should shake for fading and sustain time", function()
|
|
183
|
+
local shake = Shake.new()
|
|
184
|
+
shake.FadeInTime = 0.1
|
|
185
|
+
shake.FadeOutTime = 0.1
|
|
186
|
+
shake.SustainTime = 0.1
|
|
187
|
+
shake:Start()
|
|
188
|
+
local duration = AwaitStop(shake)
|
|
189
|
+
ctx:Expect(duration):ToBeNear(0.3, 0.05)
|
|
190
|
+
end)
|
|
191
|
+
|
|
192
|
+
ctx:Test("should shake indefinitely", function()
|
|
193
|
+
local shake = Shake.new()
|
|
194
|
+
shake.FadeInTime = 0
|
|
195
|
+
shake.FadeOutTime = 0
|
|
196
|
+
shake.SustainTime = 0
|
|
197
|
+
shake.Sustain = true
|
|
198
|
+
shake:Start()
|
|
199
|
+
local shakeTime = 0.1
|
|
200
|
+
task.delay(shakeTime, function()
|
|
201
|
+
shake:StopSustain()
|
|
202
|
+
end)
|
|
203
|
+
local duration = AwaitStop(shake)
|
|
204
|
+
ctx:Expect(duration):ToBeNear(shakeTime, 0.05)
|
|
205
|
+
end)
|
|
206
|
+
|
|
207
|
+
ctx:Test("should shake indefinitely and fade out", function()
|
|
208
|
+
local shake = Shake.new()
|
|
209
|
+
shake.FadeInTime = 0
|
|
210
|
+
shake.FadeOutTime = 0.1
|
|
211
|
+
shake.SustainTime = 0
|
|
212
|
+
shake.Sustain = true
|
|
213
|
+
shake:Start()
|
|
214
|
+
local shakeTime = 0.1
|
|
215
|
+
task.delay(shakeTime, function()
|
|
216
|
+
shake:StopSustain()
|
|
217
|
+
end)
|
|
218
|
+
local duration = AwaitStop(shake)
|
|
219
|
+
ctx:Expect(duration):ToBeNear(0.2, 0.05)
|
|
220
|
+
end)
|
|
221
|
+
|
|
222
|
+
ctx:Test("should shake indefinitely and fade out with fade in time", function()
|
|
223
|
+
local shake = Shake.new()
|
|
224
|
+
shake.FadeInTime = 0.1
|
|
225
|
+
shake.FadeOutTime = 0.1
|
|
226
|
+
shake.SustainTime = 0
|
|
227
|
+
shake.Sustain = true
|
|
228
|
+
shake:Start()
|
|
229
|
+
local shakeTime = 0.3
|
|
230
|
+
task.delay(shakeTime, function()
|
|
231
|
+
shake:StopSustain()
|
|
232
|
+
end)
|
|
233
|
+
local duration = AwaitStop(shake)
|
|
234
|
+
ctx:Expect(duration):ToBeNear(0.4, 0.05)
|
|
235
|
+
end)
|
|
236
|
+
|
|
237
|
+
ctx:Test("should connect to signal", function()
|
|
238
|
+
local shake = Shake.new()
|
|
239
|
+
shake.SustainTime = 0.1
|
|
240
|
+
shake:Start()
|
|
241
|
+
local signaled = false
|
|
242
|
+
local connection = shake:OnSignal(RunService.Heartbeat, function()
|
|
243
|
+
signaled = true
|
|
244
|
+
end)
|
|
245
|
+
ctx:Expect(typeof(connection)):ToBe("RBXScriptConnection")
|
|
246
|
+
ctx:Expect(connection.Connected):ToBe(true)
|
|
247
|
+
AwaitStop(shake)
|
|
248
|
+
ctx:Expect(signaled):ToBe(true)
|
|
249
|
+
ctx:Expect(connection.Connected):ToBe(false)
|
|
250
|
+
end)
|
|
251
|
+
|
|
252
|
+
-- RenderStepped only works on the client:
|
|
253
|
+
if RunService:IsClient() and RunService:IsRunning() then
|
|
254
|
+
ctx:Test("should bind to render step", function()
|
|
255
|
+
local shake = Shake.new()
|
|
256
|
+
shake.SustainTime = 0.1
|
|
257
|
+
shake:Start()
|
|
258
|
+
local bound = false
|
|
259
|
+
shake:BindToRenderStep("ShakeTest", Enum.RenderPriority.Last.Value, function()
|
|
260
|
+
bound = true
|
|
261
|
+
end)
|
|
262
|
+
AwaitStop(shake)
|
|
263
|
+
ctx:Expect(bound):ToBe(true)
|
|
264
|
+
end)
|
|
265
|
+
end
|
|
266
|
+
end)
|
|
267
|
+
end
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@rbxutil/shake",
|
|
3
|
-
"version": "1.1.0",
|
|
4
|
-
"main": "init.luau",
|
|
5
|
-
"repository": "github:Sleitnick/RbxUtil",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"types": "index.d.ts",
|
|
8
|
-
"files": [
|
|
9
|
-
"./",
|
|
10
|
-
"!*.toml",
|
|
11
|
-
"!*.json"
|
|
12
|
-
],
|
|
13
|
-
"publishConfig": {
|
|
14
|
-
"access": "public"
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@rbxutil/shake",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"main": "init.luau",
|
|
5
|
+
"repository": "github:Sleitnick/RbxUtil",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"types": "index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"./",
|
|
10
|
+
"!*.toml",
|
|
11
|
+
"!*.json"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "sleitnick/shake"
|
|
3
|
-
description = "Shake class for making things shake"
|
|
4
|
-
version = "1.1.0"
|
|
5
|
-
license = "MIT"
|
|
6
|
-
authors = ["Stephen Leitnick"]
|
|
7
|
-
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
-
realm = "shared"
|
|
9
|
-
exclude = ["node_modules", "package.json", "**/*.ts"]
|
|
1
|
+
[package]
|
|
2
|
+
name = "sleitnick/shake"
|
|
3
|
+
description = "Shake class for making things shake"
|
|
4
|
+
version = "1.1.0"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = ["Stephen Leitnick"]
|
|
7
|
+
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
+
realm = "shared"
|
|
9
|
+
exclude = ["node_modules", "package.json", "**/*.ts"]
|