{"TotalCount":86,"Files":[{"Ident":"resync.sbtween","Path":"Code/SbTween/Extensions/LightExtensions.cs","FileName":"LightExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing Sandbox.UI;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class LightExtensions\r\n{\r\n\r\n\tpublic static BaseTween TweenLightColor( this Light Light, Color target, float duration )\r\n\t{\r\n\t\tColor start = Light.LightColor;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = Light.GameObject;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = Light.LightColor )\r\n\t\t\t.OnUpdate( p =\u003E Light.LightColor = Color.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenRadius( this SpotLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.Radius;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.Radius )\r\n\t\t\t.OnUpdate( p =\u003E light.Radius = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenConeOuter( this SpotLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.ConeOuter;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.ConeOuter )\r\n\t\t\t.OnUpdate( p =\u003E light.ConeOuter = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenInnerCone( this SpotLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.ConeInner;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.ConeInner )\r\n\t\t\t.OnUpdate( p =\u003E light.ConeInner = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenAttenuation( this PointLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.Attenuation;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.Attenuation )\r\n\t\t\t.OnUpdate( p =\u003E light.Attenuation = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenRadius( this PointLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.Radius;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.Radius )\r\n\t\t\t.OnUpdate( p =\u003E light.Radius = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenAttenuation( this SpotLight light, float target, float duration )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat start = light.Attenuation;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = light.Attenuation )\r\n\t\t\t.OnUpdate( p =\u003E light.Attenuation = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t//FLICKERING LIGHT\r\n\tpublic static BaseTween TweenFlickerLight( this PointLight light, float minBrightness, float maxBrightness, float duration, float speed = 10f )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat time = 0f;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnUpdate( _ =\u003E\r\n\t\t\t{\r\n\t\t\t\ttime \u002B= Time.Delta * speed;\r\n\t\t\t\tfloat noise = MathF.Sin( time * 1.3f ) * MathF.Sin( time * 2.7f ) * MathF.Sin( time * 0.9f );\r\n\t\t\t\tfloat t = (noise \u002B 1f) * 0.5f;\r\n\t\t\t\tlight.Attenuation = MathX.Lerp( minBrightness, maxBrightness, t );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenFlickerLight( this SpotLight light, float minBrightness, float maxBrightness, float duration, float speed = 10f )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat time = 0f;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnUpdate( _ =\u003E\r\n\t\t\t{\r\n\t\t\t\ttime \u002B= Time.Delta * speed;\r\n\t\t\t\tfloat noise = MathF.Sin( time * 1.3f ) * MathF.Sin( time * 2.7f ) * MathF.Sin( time * 0.9f );\r\n\t\t\t\tfloat t = (noise \u002B 1f) * 0.5f;\r\n\t\t\t\tlight.Attenuation = MathX.Lerp( minBrightness, maxBrightness, t );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n\t//FLICKERING Color\r\n\r\n\tpublic static BaseTween TweenFlickerColor( this PointLight light, Color colorA, Color colorB, float duration, float speed = 10f )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat time = 0f;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnUpdate( _ =\u003E\r\n\t\t\t{\r\n\t\t\t\ttime \u002B= Time.Delta * speed;\r\n\t\t\t\tfloat noise = MathF.Sin( time * 1.3f ) * MathF.Sin( time * 2.7f ) * MathF.Sin( time * 0.9f );\r\n\t\t\t\tfloat t = (noise \u002B 1f) * 0.5f;\r\n\t\t\t\tlight.LightColor = Color.Lerp( colorA, colorB, t );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenFlickerColor( this SpotLight light, Color colorA, Color colorB, float duration, float speed = 10f )\r\n\t{\r\n\t\tif ( !light.IsValid() ) return null;\r\n\r\n\t\tfloat time = 0f;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnUpdate( _ =\u003E\r\n\t\t\t{\r\n\t\t\t\ttime \u002B= Time.Delta * speed;\r\n\t\t\t\tfloat noise = MathF.Sin( time * 1.3f ) * MathF.Sin( time * 2.7f ) * MathF.Sin( time * 0.9f );\r\n\t\t\t\tfloat t = (noise \u002B 1f) * 0.5f;\r\n\t\t\t\tlight.LightColor = Color.Lerp( colorA, colorB, t );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Extensions/AudioExtensions.cs","FileName":"AudioExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class AudioExtensions\r\n{\r\n\tpublic static BaseTween TweenVolume( this SoundPointComponent sound, float targetVolume, float duration )\r\n\t{\r\n\t\tfloat startVolume = sound.Volume;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = sound.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startVolume = sound.Volume )\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !sound.IsValid() ) return;\r\n\t\t\t\tsound.Volume = MathX.Lerp( startVolume, targetVolume, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\t\r\n\tpublic static BaseTween TweenPitch( this SoundPointComponent sound, float targetPitch, float duration )\r\n\t{\r\n\t\tfloat startPitch = sound.Pitch;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = sound.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startPitch = sound.Pitch )\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !sound.IsValid() ) return;\r\n\t\t\t\tsound.Pitch = MathX.Lerp( startPitch, targetPitch, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Extensions/MathTweenExtensions.cs","FileName":"MathTweenExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class MathTweenExtensions\r\n{\r\n\tpublic static BaseTween TweenInCircle( this GameObject obj, float duration, Vector3 axis, float range, float speed, bool snapping = false )\r\n\t{\r\n\t\tVector3 centerPos = obj.WorldPosition;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\r\n\t\tVector3 normal = axis.Normal;\r\n\t\tVector3 v1 = Vector3.Cross( normal, MathF.Abs( normal.z ) \u003C 0.9f ? Vector3.Up : Vector3.Forward ).Normal;\r\n\t\tVector3 v2 = Vector3.Cross( normal, v1 ).Normal;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\r\n\t\t\t\tfloat angleDegrees = p * 360f * speed;\r\n\t\t\t\tfloat angleRadians = angleDegrees * (MathF.PI / 180f);\r\n\r\n\t\t\t\tfloat cos = MathF.Cos( angleRadians ) * range;\r\n\t\t\t\tfloat sin = MathF.Sin( angleRadians ) * range;\r\n\r\n\t\t\t\tVector3 rotatedOffset = (v1 * cos) \u002B (v2 * sin);\r\n\t\t\t\tobj.WorldPosition = centerPos \u002B rotatedOffset;\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static BaseTween TweenSpiral( this GameObject obj, float duration, Vector3 axis, float speed, float frequency )\r\n\t{\r\n\t\tVector3 startPos = obj.WorldPosition;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startPos = obj.WorldPosition )\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\r\n\t\t\t\tfloat angle = p * MathF.PI * 2f * frequency;\r\n\r\n\t\t\t\tfloat currentRadius = p * speed;\r\n\r\n\t\t\t\tfloat x = MathF.Cos( angle ) * currentRadius;\r\n\t\t\t\tfloat y = MathF.Sin( angle ) * currentRadius;\r\n\r\n\t\t\t\tVector3 axisOffset = axis * p;\r\n\r\n\t\t\t\tVector3 circleOffset = new Vector3( x, y, 0 );\r\n\r\n\t\t\t\tobj.WorldPosition = startPos \u002B axisOffset \u002B circleOffset;\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\t\r\n\tpublic static BaseTween TweenPunchFloat( this GameObject obj, float v, float amplitude, float duration, int vibrations = 5, float elasticity = 1f, Action\u003Cfloat\u003E setter = null )\r\n\t{\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\t\t\t\tif ( p \u003E= 1.0f )\r\n\t\t\t\t{\r\n\t\t\t\t\tsetter?.Invoke( v );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tfloat decay = MathF.Pow( 1f - p, elasticity * 3f );\r\n\r\n\t\t\t\tfloat omega = vibrations * MathF.PI * 2f;\r\n\t\t\t\tfloat oscillation = MathF.Sin( p * omega );\r\n\r\n\t\t\t\tfloat currentOffset = amplitude * oscillation * decay;\r\n\r\n\t\t\t\tsetter?.Invoke( v \u002B currentOffset );\r\n\t\t\t} )\r\n\t\t\t.OnComplete( () =\u003E setter?.Invoke( v ) )\r\n\t\t);\r\n\t}\r\n\t\r\n\tpublic static BaseTween TweenShakeFloat( this GameObject obj, float baseline, float strength, float duration, Action\u003Cfloat\u003E setter = null )\r\n\t{\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\t\t\t\tif ( p \u003E= 1.0f )\r\n\t\t\t\t{\r\n\t\t\t\t\tsetter?.Invoke( baseline );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfloat currentStrength = strength * (1.0f - p);\r\n             \r\n\t\t\t\tfloat randomOffset = Game.Random.Float( -currentStrength, currentStrength );\r\n\r\n\t\t\t\tsetter?.Invoke( baseline \u002B randomOffset );\r\n\t\t\t} )\r\n\t\t\t.OnComplete( () =\u003E setter?.Invoke( baseline ) )\r\n\t\t);\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":".obj/__compiler_extra.cs","FileName":"__compiler_extra.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"global using static Sandbox.Internal.GlobalGameNamespace;\r\nglobal using Microsoft.AspNetCore.Components;\r\nglobal using Microsoft.AspNetCore.Components.Rendering;\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonTitle\u0022, \u0022SbTween\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonIdent\u0022, \u0022sbtween\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022OrgIdent\u0022, \u0022resync\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022Ident\u0022, \u0022resync.sbtween\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022CompileTime\u0022, \u00226/17/2026 7:47:49 AM\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineVersion\u0022, \u002225\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineMinorVersion\u0022, \u00221\u0022 )]\r\n\r\n[assembly: System.Runtime.Versioning.TargetFramework( \u0022.NETCoreApp,Version=v9.0\u0022, FrameworkDisplayName = \u0022.NET 9.0\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyVersion(\u00220.0.146.0\u0022)]\r\n[assembly: global::System.Reflection.AssemblyFileVersion(\u00220.0.146.0\u0022)]"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Core/TweenPlayer.cs","FileName":"TweenPlayer.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\n[Title( \u0022SbTween Player\u0022 )]\r\n[Category( \u0022Tweening\u0022 )]\r\n[Icon( \u0022play_arrow\u0022 )]\r\npublic sealed class SbTweenPlayer : Component, Component.ExecuteInEditor\r\n{\r\n    // BUTTONS\r\n    [Group( \u0022Buttons\u0022 ), Button( \u0022Play\u0022, \u0022play_arrow\u0022 )]\r\n    public void PlayButton() =\u003E Play();\r\n\r\n    [Group( \u0022Buttons\u0022 ), Button( \u0022Stop\u0022, \u0022stop\u0022 )]\r\n    public void StopButton() =\u003E Stop();\r\n\r\n    // SETUP\r\n    [Property, Group( \u0022Setup\u0022 )] public TweenType Type { get; set; } = TweenType.Move;\r\n\r\n    // VECTORS \u0026 TRANSFORMS\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsVector ), true )] public Vector3 From { get; set; }\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsVector ), true )] public Vector3 To { get; set; }\r\n\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsVector2D ), true )] public Vector2 From2D { get; set; }\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsVector2D ), true )] public Vector2 To2D { get; set; }\r\n\r\n    // RENDER / TINT\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( Type ), TweenType.Tint )] public Color ColorFrom { get; set; } = Color.White;\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( Type ), TweenType.Tint )] public Color ColorTo { get; set; } = Color.White;\r\n\r\n    // SHAKE JUICE\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsShake ), true )] public float Strength { get; set; } = 1.0f;\r\n\r\n    // MATH / PROCEDURAL\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsCircularOrSpiral ), true )] public Vector3 Axis { get; set; } = Vector3.Up * 100f;\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsCircularOrSpiral ), true )] public float Speed { get; set; } = 1f;\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsCircularOrSpiral ), true )] public float Frequency { get; set; } = 5f;\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( IsCircularOrSpiral ), true )] public float Range { get; set; } = 5f;\r\n\r\n    // IN CIRCLE SNAPPING\r\n    [Property, Group( \u0022Setup\u0022 ), ShowIf( nameof( Type ), TweenType.InCircle )] public bool Snapping { get; set; } = false;\r\n\r\n    // SETTINGS\r\n    [Property, Group( \u0022Settings\u0022 )] public float Duration { get; set; } = 1.0f;\r\n    [Property, Group( \u0022Settings\u0022 )] public float Delay { get; set; } = 0.0f;\r\n\r\n    [Property, Group( \u0022Settings\u0022 )]\r\n    [Title( \u0022Loops (0 = Once, -1 = Infinite)\u0022 )]\r\n    public int Loops { get; set; } = 0;\r\n\r\n    [Property, Group( \u0022Settings\u0022 )] public LoopType LoopMode { get; set; } = LoopType.Restart;\r\n    [Property, Group( \u0022Settings\u0022 )] public EaseType Easing { get; set; } = EaseType.Linear;\r\n    [Property, Group( \u0022Settings\u0022 )] public bool AutoPlay { get; set; } = true;\r\n    [Property, Group( \u0022Settings\u0022 )] public string TweenID { get; set; } = \u0022\u0022;\r\n\r\n    [Property, Group( \u0022Settings\u0022 )] public bool UseCurve { get; set; } = false;\r\n    [Property, Group( \u0022Settings\u0022 ), ShowIf( nameof( UseCurve ), true )] public Curve TweenCurve { get; set; } = Curve.Linear;\r\n\r\n    // EVENTS\r\n    [Property, Group( \u0022Events\u0022 )] public Action _OnStart { get; set; }\r\n    [Property, Group( \u0022Events\u0022 )] public Action _OnComplete { get; set; }\r\n    [Property, Group( \u0022Debug\u0022 )] public bool GizmoDebug { get; set; } = true;\r\n\r\n    // REFLECTION LOOKUPS FOR EDITOR SHOWIFs\r\n    [Hide] public bool IsCircularOrSpiral =\u003E Type == TweenType.InCircle || Type == TweenType.Spiral;\r\n    [Hide] public bool IsShake =\u003E Type == TweenType.ShakeScale || Type == TweenType.ShakeLocation || Type == TweenType.ShakeRotation;\r\n    [Hide] public bool IsVector =\u003E Type == TweenType.Move || Type == TweenType.MoveLocal || Type == TweenType.Rotate || Type == TweenType.RotateLocal || Type == TweenType.Scale;\r\n    [Hide] public bool IsVector2D =\u003E Type == TweenType.Move2D || Type == TweenType.MoveLocal2D;\r\n\r\n    private BaseTween _currentTween;\r\n    private TweenSnapshot _initialState;\r\n    private int _completedLoops = 0;\r\n    private bool _isReversing = false;\r\n\r\n    private Vector3 _incrementalFrom;\r\n    private Vector3 _incrementalTo;\r\n    private Vector2 _incrementalFrom2D;\r\n    private Vector2 _incrementalTo2D;\r\n    private bool _isIncrementalStarted = false;\r\n\r\n    protected override void OnStart()\r\n    {\r\n       if ( Game.IsPlaying \u0026\u0026 AutoPlay )\r\n       {\r\n          Play();\r\n       }\r\n    }\r\n\r\n    protected override void OnUpdate()\r\n    {\r\n       if ( Game.IsPlaying ) return;\r\n       if ( _currentTween == null ) return;\r\n\r\n       if ( !_currentTween.IsFinished \u0026\u0026 !_currentTween.IsPaused )\r\n       {\r\n          GameObject.Transform.Local = GameObject.Transform.Local;\r\n       }\r\n    }\r\n\r\n    protected override void DrawGizmos()\r\n    {\r\n       if ( !GizmoDebug || !Gizmo.IsSelected ) return;\r\n       if ( Type != TweenType.Move \u0026\u0026 Type != TweenType.MoveLocal ) return;\r\n\r\n       using ( Gizmo.Scope() )\r\n       {\r\n          Gizmo.Transform = new Transform().WithPosition( 0 ).WithRotation( Rotation.Identity ).WithScale( 1 );\r\n          float sphereRadius = 6f;\r\n\r\n          Gizmo.Draw.Color = Color.Green;\r\n          Gizmo.Draw.SolidSphere( From, sphereRadius );\r\n          Gizmo.Draw.Text( \u0022FROM\u0022, new Transform( From \u002B Vector3.Up * 10f ) );\r\n\r\n          Gizmo.Draw.Color = Color.Red;\r\n          Gizmo.Draw.SolidSphere( To, sphereRadius );\r\n          Gizmo.Draw.Text( \u0022TO\u0022, new Transform( To \u002B Vector3.Up * 10f ) );\r\n\r\n          Gizmo.Draw.Color = Color.Yellow.WithAlpha( 0.4f );\r\n          Gizmo.Draw.Line( From, To );\r\n\r\n          var mid = (From \u002B To) / 2f;\r\n          var dir = (To - From).Normal;\r\n          if ( dir.Length \u003E 0.1f )\r\n          {\r\n             Gizmo.Draw.Arrow( mid, mid \u002B dir * 15f, 10f, 5f );\r\n          }\r\n       }\r\n    }\r\n\r\n    public void Play()\r\n    {\r\n       StopInternal();\r\n\r\n       if ( _initialState == null )\r\n       {\r\n          _initialState = new TweenSnapshot();\r\n          _initialState.Capture( GameObject );\r\n       }\r\n\r\n       if ( LoopMode == LoopType.Incremental \u0026\u0026 !IsCircularOrSpiral )\r\n       {\r\n          if ( !_isIncrementalStarted )\r\n          {\r\n             _incrementalFrom = From;\r\n             _incrementalTo = To;\r\n             _incrementalFrom2D = From2D;\r\n             _incrementalTo2D = To2D;\r\n             _isIncrementalStarted = true;\r\n          }\r\n       }\r\n       else\r\n       {\r\n          _isIncrementalStarted = false;\r\n       }\r\n\r\n       if ( !IsCircularOrSpiral \u0026\u0026 LoopMode != LoopType.Incremental )\r\n       {\r\n          ResetToState( !_isReversing );\r\n       }\r\n\r\n       GameObject.Transform.ClearInterpolation();\r\n\r\n       _currentTween = CreateTweenInstance( _isReversing );\r\n       if ( _currentTween == null ) return;\r\n\r\n       _currentTween\r\n          .SetDelay( Delay )\r\n          .OnStart( () =\u003E _OnStart?.Invoke() );\r\n\r\n       if ( UseCurve ) \r\n          _currentTween.WithCurve( TweenCurve );\r\n       else \r\n          _currentTween.SetEase( Easing );\r\n\r\n       if ( !string.IsNullOrEmpty( TweenID ) )\r\n       {\r\n          _currentTween.SetId( TweenID );\r\n       }\r\n\r\n       if ( LoopMode == LoopType.Incremental \u0026\u0026 !IsCircularOrSpiral )\r\n       {\r\n          _currentTween.OnComplete( () =\u003E HandleCompletion() );\r\n       }\r\n       else\r\n       {\r\n          _currentTween.SetLoops( Loops, LoopMode );\r\n          _currentTween.OnComplete( () =\u003E _OnComplete?.Invoke() );\r\n       }\r\n\r\n       _currentTween.Play();\r\n    }\r\n\r\n    public void Stop()\r\n    {\r\n       StopInternal();\r\n       _completedLoops = 0;\r\n       _isReversing = false;\r\n       _isIncrementalStarted = false;\r\n\r\n       if ( _initialState != null )\r\n       {\r\n          _initialState.Restore();\r\n       }\r\n       _initialState = null;\r\n    }\r\n\r\n    private void StopInternal()\r\n    {\r\n       _currentTween?.Stop();\r\n       _currentTween = null;\r\n    }\r\n\r\n    private void HandleCompletion()\r\n    {\r\n       _OnComplete?.Invoke();\r\n       bool hasMoreLoops = Loops == -1 || _completedLoops \u003C Loops;\r\n\r\n       switch ( LoopMode )\r\n       {\r\n          case LoopType.YoYo:\r\n             _isReversing = !_isReversing;\r\n             if ( !_isReversing \u0026\u0026 Loops != -1 ) _completedLoops\u002B\u002B;\r\n\r\n             if ( hasMoreLoops || _isReversing )\r\n             {\r\n                Play();\r\n             }\r\n             break;\r\n\r\n          case LoopType.Incremental:\r\n             if ( hasMoreLoops )\r\n             {\r\n                if ( Loops != -1 ) _completedLoops\u002B\u002B;\r\n                if ( IsVector )\r\n                {\r\n                   var delta = _incrementalTo - _incrementalFrom;\r\n                   _incrementalFrom = _incrementalTo;\r\n                   _incrementalTo \u002B= delta;\r\n                }\r\n                else if ( IsVector2D )\r\n                {\r\n                   var delta2D = _incrementalTo2D - _incrementalFrom2D;\r\n                   _incrementalFrom2D = _incrementalTo2D;\r\n                   _incrementalTo2D \u002B= delta2D;\r\n                }\r\n                _isReversing = false;\r\n                Play();\r\n             }\r\n             break;\r\n\r\n          case LoopType.Restart:\r\n             if ( hasMoreLoops )\r\n             {\r\n                if ( Loops != -1 ) _completedLoops\u002B\u002B;\r\n                _isReversing = false;\r\n                Play();\r\n             }\r\n             break;\r\n       }\r\n    }\r\n\r\n    private void ResetToState( bool useFrom )\r\n    {\r\n       if ( Type == TweenType.Tint )\r\n       {\r\n          var mr = Components.Get\u003CModelRenderer\u003E();\r\n          if ( mr.IsValid() ) mr.Tint = useFrom ? ColorFrom : ColorTo;\r\n       }\r\n       else if ( IsVector2D )\r\n       {\r\n          var val2D = useFrom ? From2D : To2D;\r\n          switch ( Type )\r\n          {\r\n             case TweenType.Move2D: \r\n                GameObject.WorldPosition = new Vector3( val2D.x, val2D.y, GameObject.WorldPosition.z ); \r\n                break;\r\n             case TweenType.MoveLocal2D: \r\n                GameObject.LocalPosition = new Vector3( val2D.x, val2D.y, GameObject.LocalPosition.z ); \r\n                break;\r\n          }\r\n       }\r\n       else\r\n       {\r\n          var val = useFrom ? From : To;\r\n          switch ( Type )\r\n          {\r\n             case TweenType.Move: GameObject.WorldPosition = val; break;\r\n             case TweenType.MoveLocal: GameObject.LocalPosition = val; break;\r\n             case TweenType.Scale: GameObject.LocalScale = val; break;\r\n             case TweenType.Rotate: GameObject.WorldRotation = Rotation.From( val.x, val.y, val.z ); break;\r\n             case TweenType.RotateLocal: GameObject.LocalRotation = Rotation.From( val.x, val.y, val.z ); break;\r\n          }\r\n       }\r\n    }\r\n\r\n    private BaseTween CreateTweenInstance( bool reverse )\r\n    {\r\n       // Calculate explicit dimensional targets contextually\r\n       Vector3 startVal = (LoopMode == LoopType.Incremental \u0026\u0026 _isIncrementalStarted) ? _incrementalFrom : From;\r\n       Vector3 endVal = (LoopMode == LoopType.Incremental \u0026\u0026 _isIncrementalStarted) ? _incrementalTo : To;\r\n       Vector3 targetVal = reverse ? startVal : endVal;\r\n\r\n       Vector2 startVal2D = (LoopMode == LoopType.Incremental \u0026\u0026 _isIncrementalStarted) ? _incrementalFrom2D : From2D;\r\n       Vector2 endVal2D = (LoopMode == LoopType.Incremental \u0026\u0026 _isIncrementalStarted) ? _incrementalTo2D : To2D;\r\n       Vector2 targetVal2D = reverse ? startVal2D : endVal2D;\r\n\r\n       Color targetColor = reverse ? ColorFrom : ColorTo;\r\n\r\n       var t = Type switch\r\n       {\r\n          TweenType.Move =\u003E GameObject.TweenMove( targetVal, Duration ),\r\n          TweenType.MoveLocal =\u003E GameObject.TweenMoveLocal( targetVal, Duration ),\r\n          TweenType.Rotate =\u003E GameObject.TweenRotate( Rotation.From( targetVal.x, targetVal.y, targetVal.z ), Duration ),\r\n          TweenType.RotateLocal =\u003E GameObject.TweenRotateLocal( Rotation.From( targetVal.x, targetVal.y, targetVal.z ), Duration ),\r\n          TweenType.Scale =\u003E GameObject.TweenScale( targetVal, Duration ),\r\n          TweenType.Move2D =\u003E GameObject.TweenMove2D( targetVal2D, Duration ),\r\n          TweenType.MoveLocal2D =\u003E GameObject.TweenMoveLocal2D( targetVal2D, Duration ),\r\n          \r\n          TweenType.Tint =\u003E Components.Get\u003CModelRenderer\u003E()?.TweenTint( targetColor, Duration ),\r\n\r\n          TweenType.ShakeLocation =\u003E GameObject.TweenShakeLocation( Duration, Strength ),\r\n          TweenType.ShakeRotation =\u003E GameObject.TweenShakeRotation( Duration, Strength ),\r\n          TweenType.ShakeScale =\u003E GameObject.TweenShakeScale( Duration, Strength ),\r\n\r\n          TweenType.InCircle =\u003E GameObject.TweenInCircle( Duration, Axis, Range, Speed, Snapping ),\r\n          TweenType.Spiral =\u003E GameObject.TweenSpiral( Duration, Axis, Speed, Frequency ),\r\n\r\n          _ =\u003E null\r\n       };\r\n\r\n       if ( t != null )\r\n       {\r\n          t.Target = this.GameObject;\r\n          t.LoopMode = LoopMode;\r\n       }\r\n\r\n       return t;\r\n    }\r\n}\r\n\r\npublic enum TweenType\r\n{\r\n    Move,\r\n    MoveLocal,\r\n    Rotate,\r\n    RotateLocal,\r\n    Scale,\r\n    Move2D,\r\n    MoveLocal2D,\r\n    Tint,\r\n    ShakeLocation,\r\n    ShakeRotation, \r\n    ShakeScale,\r\n    Spiral,\r\n    InCircle\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Examples/SBECubeTL.cs","FileName":"SBECubeTL.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SBECubeTL : Component\r\n{\r\n\t[Property] public Vector3 vectorUP;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tthis.TweenMove( vectorUP, 3 ).SetEase( EaseType.Linear ).SetLoops(-1, LoopType.YoYo ).Play();\r\n\t}\r\n\t\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Extensions/CameraExtensions.cs","FileName":"CameraExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class CameraExtensions\r\n{\r\n\tpublic static BaseTween TweenFieldOfView( this CameraComponent self, float to, float duration )\r\n\t{\r\n\t\tfloat from = self.FieldOfView;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = self.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !self.IsValid() ) return;\r\n\t\t\t\tself.FieldOfView = from.LerpTo( to, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\t\r\n\tpublic static BaseTween TweenZNear( this CameraComponent self, float to, float duration )\r\n\t{\r\n\t\tfloat from = self.ZNear;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = self.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !self.IsValid() ) return;\r\n\t\t\t\tself.ZNear = from.LerpTo( to, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static BaseTween TweenZFar( this CameraComponent self, float to, float duration )\r\n\t{\r\n\t\tfloat from = self.ZFar;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = self.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !self.IsValid() ) return;\r\n\t\t\t\tself.ZFar = from.LerpTo( to, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static BaseTween TweenBackgroundColor( this CameraComponent self, Color to, float duration )\r\n\t{\r\n\t\tColor from = self.BackgroundColor;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = self.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !self.IsValid() ) return;\r\n\t\t\t\tself.BackgroundColor = Color.Lerp( from, to, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static BaseTween TweenOrthoHeight( this CameraComponent self, float to, float duration )\r\n\t{\r\n\t\tfloat from = self.OrthographicHeight;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = self.GameObject;\r\n\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E\r\n\t\t\t{\r\n\t\t\t\tif ( !self.IsValid() ) return;\r\n\t\t\t\tself.OrthographicHeight = from.LerpTo( to, p );\r\n\t\t\t} )\r\n\t\t);\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Examples/ActionGraph/SbeActionGraphTest.cs","FileName":"SbeActionGraphTest.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using System;\r\nusing Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\n\r\npublic sealed class SbeActionGraphTest : Component\r\n{\r\n\t[Property] public Action actionTest;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tactionTest.Invoke();\r\n\t}\r\n\r\n\tpublic void RestartAction()\r\n\t{\r\n\t\tactionTest.Invoke();\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Examples/SbeCubeSpiral.cs","FileName":"SbeCubeSpiral.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbeCubeSpiral : Component\r\n{\r\n\t[Property] public Vector3 axis;\r\n\t[Property] public float speed;\r\n\t[Property] public float frequency;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tGameObject.TweenSpiral( 4, axis, speed, frequency ).SetLoops(-1, LoopType.YoYo ).Play();\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Examples/SbeTRS.cs","FileName":"SbeTRS.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbeTRS : Component\r\n{\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tthis.TweenShakeRotation( 0.6f, 5 ).SetLoops( -1, LoopType.YoYo );\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Extensions/PostProcessingExtensions.cs","FileName":"PostProcessingExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class PostProcessingExtensions\r\n{\r\n\t// FilmGrain\r\n\r\n\tpublic static BaseTween TweenIntensity( this FilmGrain pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Intensity;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Intensity )\r\n\t\t\t.OnUpdate( p =\u003E pp.Intensity = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenResponse( this FilmGrain pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Response;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Response )\r\n\t\t\t.OnUpdate( p =\u003E pp.Response = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// Bloom\r\n\r\n\tpublic static BaseTween TweenStrength( this Bloom pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Strength;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Strength )\r\n\t\t\t.OnUpdate( p =\u003E pp.Strength = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenThreshold( this Bloom pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Threshold;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Threshold )\r\n\t\t\t.OnUpdate( p =\u003E pp.Threshold = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenGamma( this Bloom pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Gamma;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Gamma )\r\n\t\t\t.OnUpdate( p =\u003E pp.Gamma = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenTint( this Bloom pp, Color target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tColor start = pp.Tint;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Tint )\r\n\t\t\t.OnUpdate( p =\u003E pp.Tint = Color.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// Blur\r\n\r\n\tpublic static BaseTween TweenSize( this Blur pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Size;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Size )\r\n\t\t\t.OnUpdate( p =\u003E pp.Size = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// ChromaticAberration \r\n\r\n\tpublic static BaseTween TweenScale( this ChromaticAberration pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Scale;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Scale )\r\n\t\t\t.OnUpdate( p =\u003E pp.Scale = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenOffset( this ChromaticAberration pp, Vector3 target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tVector3 start = pp.Offset;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Offset )\r\n\t\t\t.OnUpdate( p =\u003E pp.Offset = Vector3.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// ColorAdjustments\r\n\r\n\tpublic static BaseTween TweenBlend( this ColorAdjustments pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Blend;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Blend )\r\n\t\t\t.OnUpdate( p =\u003E pp.Blend = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenSaturation( this ColorAdjustments pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Saturation;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Saturation )\r\n\t\t\t.OnUpdate( p =\u003E pp.Saturation = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenHueRotate( this ColorAdjustments pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.HueRotate;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.HueRotate )\r\n\t\t\t.OnUpdate( p =\u003E pp.HueRotate = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenBrightness( this ColorAdjustments pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Brightness;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Brightness )\r\n\t\t\t.OnUpdate( p =\u003E pp.Brightness = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenContrast( this ColorAdjustments pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Contrast;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Contrast )\r\n\t\t\t.OnUpdate( p =\u003E pp.Contrast = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// Vignette\r\n\r\n\tpublic static BaseTween TweenIntensity( this Vignette pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Intensity;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Intensity )\r\n\t\t\t.OnUpdate( p =\u003E pp.Intensity = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenSmoothness( this Vignette pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Smoothness;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Smoothness )\r\n\t\t\t.OnUpdate( p =\u003E pp.Smoothness = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenRoundness( this Vignette pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Roundness;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Roundness )\r\n\t\t\t.OnUpdate( p =\u003E pp.Roundness = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenColor( this Vignette pp, Color target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tColor start = pp.Color;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Color )\r\n\t\t\t.OnUpdate( p =\u003E pp.Color = Color.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenCenter( this Vignette pp, Vector2 target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tVector2 start = pp.Center;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Center )\r\n\t\t\t.OnUpdate( p =\u003E pp.Center = Vector2.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// DepthOfField\r\n\r\n\tpublic static BaseTween TweenBlurSize( this DepthOfField pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.BlurSize;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.BlurSize )\r\n\t\t\t.OnUpdate( p =\u003E pp.BlurSize = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenFocalDistance( this DepthOfField pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.FocalDistance;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.FocalDistance )\r\n\t\t\t.OnUpdate( p =\u003E pp.FocalDistance = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenFocusRange( this DepthOfField pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.FocusRange;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.FocusRange )\r\n\t\t\t.OnUpdate( p =\u003E pp.FocusRange = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// Sharpen \r\n\r\n\tpublic static BaseTween TweenSharpen( this Sharpen pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Scale;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Scale )\r\n\t\t\t.OnUpdate( p =\u003E pp.Scale = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\tpublic static BaseTween TweenTexelSize( this Sharpen pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.TexelSize;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.TexelSize )\r\n\t\t\t.OnUpdate( p =\u003E pp.TexelSize = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// Pixelate\r\n\r\n\tpublic static BaseTween TweenScale( this Pixelate pp, float target, float duration )\r\n\t{\r\n\t\tif ( !pp.IsValid() ) return null;\r\n\t\tfloat start = pp.Scale;\r\n\t\treturn TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t\t.OnStart( () =\u003E start = pp.Scale )\r\n\t\t\t.OnUpdate( p =\u003E pp.Scale = MathX.Lerp( start, target, p ) ) );\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Core/TweenExtensions.cs","FileName":"TweenExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing Sandbox.UI;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class TweenExtensions\r\n{\r\n\t// Shortcuts (! this is really important otherwise you can\u0027t hookup tweeners to components)\r\n\r\n\r\n\t// TIMELINE\r\n\tpublic static void Pause( this Component self, string id = null )\r\n\t{\r\n\t\tif ( string.IsNullOrEmpty( id ) )\r\n\t\t\tTweenManager.Instance?.Pause( self.GameObject );\r\n\t\telse\r\n\t\t\tTweenManager.Instance?.Pause( id );\r\n\t}\r\n\r\n\tpublic static void Play( this Component self, string id = null )\r\n\t{\r\n\t\tif ( string.IsNullOrEmpty( id ) )\r\n\t\t\tTweenManager.Instance?.Play( self.GameObject );\r\n\t\telse\r\n\t\t\tTweenManager.Instance?.Play( id );\r\n\t}\r\n\r\n\tpublic static void KillTween( this GameObject self, string id )\r\n\t{\r\n\t\tif ( string.IsNullOrEmpty( id ) ) return;\r\n\r\n\t\tTweenManager.Instance?.KillTweenOnObject( self, id );\r\n\t}\r\n\r\n\tpublic static void KillAllTweens( this GameObject self )\r\n\t{\r\n\t\tTweenManager.Instance?.KillAllTweensOnObject( self );\r\n\t}\r\n\r\n\r\n\t// TWEENS\r\n\tpublic static BaseTween TweenMove( this Component self, Vector3 target, float duration ) =\u003E self.GameObject.TweenMove( target, duration );\r\n\tpublic static BaseTween TweenMoveLocal( this Component self, Vector3 target, float duration ) =\u003E self.GameObject.TweenMoveLocal( target, duration );\r\n\tpublic static BaseTween TweenMove2D( this Component self, Vector2 target, float duration ) =\u003E self.GameObject.TweenMove2D( target, duration );\r\n\tpublic static BaseTween TweenMoveLocal2D( this Component self, Vector2 target, float duration ) =\u003E self.GameObject.TweenMoveLocal2D( target, duration );\r\n\tpublic static BaseTween TweenRotateLocal( this Component self, Rotation target, float duration ) =\u003E self.GameObject.TweenRotateLocal( target, duration );\r\n\tpublic static BaseTween TweenRotate( this Component self, Rotation target, float duration ) =\u003E self.GameObject.TweenRotate( target, duration );\r\n\tpublic static BaseTween TweenScale( this Component self, Vector3 target, float duration ) =\u003E self.GameObject.TweenScale( target, duration );\r\n\tpublic static BaseTween TweenShakeLocation( this Component self, float duration, float strength = 10f ) =\u003E self.GameObject.TweenShakeLocation( duration, strength );\r\n\tpublic static BaseTween TweenShakeRotation( this Component self, float duration, float strength = 5f ) =\u003E self.GameObject.TweenShakeRotation( duration, strength );\r\n\tpublic static BaseTween TweenShakeScale( this Component self, float duration, float strength = 0.2f ) =\u003E self.GameObject.TweenShakeScale( duration, strength );\r\n\tpublic static BaseTween TweenFloat( this Component self, float start, float end, float duration, Action\u003Cfloat\u003E setter ) =\u003E self.GameObject.TweenFloat( start, end, duration, setter );\r\n\r\n\t// 3D VECTOR\r\n\tpublic static BaseTween TweenMove( this GameObject obj, Vector3 target, float duration )\r\n\t{\r\n\t\tVector3 start = obj.WorldPosition;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = obj.WorldPosition )\r\n\t\t\t.OnUpdate( p =\u003E obj.WorldPosition = Vector3.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenMoveLocal( this GameObject obj, Vector3 target, float duration )\r\n\t{\r\n\t\tVector3 start = obj.LocalPosition;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = obj.LocalPosition )\r\n\t\t\t.OnUpdate( p =\u003E obj.LocalPosition = Vector3.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// 3D ROTATION\r\n\tpublic static BaseTween TweenRotate( this GameObject obj, Rotation target, float duration )\r\n\t{\r\n\t\tRotation start = obj.WorldRotation;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = obj.WorldRotation )\r\n\t\t\t.OnUpdate( p =\u003E obj.WorldRotation = Rotation.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenRotateLocal( this GameObject obj, Rotation target, float duration )\r\n\t{\r\n\t\tRotation start = obj.LocalRotation;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = obj.LocalRotation )\r\n\t\t\t.OnUpdate( p =\u003E obj.LocalRotation = Rotation.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// 3D SCALE\r\n\tpublic static BaseTween TweenScale( this GameObject obj, Vector3 target, float duration )\r\n\t{\r\n\t\tVector3 start = obj.LocalScale;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = obj.LocalScale )\r\n\t\t\t.OnUpdate( p =\u003E obj.LocalScale = Vector3.Lerp( start, target, p ) ) );\r\n\t}\r\n\t\r\n\t// 2D VECTOR\r\n\tpublic static BaseTween TweenMove2D( this GameObject obj, Vector2 target, float duration )\r\n\t{\r\n\t\tVector2 start = new Vector2( obj.WorldPosition.x, obj.WorldPosition.y );\r\n\t\tfloat originalZ = obj.WorldPosition.z;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E {\r\n\t\t\t\tstart = new Vector2( obj.WorldPosition.x, obj.WorldPosition.y );\r\n\t\t\t\toriginalZ = obj.WorldPosition.z;\r\n\t\t\t} )\r\n\t\t\t.OnUpdate( p =\u003E {\r\n\t\t\t\tVector2 current2D = Vector2.Lerp( start, target, p );\r\n\t\t\t\tobj.WorldPosition = new Vector3( current2D.x, current2D.y, originalZ );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenMoveLocal2D( this GameObject obj, Vector2 target, float duration )\r\n\t{\r\n\t\tVector2 start = new Vector2( obj.LocalPosition.x, obj.LocalPosition.y );\r\n\t\tfloat originalZ = obj.LocalPosition.z;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E {\r\n\t\t\t\tstart = new Vector2( obj.LocalPosition.x, obj.LocalPosition.y );\r\n\t\t\t\toriginalZ = obj.LocalPosition.z;\r\n\t\t\t} )\r\n\t\t\t.OnUpdate( p =\u003E {\r\n\t\t\t\tVector2 current2D = Vector2.Lerp( start, target, p );\r\n\t\t\t\tobj.LocalPosition = new Vector3( current2D.x, current2D.y, originalZ );\r\n\t\t\t} ) );\r\n\t}\r\n\r\n\t// RENDER\r\n\tpublic static BaseTween TweenTint( this ModelRenderer mr, Color target, float duration )\r\n\t{\r\n\t\tColor start = mr.Tint;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = mr.GameObject;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E start = mr.Tint )\r\n\t\t\t.OnUpdate( p =\u003E mr.Tint = Color.Lerp( start, target, p ) ) );\r\n\t}\r\n\r\n\t// FLOAT TWEEN\r\n\tpublic static BaseTween TweenFloat( this GameObject obj, float start, float end, float duration, Action\u003Cfloat\u003E setter )\r\n\t{\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnUpdate( p =\u003E setter?.Invoke( MathX.Lerp( start, end, p ) ) ) );\r\n\t}\r\n\r\n\t// SHAKERS\r\n\tpublic static BaseTween TweenShakeLocation( this GameObject obj, float duration, float strength = 10f )\r\n\t{\r\n\t\tVector3 startPos = obj.WorldPosition;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startPos = obj.WorldPosition )\r\n\t\t\t.OnUpdate( p =\u003E {\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\t\t\t\tvar randomDir = new Vector3( Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ) );\r\n\t\t\t\tobj.WorldPosition = startPos \u002B (randomDir * strength * (1 - p));\r\n\t\t\t} )\r\n\t\t\t.OnComplete( () =\u003E { if ( obj.IsValid() ) obj.WorldPosition = startPos; } ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenShakeRotation( this GameObject obj, float duration, float strength = 5f )\r\n\t{\r\n\t\tRotation startRot = obj.WorldRotation;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startRot = obj.WorldRotation )\r\n\t\t\t.OnUpdate( p =\u003E {\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\t\t\t\tvar randomAngles = new Angles( Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ) );\r\n\t\t\t\tobj.WorldRotation = startRot * Rotation.From( randomAngles * strength * (1 - p) );\r\n\t\t\t} )\r\n\t\t\t.OnComplete( () =\u003E { if ( obj.IsValid() ) obj.WorldRotation = startRot; } ) );\r\n\t}\r\n\r\n\tpublic static BaseTween TweenShakeScale( this GameObject obj, float duration, float strength = 0.2f )\r\n\t{\r\n\t\tVector3 startScale = obj.LocalScale;\r\n\t\tvar tween = new BaseTween( duration );\r\n\t\ttween.Target = obj;\r\n\t\treturn TweenManager.Instance.AddTween( tween\r\n\t\t\t.OnStart( () =\u003E startScale = obj.LocalScale )\r\n\t\t\t.OnUpdate( p =\u003E {\r\n\t\t\t\tif ( !obj.IsValid() ) return;\r\n\t\t\t\tvar randomScale = new Vector3( Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ), Random.Shared.Float( -1, 1 ) );\r\n\t\t\t\tobj.LocalScale = startScale \u002B (randomScale * strength * (1 - p));\r\n\t\t\t} )\r\n\t\t\t.OnComplete( () =\u003E { if ( obj.IsValid() ) obj.LocalScale = startScale; } ) );\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Examples/SbecubeSeq.cs","FileName":"SbecubeSeq.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbecubeSeq : Component\r\n{\r\n\t[Property] public ModelRenderer MR;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tvar exampleSeq = new TweenSequence()\r\n\t\t\t.Append( this.TweenMove( new Vector3( -257.631989f, -510.453766f, 181.270782f ), 1 ) )\r\n\t\t\t.Append( MR.TweenTint( new Color32( 0, 255, 0, 255 ), 0.5f ) )\r\n\t\t\t.Append( this.TweenMove( new Vector3( -257.631989f, -510.453766f, 37.8219452f ), 0.87f ) )\r\n\t\t\t.Append( this.TweenScale( new Vector3( 0.617f, 0.617f, 0.116f ), 0.5f ) )\r\n\t\t\t.Append( this.TweenScale( new Vector3( 0.617f, 0.617f, 0.617f ), 1 ) )\r\n\t\t\t.Append( MR.TweenTint( new Color32( 0, 255, 255, 255 ), 1 ) ).SetLoops(-1).SetDelay(3);\r\n\r\n\t\texampleSeq.Play();\r\n\t\t\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Examples/SbecubeTR.cs","FileName":"SbecubeTR.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbecubeTR : Component\r\n{\r\n\t[Property] public EaseType easingType;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tthis.TweenRotate(Rotation.From(0,180,0), 1).SetEase( easingType ).SetLoops(-1).Play();\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Examples/SbecubeTS.cs","FileName":"SbecubeTS.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbecubeTS : Component\r\n{\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tthis.TweenScale( new Vector3( 0.5f, 1f, 0.5f ),0.5f ).SetLoops(-1,LoopType.YoYo).SetEase(EaseType.InBounce).Play();\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Examples/TextRenderer/Sbe_TextTweenProperty.cs","FileName":"Sbe_TextTweenProperty.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class Sbe_TextTweenProperty : Component\r\n{\r\n\t[Property] public TextRenderer TR;\r\n\t[Property] public Color GlowText;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tTR.TweenFontSize( 52f, 2 ).SetLoops( -1, LoopType.YoYo ).Play();\r\n\t\tTR.TweenOutlineColor(GlowText, 0.8f).SetLoops(-1, LoopType.YoYo ).Play();\r\n\t\tTR.TweenFontWeight(600, 0.4f).SetLoops(-1, LoopType.YoYo ).Play();\r\n\t}\r\n\r\n\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Core/BaseTween.cs","FileName":"BaseTween.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing System;\r\n\r\nnamespace SbTween;\r\n\r\npublic class BaseTween\r\n{\r\n    // Core Settings \r\n    public float Duration { get; set; }\r\n    public float Elapsed { get; private set; }\r\n    public float Delay { get; private set; }\r\n    public EaseType Ease { get; set; } = EaseType.Linear;\r\n    public Func\u003Cfloat, float\u003E TimingFunction { get; set; }\r\n    public GameObject Target { get; set; }\r\n    public string Id { get; set; }\r\n\r\n\r\n    // Looping \r\n    public LoopType LoopMode { get; set; } = LoopType.Restart;\r\n    public int Loops { get; private set; } = 0; // 0 = once, -1 = infinity.\r\n    private int _loopsDone = 0;\r\n\r\n    // State \r\n    public bool IsFinished { get; private set; }\r\n    public bool IsPaused { get; private set; }\r\n    public bool IsReversed { get; private set; }\r\n\r\n    // Events\r\n    private Action _onStart;\r\n    private Action _onComplete;\r\n    private Action _onLoop;\r\n    private Action\u003Cfloat\u003E _onUpdate;\r\n\r\n    private bool _hasStarted = false;\r\n\r\n    public BaseTween( float duration )\r\n    {\r\n       Duration = duration;\r\n    }\r\n\r\n    public BaseTween SetDelay( float seconds )\r\n    {\r\n       Delay = seconds;\r\n       return this;\r\n    }\r\n\r\n    public BaseTween SetId( string id )\r\n    {\r\n       Id = id;\r\n       return this;\r\n    }\r\n    protected float GetEasedProgress( float p )\r\n    {\r\n       return TimingFunction != null ? TimingFunction( p ) : p;\r\n    }\r\n\r\n    public void Update( float deltaTime )\r\n    {\r\n       if ( IsFinished || IsPaused ) return;\r\n\r\n       if ( Delay \u003E 0 )\r\n       {\r\n          Delay -= deltaTime;\r\n          return;\r\n       }\r\n\r\n       if ( !_hasStarted )\r\n       {\r\n          _onStart?.Invoke();\r\n          _hasStarted = true;\r\n       }\r\n\r\n       if ( IsReversed )\r\n          Elapsed -= deltaTime;\r\n       else\r\n          Elapsed \u002B= deltaTime;\r\n\r\n       // Calculate un-clamped progress to detect precise boundaries safely\r\n       float rawProgress = Elapsed / Duration;\r\n       float progress = Math.Clamp( rawProgress, 0f, 1.0f );\r\n       float finalProgress = TimingFunction != null ? TimingFunction( progress ) : Easing.Apply( Ease, progress );\r\n\r\n       if ( LoopMode == LoopType.Incremental )\r\n       {\r\n          _onUpdate?.Invoke( finalProgress \u002B _loopsDone );\r\n       }\r\n       else\r\n       {\r\n          _onUpdate?.Invoke( finalProgress );\r\n       }\r\n\r\n       // Boundary detection checking against raw values to prevent precision lockups\r\n       if ( (!IsReversed \u0026\u0026 rawProgress \u003E= 1.0f) || (IsReversed \u0026\u0026 rawProgress \u003C= 0f) )\r\n       {\r\n          if ( Loops == -1 || _loopsDone \u003C Loops )\r\n          {\r\n             _loopsDone\u002B\u002B;\r\n             _onLoop?.Invoke();\r\n\r\n             if ( LoopMode == LoopType.YoYo )\r\n             {\r\n                IsReversed = !IsReversed;\r\n                // Snap Elapsed to the exact boundaries so the next frame increments cleanly\r\n                Elapsed = IsReversed ? Duration : 0f;\r\n             }\r\n             else\r\n             {\r\n                Elapsed = 0f;\r\n             }\r\n          }\r\n          else\r\n          {\r\n             IsFinished = true;\r\n             _onComplete?.Invoke();\r\n             \r\n             // Auto-remove from manager if active\r\n             if ( TweenManager.Current is { } Tweener )\r\n             {\r\n                Tweener.RemoveTween( this );\r\n             }\r\n          }\r\n       }\r\n    }\r\n\r\n    // Chaining Method\r\n    public BaseTween SetEase( EaseType ease ) { Ease = ease; return this; }\r\n    public BaseTween SetLoops( int loops, LoopType type = LoopType.Restart )\r\n    {\r\n       Loops = loops;\r\n       LoopMode = type;\r\n       return this;\r\n    }\r\n\r\n    public BaseTween OnStart( Action a ) { _onStart = a; return this; }\r\n    public BaseTween OnUpdate( Action\u003Cfloat\u003E a ) \r\n    { \r\n\t    if ( a == null ) return this;\r\n   \r\n\t    _onUpdate = _onUpdate == null ? a : (Action\u003Cfloat\u003E)Delegate.Combine(_onUpdate, a); \r\n\t    return this; \r\n    }\r\n    public BaseTween OnComplete( Action a ) { _onComplete = a; return this; }\r\n    public BaseTween OnLoop( Action a ) { _onLoop = a; return this; }\r\n\r\n    public BaseTween WithCurve( Curve curve )\r\n    {\r\n       TimingFunction = t =\u003E curve.Evaluate( t );\r\n       return this;\r\n    }\r\n\r\n    // Playback \r\n    public void Pause() =\u003E IsPaused = true;\r\n    public void Play()\r\n    {\r\n       IsPaused = false;\r\n       IsFinished = false;\r\n\r\n       if ( TweenManager.Current is { } Tweener )\r\n       {\r\n          Tweener.AddTween( this );\r\n       }\r\n    }\r\n    public void Kill() =\u003E IsFinished = true;\r\n    public void Reverse() =\u003E IsReversed = !IsReversed;\r\n    public void Reset()\r\n    {\r\n       Elapsed = 0;\r\n       IsFinished = false;\r\n       IsPaused = true;\r\n       _hasStarted = false;\r\n       _loopsDone = 0;\r\n    }\r\n\r\n    public void Stop()\r\n    {\r\n       IsFinished = true;\r\n       IsPaused = true;\r\n\r\n       if ( TweenManager.Current is { } Tweener )\r\n       {\r\n          Tweener.RemoveTween( this );\r\n       }\r\n    }\r\n}\r\n\r\n\r\n\r\npublic enum LoopType\r\n{\r\n    Restart,    // 0 to 1, 0 -\u003E 1\r\n    YoYo,       // 0 to 1 to 0\r\n    Incremental // 0 to 1, then 1 -\u003E 2, then 2 -\u003E 3 etc etc.\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Examples/Doo/SbeDooTest.cs","FileName":"SbeDooTest.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\nusing SbTween;\r\n\r\nnamespace SbTween.Examples;\r\n\r\npublic sealed class SbeDooTest : Component\r\n{\r\n\t[Property] public Doo DooTweening;\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tRunDoo( DooTweening );\r\n\t}\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"SbTween/Extensions/MiscExtensions.cs","FileName":"MiscExtensions.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"using Sandbox;\r\n\r\nnamespace SbTween;\r\n\r\npublic static class MiscExtensions\r\n{\r\n\t// DECALS\r\n\tpublic static BaseTween TweenLifeTime( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.LifeTime.ConstantValue; \r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.LifeTime = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenSize( this Decal self, Vector2 target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       Vector2 start = self.Size;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Size = Vector2.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenScale( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Scale.ConstantValue;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Scale = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenRotation( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Rotation.ConstantValue;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Rotation = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenDepth( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Depth;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Depth = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenParallax( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Parallax.ConstantValue;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Parallax = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenColorTint( this Decal self, Color target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       Color start = self.ColorTint.ConstantValue;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.ColorTint = Color.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenColorMix( this Decal self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.ColorMix.ConstantValue;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.ColorMix = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n    \r\n    // CUBEMAP FOG \r\n\r\n    public static BaseTween TweenBlur( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Blur;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Blur = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenStartDistance( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.StartDistance;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.StartDistance = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenEndDistance( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.EndDistance;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.EndDistance = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenFalloffExponent( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.FalloffExponent;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.FalloffExponent = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenHeightWidth( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.HeightWidth;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.HeightWidth = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenHeightStart( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.HeightStart;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.HeightStart = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenHeightExponent( this CubemapFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.HeightExponent;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.HeightExponent = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenTint( this CubemapFog self, Color target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       Color start = self.Tint;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Tint = Color.Lerp( start, target, p ) ) );\r\n    }\r\n    \r\n    // GRADIENT FOG\r\n\r\n    public static BaseTween TweenStartDistance( this GradientFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.StartDistance;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.StartDistance = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenEndDistance( this GradientFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.EndDistance;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.EndDistance = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenFalloffExponent( this GradientFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.FalloffExponent;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.FalloffExponent = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenColor( this GradientFog self, Color target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       Color start = self.Color;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Color = Color.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenHeight( this GradientFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.Height;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.Height = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenVerticalFalloffExponent( this GradientFog self, float target, float duration )\r\n    {\r\n       if ( !self.IsValid() ) return null;\r\n       float start = self.VerticalFalloffExponent;\r\n       return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n          .OnUpdate( p =\u003E self.VerticalFalloffExponent = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n    \r\n    // VOLUMETRIC FOG\r\n\r\n    public static BaseTween TweenStrength( this VolumetricFogVolume self, float target, float duration )\r\n    {\r\n\t    if ( !self.IsValid() ) return null;\r\n\t    float start = self.Strength;\r\n\t    return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t    .OnUpdate( p =\u003E self.Strength = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenFalloffExponent( this VolumetricFogVolume self, float target, float duration )\r\n    {\r\n\t    if ( !self.IsValid() ) return null;\r\n\t    float start = self.FalloffExponent;\r\n\t    return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t    .OnUpdate( p =\u003E self.FalloffExponent = MathX.Lerp( start, target, p ) ) );\r\n    }\r\n\r\n    public static BaseTween TweenColor( this VolumetricFogVolume self, Color target, float duration )\r\n    {\r\n\t    if ( !self.IsValid() ) return null;\r\n\t    Color start = self.Color;\r\n\t    return TweenManager.Instance.AddTween( new BaseTween( duration )\r\n\t\t    .OnUpdate( p =\u003E self.Color = Color.Lerp( start, target, p ) ) );\r\n    }\r\n}\r\n"},{"Ident":"resync.sbtween","Path":"Code/SbTween/Core/Convertors/EaseTypeConverter.cs","FileName":"EaseTypeConverter.cs","PackageType":"library","CodeKind":"Game","AssetVersionId":283981,"IsPrivate":false,"Code":"#nullable enable\r\nusing System;\r\nusing System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nnamespace SbTween;\r\n\r\npublic class EaseTypeConverter : JsonConverter\u003CEaseType\u003E\r\n{\r\n    public override EaseType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\r\n    {\r\n        if (reader.TokenType == JsonTokenType.Number)\r\n        {\r\n            long num = reader.GetInt64();\r\n            return (EaseType)num;\r\n        }\r\n        else if (reader.TokenType == JsonTokenType.String)\r\n        {\r\n            string? str = reader.GetString();\r\n            if (!string.IsNullOrEmpty(str) \u0026\u0026 Enum.TryParse\u003CEaseType\u003E(str, true, out var result))\r\n\t            return result;\r\n        }\r\n\r\n        return EaseType.Linear;\r\n    }\r\n\r\n    public override void Write(Utf8JsonWriter writer, EaseType value, JsonSerializerOptions options)\r\n    {\r\n        writer.WriteStringValue(value.ToString());\r\n    }\r\n}\r\n"}]}