--!optimize 2 --!native --!strict --Weird type hack for allowing more than 1 property to be defined inside a tween --Couldnt get type packs working type TweenAnimation = { [string]: T | U --I hate "any" } type ClassConstructor = typeof(setmetatable({} :: Constructor_Return_Props, {} :: Impl_Constructor)) type Impl_Constructor = { __index: Impl_Constructor, constructor: Constructor_Fun, --Class functions Start: (self: ClassConstructor, PostInstance: Instance?, PostProperties: TweenAnimation?, PostTweenSettings: TweenInfo?) -> Tween, } type Constructor_Fun = (TweenSettings: TweenInfo?, Object: Instance?, PreProperties: TweenAnimation?) -> ClassConstructor type Constructor_Return_Props = { TweenInfo: TweenInfo?, Instance: Instance?, PreProperties: TweenAnimation?, } export type TweenClass = ClassConstructor export type TweenConstructor = Impl_Constructor local Tween = {} :: Impl_Constructor Tween.__index = Tween local TS = game:GetService("TweenService") function Tween.constructor(TweenSettings, Object, PreProperties) return setmetatable({ TweenInfo = TweenSettings, Instance = Object, PreProperties = PreProperties }, Tween) end function Tween:Start(PostInstance, PostProperties, PostTweenSettings) local Props = self.PreProperties local Object = self.Instance local TweenSettings = self.TweenInfo if PostProperties then if self.PreProperties then if Props then warn("Tween library: Combining PostProperties and PreProperties together", debug.traceback()) for tween_prop, tween_value in PostProperties do Props[tween_prop] = tween_value end end else Props = PostProperties end end if PostInstance then if Object then warn("Tween library: Overwriting an already defined animating object old=", Object, "new=", PostInstance, debug.traceback()) end Object = PostInstance end if PostTweenSettings then if TweenSettings then warn("Tween library: Overwriting already defined Tween settings", debug.traceback()) end TweenSettings = PostTweenSettings end local Animation = TS:Create(Object, TweenSettings, Props) Animation:Play() return Animation end return Tween