Skip to content

Commit

Permalink
Shake v1
Browse files Browse the repository at this point in the history
  • Loading branch information
Sleitnick committed Apr 16, 2024
1 parent 925eba3 commit e147fe4
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 17 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
| [Quaternion](https://sleitnick.github.io/RbxUtil/api/Quaternion) | `Quaternion = "sleitnick/quaternion@0.2.3"` | Quaternion class |
| [Sequent](https://sleitnick.github.io/RbxUtil/api/Sequent) | `Sequent = "sleitnick/sequent@0.1.0"` | Sequent class |
| [Ser](https://sleitnick.github.io/RbxUtil/api/Ser) | `Ser = "sleitnick/ser@1.0.5"` | Ser class for serialization and deserialization |
| [Shake](https://sleitnick.github.io/RbxUtil/api/Shake) | `Shake = "sleitnick/shake@0.1.7"` | Shake class for making things shake |
| [Shake](https://sleitnick.github.io/RbxUtil/api/Shake) | `Shake = "sleitnick/shake@1.0.0"` | Shake class for making things shake |
| [Signal](https://sleitnick.github.io/RbxUtil/api/Signal) | `Signal = "sleitnick/signal@2.0.1"` | Signal class |
| [Silo](https://sleitnick.github.io/RbxUtil/api/Silo) | `Silo = "sleitnick/silo@0.2.0"` | State container class |
| [Streamable](https://sleitnick.github.io/RbxUtil/api/Streamable) | `Streamable = "sleitnick/streamable@1.2.4"` | Streamable class and StreamableUtil |
Expand Down
67 changes: 55 additions & 12 deletions modules/shake/init.lua
Original file line number Diff line number Diff line change
@@ -1,16 +1,38 @@
--!native

-- Shake
-- Stephen Leitnick
-- December 09, 2021

local RunService = game:GetService("RunService")

--[=[
@within Shake
@type UpdateCallbackFn () -> (position: Vector3, rotation: Vector3, completed: boolean)
]=]
type UpdateCallbackFn = () -> (Vector3, Vector3, boolean)

local RunService = game:GetService("RunService")

local Trove = require(script.Parent.Trove)
export type Shake = {
Amplitude: number,
Frequency: number,
FadeInTime: number,
FadeOutTime: number,
SustainTime: number,
Sustain: boolean,
PositionInfluence: Vector3,
RotationInfluence: Vector3,
TimeFunction: () -> number,

Start: (self: Shake) -> (),
Stop: (self: Shake) -> (),
IsShaking: (self: Shake) -> boolean,
StopSustain: (self: Shake) -> (),
Update: (self: Shake) -> (Vector3, Vector3, boolean),
OnSignal: (signal: RBXScriptSignal, callback: (Vector3, Vector3, boolean) -> ()) -> RBXScriptConnection,
BindToRenderStep: (name: string, priority: number, callback: (Vector3, Vector3, boolean) -> ()) -> (),
Clone: (self: Shake) -> Shake,
Destroy: (self: Shake) -> (),
}

local rng = Random.new()
local renderId = 0
Expand Down Expand Up @@ -176,8 +198,9 @@ Shake.__index = Shake
@return Shake
Construct a new Shake instance.
]=]
function Shake.new()
function Shake.new(): Shake
local self = setmetatable({}, Shake)

self.Amplitude = 1
self.Frequency = 1
self.FadeInTime = 1
Expand All @@ -187,10 +210,13 @@ function Shake.new()
self.PositionInfluence = Vector3.one
self.RotationInfluence = Vector3.one
self.TimeFunction = if RunService:IsRunning() then time else os.clock

self._timeOffset = rng:NextNumber(-1e9, 1e9)
self._startTime = 0
self._trove = Trove.new()
self._running = false
self._signalConnections = {}
self._renderBindings = {}

return self
end

Expand Down Expand Up @@ -255,9 +281,6 @@ end
function Shake:Start()
self._startTime = self.TimeFunction()
self._running = true
self._trove:Add(function()
self._running = false
end)
end

--[=[
Expand All @@ -268,7 +291,17 @@ end
`Destroy` method is called.
]=]
function Shake:Stop()
self._trove:Clean()
self._running = false

for _, name in self._renderBindings do
RunService:UnbindFromRenderStep(name)
end
table.clear(self._renderBindings)

for _, conn in self._signalConnections do
conn:Disconnect()
end
table.clear(self._signalConnections)
end

--[=[
Expand Down Expand Up @@ -371,9 +404,13 @@ end
```
]=]
function Shake:OnSignal(signal, callbackFn: UpdateCallbackFn)
return self._trove:Connect(signal, function()
local conn = signal:Connect(function()
callbackFn(self:Update())
end)

table.insert(self._signalConnections, conn)

return conn
end

--[=[
Expand All @@ -397,9 +434,11 @@ end
```
]=]
function Shake:BindToRenderStep(name: string, priority: number, callbackFn: UpdateCallbackFn)
self._trove:BindToRenderStep(name, priority, function()
RunService:BindToRenderStep(name, priority, function()
callbackFn(self:Update())
end)

table.insert(self._renderBindings, name)
end

--[=[
Expand Down Expand Up @@ -457,4 +496,8 @@ function Shake:Destroy()
self:Stop()
end

return Shake
return {
new = Shake.new,
InverseSquare = Shake.InverseSquare,
NextRenderName = Shake.NextRenderName,
}
16 changes: 16 additions & 0 deletions modules/shake/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "@rbxutil/shake",
"version": "1.0.0",
"main": "init.lua",
"repository": "github:Sleitnick/RbxUtil",
"license": "MIT",
"types": "index.d.ts",
"files": [
"./",
"!*.toml",
"!*.json"
],
"publishConfig": {
"access": "public"
}
}
6 changes: 2 additions & 4 deletions modules/shake/wally.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
[package]
name = "sleitnick/shake"
description = "Shake class for making things shake"
version = "0.1.7"
version = "1.0.0"
license = "MIT"
authors = ["Stephen Leitnick"]
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"

[dependencies]
Trove = "sleitnick/trove@^0.4"
exclude = ["node_modules", "package.json", "**/*.ts"]

0 comments on commit e147fe4

Please sign in to comment.