Skip to content

Instantly share code, notes, and snippets.

@cameronpcampbell
Created August 25, 2024 11:16
Show Gist options
  • Save cameronpcampbell/5eb380ae3a6fc712e77ba83af1dd54d0 to your computer and use it in GitHub Desktop.
Save cameronpcampbell/5eb380ae3a6fc712e77ba83af1dd54d0 to your computer and use it in GitHub Desktop.
--!strict
--> Modules -------------------------------------------------------------------------------------------
local Fusion = require(Packages.Fusion) -- Make sure to put path to Fusion here.
-------------------------------------------------------------------------------------------------------
--> Functions -----------------------------------------------------------------------------------------
local function ComputeUDim(scope: Fusion.Scope<typeof(Fusion)>, scale: Fusion.UsedAs<number>, offset: Fusion.UsedAs<number>)
return scope:Computed(function(use) return UDim.new(use(scale), use(offset)) end)
end
local function ComputeUDim2(scope: Fusion.Scope<typeof(Fusion)>, width: Fusion.UsedAs<UDim>, height: Fusion.UsedAs<UDim>)
return scope:Computed(function(use)
local usedWidth, usedHeight = use(width), use(height)
return UDim2.new(usedWidth.Scale, usedWidth.Offset, usedHeight.Scale, usedHeight.Offset)
end)
end
local function ComputeUDim2FromScale(scope: Fusion.Scope<typeof(Fusion)>, scaleWidth: Fusion.UsedAs<number>, scaleHeight: Fusion.UsedAs<number>)
return scope:Computed(function(use)
local usedScaleWidth, usedScaleHeight = use(scaleWidth), use(scaleHeight)
return UDim2.fromScale(usedScaleWidth, usedScaleHeight)
end)
end
local function ComputeUDim2FromOffset(scope: Fusion.Scope<typeof(Fusion)>, offsetWidth: Fusion.UsedAs<number>, offsetHeight: Fusion.UsedAs<number>)
return scope:Computed(function(use)
local usedScaleWidth, usedScaleHeight = use(offsetWidth), use(offsetHeight)
return UDim2.fromOffset(usedScaleWidth, usedScaleHeight)
end)
end
local function ComputeTweenInfo(
scope: Fusion.Scope<typeof(Fusion)>, time: Fusion.UsedAs<number>,
easingStyle: Fusion.UsedAs<Enum.EasingStyle>?, easingDirection: Fusion.UsedAs<Enum.EasingDirection>?,
repeatCount: Fusion.UsedAs<number>?, reverses: Fusion.UsedAs<number>?, delayTime: Fusion.UsedAs<number>?
)
return scope:Computed(function(use)
return TweenInfo.new(
use(time),
use(easingStyle) or Enum.EasingStyle.Linear,
use(easingDirection) or Enum.EasingDirection.In,
use(repeatCount) or 0,
use(reverses) or false,
use(delayTime) or 0
)
end)
end
-------------------------------------------------------------------------------------------------------
return {
UDim = ComputeUDim,
UDim2 = ComputeUDim2,
UDim2FromScale = ComputeUDim2FromScale,
UDim2FromOffset = ComputeUDim2FromOffset,
TweenInfo = ComputeTweenInfo
}
@cameronpcampbell
Copy link
Author

Example Usage

local Scope = Fusion.scoped(Fusion)
local ComputeUDim, ComputeUDim2, ComputeTweenInfo =
  ComputeTransforms.UDim, ComputeTransforms.UDim2, ComputeTransforms.TweenInfo

local HeightState = Scope:Value(503)
local TweenSpeedState = Scope:Value(.65)
local TweenStyleState = Scope:Value(Enum.EasingStyle.Exponential)

local ComputeSize = Scope:Tween(
  ComputeUDim2(Scope, UDim.new(0,0), ComputeUDim(Scope, 0, HeightState)),
  ComputeTweenInfo(Scope, TweenSpeedState, TweenStyleState)
)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment