Skip to content

High performance wind effect for leaves and foliage

License

Notifications You must be signed in to change notification settings

VoiditeDev/WindShake

 
 

Repository files navigation

WindShake

High performance wind effect for leaves and foliage

by boatbomber

I wanted to have massive forests full of moving leaves. Not for any project of mine, I just wanted to make it cuz it sounded like fun. So I did. And now you guys benefit!

This module handled 77,750+ leaf meshes while the game ran at over 400 FPS on my machine. It's pretty darn fast, all things considered.

Demo: https://www.youtube.com/watch?v=WdJr7k9Uqfw


Source:

GitHub:

https://github.com/boatbomber/WindShake

Library:

https://www.roblox.com/library/6377120469/WindShake

Uncopylocked Demo:

https://www.roblox.com/games/6342320514/Wind-Demo


API:

Properties

number WindShake.RenderDistance

Sets the render distance for active objects in studs. Default 150

number WindShake.MaxRefreshRate

Sets the maximum dynamic refresh rate for active objects in seconds. Default 1/60

Functions

function WindShake:Init(config: {
    MatchWorkspaceWind: boolean?,
}?)

Initializes the wind shake logic and adds shake to all tagged objects

Parameters:

  • config [Optional Dictionary]

    Configuration for the initialization

    • MatchWorkspaceWind [Optional Boolean]

      Whether to match the wind settings to the Workspace's GlobalWind setting. Default false

Returns:

  • void
function WindShake:Cleanup()

Halts and clears the wind shake logic and all object shakes

Returns:

  • void
function WindShake:Pause()

Halts the wind shake logic without clearing

Returns:

  • void
function WindShake:Resume()

Restarts the wind shake logic without clearing

Returns:

  • void
function WindShake:AddObjectShake(Object, Settings)

Adds an object to be shaken

Parameters:

  • Object [BasePart] The Object to apply shaking to

  • Settings [Optional Dictionary] The settings to apply to this object's shake (See below for Settings structure)

Returns:

  • void
function WindShake:RemoveObjectShake(Object)

Removes shake from an object

Parameters:

  • Object [BasePart] The Object to remove shaking from

Returns:

  • void
function WindShake:SetDefaultSettings(Settings) [DEPRECATED]

Deprecated in favor of setting the Attributes of the WindShake modulescript

Sets the default settings for future object shake additions

Parameters:

  • Settings [Dictionary] The settings to use as default (See below for Settings structure)

Returns:

  • void
function WindShake:UpdateObjectSettings(Object, Settings) [DEPRECATED]

Deprecated in favor of setting the Attributes of the Object

Updates the shake settings of an object already added

Parameters:

  • Object [BasePart] The Object to apply shake settings to

  • Settings [Dictionary] The settings to apply to this object's shake (See below for Settings structure)

Returns:

  • void
function WindShake:UpdateAllObjectSettings(Settings)

Updates the shake settings of all active shakes

Parameters:

  • Settings [Dictionary] The settings to apply to all objects' shake (See below for Settings structure)

Returns:

  • void
function WindShake:MatchWorkspaceWind()

Sets the wind settings to match the current workspace GlobalWind

When :Init() is called with the MatchWorkspaceWind config set to true, this is called automatically

Returns:

  • void

Events

RBXScriptSignal WindShake.ObjectShakeAdded(Object)

Fires when an object is added to WindShake

Parameters:

  • Object [BasePart] The object that was added
RBXScriptSignal WindShake.ObjectShakeRemoved(Object)

Fires when an object is removed from WindShake

Parameters:

  • Object [BasePart] The object that was removed
RBXScriptSignal WindShake.ObjectShakeUpdated(Object)

Fires when an object's settings are updated through the update APIs

Parameters:

  • Object [BasePart] The object that had its settings updated
RBXScriptSignal WindShake.Resumed()

Fires when WindShake begins shaking the objects

RBXScriptSignal WindShake.Paused()

Fires when WindShake stops shaking the objects

Types

Settings = {
    WindDirection: Vector3 to shake towards (Initially 0.5,0,0.5)
    WindSpeed: Positive number that defines how fast to shake (Initially 20)
    WindPower: Positive number that defines how much to shake (Initially 0.5)

    --If one of these is not defined, it will use default for that one,
    --so you can pass a table with just one or two settings and the rest
    --will be default so you don't need to make the full table every time.
}

Usage Example:

local WIND_DIRECTION = Vector3.new(1,0,0.3)
local WIND_SPEED = 25
local WIND_POWER = 0.4

local WindShake = require(script.WindShake)

WindShake:SetDefaultSettings({
	WindSpeed = WIND_SPEED;
	WindDirection = WIND_DIRECTION;
	WindPower = WIND_POWER;
})

WindShake:Init() -- Anything with the WindShake tag will now shake

About

High performance wind effect for leaves and foliage

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 100.0%