From 3da538a1a0db6f4a6286ca78ca3c65c22febcdf4 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Sun, 15 Jul 2018 11:02:59 +0200 Subject: [PATCH 01/14] Modules working (upgrade features to complete) --- .gitignore | 6 +- _DOTween.Assembly/DOTween.sln | 41 +- _DOTween.Assembly/DOTween.sln.DotSettings | 2 - .../DOTween/Core/DOTweenComponent.cs | 7 + .../DOTween/Core/DOTweenExternalCommand.cs | 22 + .../DOTween/Core/Enums/SpecialStartupMode.cs | 3 +- _DOTween.Assembly/DOTween/Core/Extensions.cs | 30 +- _DOTween.Assembly/DOTween/DOTween.cs | 2 +- _DOTween.Assembly/DOTween/DOTween.csproj | 45 +- .../Plugins/Options/QuaternionOptions.cs | 6 +- .../DOTween/Plugins/PathPlugin.cs | 13 +- .../DOTween/ShortcutExtensions.cs | 266 +------- _DOTween.Assembly/DOTween/Tween.cs | 12 +- .../DOTween46/ShortcutExtensions46.cs | 60 +- .../DOTweenEditor/Core/EditorUtils.cs | 98 +++ .../DOTweenEditor/DOTweenEditor.csproj | 47 +- .../DOTweenEditor/DOTweenModulesSetupGUI.cs | 94 +++ .../DOTweenEditor/DOTweenSetupMenuItem.cs | 54 +- .../DOTweenEditor/DOTweenUtilityWindow.cs | 87 +-- .../DOTween_LooseScripts.csproj | 121 ++++ .../Properties/AssemblyInfo.cs | 36 ++ _DOTween.Assembly/PostBuild_DOTween.bat | 81 +++ .../bin/Modules/DOTweenModuleAudio.cs | 193 ++++++ .../bin/Modules/DOTweenModulePhysics.cs | 212 +++++++ .../bin/Modules/DOTweenModulePhysics2D.cs | 101 ++++ .../bin/Modules/DOTweenModuleSprite.cs | 88 +++ .../bin/Modules/DOTweenModuleUI.cs | 570 ++++++++++++++++++ .../bin/Modules/DOTweenModuleUnityVersion.cs | 252 ++++++++ .../bin/Modules/DOTweenModuleUtils.cs | 108 ++++ 29 files changed, 2175 insertions(+), 482 deletions(-) delete mode 100644 _DOTween.Assembly/DOTween.sln.DotSettings create mode 100644 _DOTween.Assembly/DOTween/Core/DOTweenExternalCommand.cs create mode 100644 _DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs create mode 100644 _DOTween.Assembly/DOTween_LooseScripts/DOTween_LooseScripts.csproj create mode 100644 _DOTween.Assembly/DOTween_LooseScripts/Properties/AssemblyInfo.cs create mode 100644 _DOTween.Assembly/PostBuild_DOTween.bat create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModulePhysics.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs create mode 100644 _DOTween.Assembly/bin/Modules/DOTweenModuleUtils.cs diff --git a/.gitignore b/.gitignore index 703753c..033680a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,10 @@ zz UnityTests* zzTestBuilds *.tmp *.pdb +*.DotSettings UnityTests.Unity5BETA -biz \ No newline at end of file +UnityTests.Unity5 - LastVersionBeforeModules +ModulesTest.Unity2018 +biz +zzTemp \ No newline at end of file diff --git a/_DOTween.Assembly/DOTween.sln b/_DOTween.Assembly/DOTween.sln index 9a5fab8..07d5337 100644 --- a/_DOTween.Assembly/DOTween.sln +++ b/_DOTween.Assembly/DOTween.sln @@ -17,10 +17,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOTween46", "DOTween46\DOTw EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOTween50", "DOTween50\DOTween50.csproj", "{930C3B07-B00A-44B8-A8E5-452A8FD125C7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOTween_LooseScripts", "DOTween_LooseScripts\DOTween_LooseScripts.csproj", "{0B529A90-0B97-4840-BEB6-4A6700B46655}" + ProjectSection(ProjectDependencies) = postProject + {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55} = {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Legacy_NoModules", "Legacy_NoModules", "{3945F2EC-EA44-45DF-82B5-33E978AE8345}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CompatibilityMode|Any CPU = CompatibilityMode|Any CPU Debug|Any CPU = Debug|Any CPU + Release_IncludeRigidbody|Any CPU = Release_IncludeRigidbody|Any CPU Release_NoRigidbody|Any CPU = Release_NoRigidbody|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection @@ -29,6 +37,8 @@ Global {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU + {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Release_IncludeRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {DE17C145-3E8D-45D6-BBB6-D06BD7D80A55}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -37,6 +47,8 @@ Global {421ACC19-8922-4E98-8921-B52240CE172A}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {421ACC19-8922-4E98-8921-B52240CE172A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {421ACC19-8922-4E98-8921-B52240CE172A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {421ACC19-8922-4E98-8921-B52240CE172A}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU + {421ACC19-8922-4E98-8921-B52240CE172A}.Release_IncludeRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {421ACC19-8922-4E98-8921-B52240CE172A}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {421ACC19-8922-4E98-8921-B52240CE172A}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {421ACC19-8922-4E98-8921-B52240CE172A}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -45,44 +57,49 @@ Global {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU + {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release_IncludeRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {20D2E542-D14F-4678-9C38-F3C0ECF6A2F6}.Release|Any CPU.Build.0 = Release|Any CPU {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.CompatibilityMode|Any CPU.ActiveCfg = CompatibilityMode|Any CPU - {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU - {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {978C0952-38D0-4C22-B96C-823EAFEDF0FA}.Release|Any CPU.Build.0 = Release|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.CompatibilityMode|Any CPU.ActiveCfg = CompatibilityMode|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU + {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release_IncludeRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {279545AE-D268-42F0-A4C6-AA5BA15FB9BE}.Release|Any CPU.Build.0 = Release|Any CPU {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.CompatibilityMode|Any CPU.ActiveCfg = CompatibilityMode|Any CPU - {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU - {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC1E5A23-CE58-419C-B165-EB1CD39AB433}.Release|Any CPU.Build.0 = Release|Any CPU {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.CompatibilityMode|Any CPU.ActiveCfg = CompatibilityMode|Any CPU - {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.CompatibilityMode|Any CPU.Build.0 = CompatibilityMode|Any CPU {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Release_NoRigidbody|Any CPU.ActiveCfg = Release_IncludeRigidbody|Any CPU - {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Release_NoRigidbody|Any CPU.Build.0 = Release_IncludeRigidbody|Any CPU {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {930C3B07-B00A-44B8-A8E5-452A8FD125C7}.Release|Any CPU.Build.0 = Release|Any CPU + {0B529A90-0B97-4840-BEB6-4A6700B46655}.CompatibilityMode|Any CPU.ActiveCfg = Release|Any CPU + {0B529A90-0B97-4840-BEB6-4A6700B46655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release|Any CPU + {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release_NoRigidbody|Any CPU.ActiveCfg = Release|Any CPU + {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {978C0952-38D0-4C22-B96C-823EAFEDF0FA} = {3945F2EC-EA44-45DF-82B5-33E978AE8345} + {AC1E5A23-CE58-419C-B165-EB1CD39AB433} = {3945F2EC-EA44-45DF-82B5-33E978AE8345} + {930C3B07-B00A-44B8-A8E5-452A8FD125C7} = {3945F2EC-EA44-45DF-82B5-33E978AE8345} + EndGlobalSection EndGlobal diff --git a/_DOTween.Assembly/DOTween.sln.DotSettings b/_DOTween.Assembly/DOTween.sln.DotSettings deleted file mode 100644 index 0f129db..0000000 --- a/_DOTween.Assembly/DOTween.sln.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - CY \ No newline at end of file diff --git a/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs b/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs index 65d2d6f..9665a2e 100644 --- a/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs +++ b/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs @@ -4,7 +4,9 @@ // License Copyright (c) Daniele Giardini. // This work is subject to the terms at http://dotween.demigiant.com/license.php +using System; using System.Collections; +using System.Reflection; using UnityEngine; #pragma warning disable 1591 @@ -31,6 +33,11 @@ namespace DG.Tweening.Core { inspectorUpdater = 0; _unscaledTime = Time.realtimeSinceStartup; + + // Initialize DOTweenModuleUtils via Reflection + // TODO DOTweenModuleUtils.Init > verify that this works + MethodInfo mi = Type.GetType("DG.Tweening.DOTweenModuleUtils").GetMethod("Init", BindingFlags.Static | BindingFlags.Public); + mi.Invoke(null, null); } void Start() diff --git a/_DOTween.Assembly/DOTween/Core/DOTweenExternalCommand.cs b/_DOTween.Assembly/DOTween/Core/DOTweenExternalCommand.cs new file mode 100644 index 0000000..88aefb1 --- /dev/null +++ b/_DOTween.Assembly/DOTween/Core/DOTweenExternalCommand.cs @@ -0,0 +1,22 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 19:21 +// License Copyright (c) Daniele Giardini +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +using System; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening.Core +{ + /// + /// Used to dispatch commands that need to be captured externally, usually by Modules + /// + public static class DOTweenExternalCommand + { + public static event Action SetOrientationOnPath; + internal static void Dispatch_SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { if (SetOrientationOnPath != null) SetOrientationOnPath(options, t, newRot, trans); } + } +} \ No newline at end of file diff --git a/_DOTween.Assembly/DOTween/Core/Enums/SpecialStartupMode.cs b/_DOTween.Assembly/DOTween/Core/Enums/SpecialStartupMode.cs index b72ff64..6b2c12e 100644 --- a/_DOTween.Assembly/DOTween/Core/Enums/SpecialStartupMode.cs +++ b/_DOTween.Assembly/DOTween/Core/Enums/SpecialStartupMode.cs @@ -4,9 +4,10 @@ // License Copyright (c) Daniele Giardini. // This work is subject to the terms at http://dotween.demigiant.com/license.php +#pragma warning disable 1591 namespace DG.Tweening.Core.Enums { - internal enum SpecialStartupMode + public enum SpecialStartupMode { None, SetLookAt, diff --git a/_DOTween.Assembly/DOTween/Core/Extensions.cs b/_DOTween.Assembly/DOTween/Core/Extensions.cs index 651cd27..aa7c2ae 100644 --- a/_DOTween.Assembly/DOTween/Core/Extensions.cs +++ b/_DOTween.Assembly/DOTween/Core/Extensions.cs @@ -14,27 +14,33 @@ namespace DG.Tweening.Core /// public static class Extensions { - // Used internally by DO shortcuts to set special startup mode - internal static T SetSpecialStartupMode(this T t, SpecialStartupMode mode) where T : Tween + /// + /// INTERNAL: used by DO shortcuts and Modules to set special startup mode + /// + public static T SetSpecialStartupMode(this T t, SpecialStartupMode mode) where T : Tween { t.specialStartupMode = mode; return t; } - // Prevents a tween to use a From setup even if passed - internal static TweenerCore NoFrom(this TweenerCore t) - where TPlugOptions : struct, IPlugOptions - { - t.isFromAllowed = false; - return t; - } - - // Sets the tween as blendable - internal static TweenerCore Blendable(this TweenerCore t) + /// + /// INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + /// + public static TweenerCore Blendable(this TweenerCore t) where TPlugOptions : struct, IPlugOptions { t.isBlendable = true; return t; } + + /// + /// INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + /// + public static TweenerCore NoFrom(this TweenerCore t) + where TPlugOptions : struct, IPlugOptions + { + t.isFromAllowed = false; + return t; + } } } \ No newline at end of file diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index b3560b8..0f1272f 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -32,7 +32,7 @@ namespace DG.Tweening public class DOTween { /// DOTween's version - public static readonly string Version = "1.1.755"; + public static readonly string Version = "1.2.000"; // Last version before modules: 1.1.755 /////////////////////////////////////////////// // Options //////////////////////////////////// diff --git a/_DOTween.Assembly/DOTween/DOTween.csproj b/_DOTween.Assembly/DOTween/DOTween.csproj index 907fd0e..3e46965 100644 --- a/_DOTween.Assembly/DOTween/DOTween.csproj +++ b/_DOTween.Assembly/DOTween/DOTween.csproj @@ -64,7 +64,7 @@ - C:\Program Files (x86)\Unity 3\Editor\Data\Managed\UnityEngine.dll + C:\Program Files (x86)\Unity 46\Editor\Data\Managed\UnityEngine.dll False @@ -87,6 +87,7 @@ + @@ -166,47 +167,7 @@ - set BinDir=bin.Global\DOTween -set DestinationDir=$(SolutionDir)..\..\%25BinDir%25 -set BinDirNoMeta=bin.Global_no_meta\DOTween -set DestinationDirNoMeta=$(SolutionDir)..\..\%25BinDirNoMeta%25 -set BinDirUnityTests=UnityTests.Unity4\Assets\Demigiant\DOTween -set DestinationDirUnityTests=$(SolutionDir)..\%25BinDirUnityTests%25 -set BinDirUnity5Tests=UnityTests.Unity5\Assets\Demigiant\DOTween -set DestinationDirUnity5Tests=$(SolutionDir)..\%25BinDirUnity5Tests%25 -set BinDirCompatibilityTests=UnityCompatibilityTests.Unity35\Assets\Demigiant\DOTween -set DestinationDirCompatibilityTests=$(SolutionDir)..\%25BinDirCompatibilityTests%25 -set BinDirExtPluginsTests=ExternalPluginsTestsAndExamples.Unity5\Assets\Demigiant\DOTween -set DestinationDirExtPluginsTests=$(SolutionDir)..\%25BinDirExtPluginsTests%25 - -echo %25DestinationDir%25 - -echo Deleting TMPs... -DEL $(TargetDir)\*.tmp - -CD $(TargetDir) -echo Converting PDB to MDB and deleting PDB... -"c:\Program Files\pdb2mdb\pdb2mdb.exe" $(TargetFileName) -DEL $(TargetName).pdb - -echo Exporting Assembly to %25DestinationDir%25 -echo Copying files to Destination... -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDir%25 /Y /I /E - -echo Exporting Assembly to %25DestinationDirNoMeta%25 -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDirNoMeta%25 /Y /I /E - -echo Exporting Assembly to %25DestinationDirUnityTests%25 -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDirUnityTests%25 /Y /I /E - -echo Exporting Assembly to %25DestinationDirUnity5Tests%25 -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDirUnity5Tests%25 /Y /I /E - -echo Exporting Assembly to %25DestinationDirCompatibilityTests%25 -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDirCompatibilityTests%25 /Y /I /E - -echo Exporting Assembly to %25DestinationDirExtPluginsTests%25 -echo f | xcopy "$(SolutionDir)\bin" %25DestinationDirExtPluginsTests%25 /Y /I /E + call $(SolutionDir)PostBuild_DOTween.bat $(SolutionDir) $(TargetDir) $(TargetFileName) $(TargetName) DOTween bin + \ No newline at end of file diff --git a/_DOTween.Assembly/DOTween_LooseScripts/Properties/AssemblyInfo.cs b/_DOTween.Assembly/DOTween_LooseScripts/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..977fd30 --- /dev/null +++ b/_DOTween.Assembly/DOTween_LooseScripts/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DOTween_LooseScripts")] +[assembly: AssemblyDescription("Deals with lose scripts inside bin and bin_pro folders")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Demigiant")] +[assembly: AssemblyProduct("DOTween_LooseScripts")] +[assembly: AssemblyCopyright("Copyright © Daniele Giardini, Demigiant 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("807e068c-2a0e-4c81-a303-4b4fd3924511")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat new file mode 100644 index 0000000..275d745 --- /dev/null +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -0,0 +1,81 @@ +:: %1 = $(SolutionDir) ► Solution dir path - with final slash +:: %2 = $(TargetDir) ► Bin folder dir path - with final slash +:: %3 = $(TargetFileName) ► DLL filename with extension +:: %4 = $(TargetName) ► DLL filename without extension +:: %5 = Main export dir ► Main folder inside bin.Global/etc where to copy the files (ex: "DOTween", "DOTweenPro") +:: %6 = Bin dir name ► (ex: "bin", "bin_pro") +:: %7 = Eventual export subdir (can be NULL) ► Eventual subdirectory inside the main export dir (ex: "Editor") + +echo : +echo : +echo : +echo : +echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +echo :::::::::::::::::: EXECUTING BATCH FILE ::::::::::::::::::::::: +echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +echo : +echo : +echo : +echo : +echo :::::: TARGET: %5 %7 + +echo :::::: Deleting TMPs... +DEL %2*.tmp + +echo :::::: Converting PDB to MDB and deleting PDB... +CD %2 +"c:\Program Files\pdb2mdb\pdb2mdb.exe" %3 +echo ::: Deleting PDB files: %4.pdb +DEL %4.pdb +echo ::: PDB files deleted, PAUSE for 0.5 second +waitfor pdbsToBeDeletedHopefully /t 0.5 2>NUL || type nul>nul + +echo :::::: Starting export... + +set SubDir=%7 +if not "%SubDir%"=="" ( set SubDir=\%7 ) +set CopyFromDir=%1%6%SubDir% + +set CopyToDir=%1..\..\bin.Global\%5%SubDir% +set CopyToDirNoMeta=%1..\..\bin.Global_no_meta\%5%SubDir% +set CopyToDirUnityTests=%1..\UnityTests.Unity4\Assets\Demigiant\%5%SubDir% +set CopyToDirUnity5Tests=%1..\UnityTests.Unity5\Assets\Demigiant\%5%SubDir% +set CopyToDirCompatibilityTests=%1..\UnityCompatibilityTests.Unity35\Assets\Demigiant\%5%SubDir% +set CopyToDirExtPluginsTests=%1..\ExternalPluginsTestsAndExamples.Unity5\Assets\Demigiant\%5%SubDir% +set CopyToDirModulesTest=%1..\ModulesTest.Unity2018\Assets\Demigiant\%5%SubDir% + +:: For now build only to Modules test project +echo ::: Exporting from %CopyFromDir% to %CopyToDirModulesTest% +echo ::: f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E + +exit /B + +echo ::: Exporting from %CopyFromDir% to %CopyToDir% +echo ::: f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E + +echo ::: Exporting from %CopyFromDir% to %CopyToDirNoMeta% +echo ::: f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E + +echo ::: Exporting from %CopyFromDir% to %CopyToDirUnityTests% +echo ::: f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E + +echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% +echo ::: f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E + +echo ::: Exporting from %CopyFromDir% to %CopyToDirCompatibilityTests% +echo ::: f | xcopy %CopyFromDir% %CopyToDirCompatibilityTests% /Y /I /E + +echo ::: Exporting from %CopyFromDir% to %CopyToDirExtPluginsTests% +echo ::: f | xcopy %CopyFromDir% %CopyToDirExtPluginsTests% /Y /I /E + +echo : +echo : +echo : +echo : +echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +echo ::::::::::::::::::::: BATCH FILE END :::::::::::::::::::::::::: +echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +echo : +echo : +echo : +echo : \ No newline at end of file diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs new file mode 100644 index 0000000..ec2be84 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs @@ -0,0 +1,193 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTAUDIO +using System; +using UnityEngine; +using UnityEngine.Audio; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleAudio + { + #region Shortcuts + + #region Audio + + /// Tweens an AudioSource's volume to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static Tweener DOFade(this AudioSource target, float endValue, float duration) + { + if (endValue < 0) endValue = 0; + else if (endValue > 1) endValue = 1; + return DOTween.To(() => target.volume, x => target.volume = x, endValue, duration).SetTarget(target); + } + + /// Tweens an AudioSource's pitch to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPitch(this AudioSource target, float endValue, float duration) + { + return DOTween.To(() => target.pitch, x => target.pitch = x, endValue, duration).SetTarget(target); + } + + #endregion + +#if UNITY_5 || UNITY_2017_0_OR_NEWER + #region AudioMixer (Unity 5 or Newer) + + /// Tweens an AudioMixer's exposed float to the given value. + /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. + /// Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. + /// Name given to the exposed float to set + /// The end value to reachThe duration of the tween + public static Tweener DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) + { + return DOTween.To(()=> { + float currVal; + target.GetFloat(floatName, out currVal); + return currVal; + }, x=> target.SetFloat(floatName, x), endValue, duration) + .SetTarget(target); + } + + #region Operation Shortcuts + + /// + /// Completes all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens completed + /// (meaning the tweens that don't have infinite loops and were not already complete) + /// + /// For Sequences only: if TRUE also internal Sequence callbacks will be fired, + /// otherwise they will be ignored + public static int DOComplete(this AudioMixer target, bool withCallbacks = false) + { + return DOTween.Complete(target, withCallbacks); + } + + /// + /// Kills all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens killed. + /// + /// If TRUE completes the tween before killing it + public static int DOKill(this AudioMixer target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens flipped. + /// + public static int DOFlip(this AudioMixer target) + { + return DOTween.Flip(target); + } + + /// + /// Sends to the given position all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + /// Time position to reach + /// (if higher than the whole tween duration the tween will simply reach its end) + /// If TRUE will play the tween after reaching the given position, otherwise it will pause it + public static int DOGoto(this AudioMixer target, float to, bool andPlay = false) + { + return DOTween.Goto(target, to, andPlay); + } + + /// + /// Pauses all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens paused. + /// + public static int DOPause(this AudioMixer target) + { + return DOTween.Pause(target); + } + + /// + /// Plays all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlay(this AudioMixer target) + { + return DOTween.Play(target); + } + + /// + /// Plays backwards all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayBackwards(this AudioMixer target) + { + return DOTween.PlayBackwards(target); + } + + /// + /// Plays forward all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayForward(this AudioMixer target) + { + return DOTween.PlayForward(target); + } + + /// + /// Restarts all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens restarted. + /// + public static int DORestart(this AudioMixer target) + { + return DOTween.Restart(target); + } + + /// + /// Rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DORewind(this AudioMixer target) + { + return DOTween.Rewind(target); + } + + /// + /// Smoothly rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DOSmoothRewind(this AudioMixer target) + { + return DOTween.SmoothRewind(target); + } + + /// + /// Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + public static int DOTogglePause(this AudioMixer target) + { + return DOTween.TogglePause(target); + } + + #endregion + + #endregion +#endif + + #endregion + } +} +#endif diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics.cs b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics.cs new file mode 100644 index 0000000..dca71a0 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,212 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTPHYSICS +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration) + .SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static Tweener DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static Tweener DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 0000000..b99b8ab --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,101 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTPHYSICS2D && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +using System; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics2D + { + #region Shortcuts + + #region Rigidbody2D Shortcuts + + /// Tweens a Rigidbody2D's position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMove(this Rigidbody2D target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's X position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveX(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's Y position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveY(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's rotation to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DORotate(this Rigidbody2D target, float endValue, float duration) + { + return DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration) + .SetTarget(target); + } + + #region Special + + /// Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody2D target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, x => target.position = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, x => target.position = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs new file mode 100644 index 0000000..91505c9 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,88 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTSPRITE && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +using System; +using UnityEngine; +using DG.Tweening.Core; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleSprite + { + #region Shortcuts + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this SpriteRenderer target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Material's alpha color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this SpriteRenderer target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a SpriteRenderer's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this SpriteRenderer target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #region Blendables + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this SpriteRenderer target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs new file mode 100644 index 0000000..1eaca57 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs @@ -0,0 +1,570 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTUI && (UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +using System; +using UnityEngine; +using UnityEngine.UI; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUI + { + #region Shortcuts + + #region CanvasGroup + + /// Tweens a CanvasGroup's alpha color to the given value. + /// Also stores the canvasGroup as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this CanvasGroup target, float endValue, float duration) + { + return DOTween.To(() => target.alpha, x => target.alpha = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region Graphic + + /// Tweens an Graphic's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Graphic target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens an Graphic's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Graphic target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens an Image's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Image target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens an Image's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Image target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens an Image's fillAmount to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static Tweener DOFillAmount(this Image target, float endValue, float duration) + { + if (endValue > 1) endValue = 1; + else if (endValue < 0) endValue = 0; + return DOTween.To(() => target.fillAmount, x => target.fillAmount = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens an Image's colors using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Image target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #region LayoutElement + + /// Tweens an LayoutElement's flexibleWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { + target.flexibleWidth = x.x; + target.flexibleHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens an LayoutElement's minWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { + target.minWidth = x.x; + target.minHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens an LayoutElement's preferredWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { + target.preferredWidth = x.x; + target.preferredHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Outline + + /// Tweens a Outline's effectColor to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Outline target, Color endValue, float duration) + { + return DOTween.To(() => target.effectColor, x => target.effectColor = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Outline's effectColor alpha to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Outline target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.effectColor, x => target.effectColor = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a Outline's effectDistance to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOScale(this Outline target, Vector2 endValue, float duration) + { + return DOTween.To(() => target.effectDistance, x => target.effectDistance = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region RectTransform + + /// Tweens a RectTransform's anchoredPosition to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPosX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPosY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchoredPosition3D to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3D(this RectTransform target, Vector3 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(endValue, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, endValue, 0), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D Z to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DZ(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, 0, endValue), duration) + .SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchorMax to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorMax(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchorMax, x => target.anchorMax = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchorMin to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorMin(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchorMin, x => target.anchorMin = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a RectTransform's pivot to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivot(this RectTransform target, Vector2 endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, endValue, duration) + .SetTarget(target); + } + /// Tweens a RectTransform's pivot X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivotX(this RectTransform target, float endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X).SetTarget(target); + } + /// Tweens a RectTransform's pivot Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivotY(this RectTransform target, float endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y).SetTarget(target); + } + + /// Tweens a RectTransform's sizeDelta to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSizeDelta(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.sizeDelta, x => target.sizeDelta = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the RectTransform's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunchAnchorPos(this RectTransform target, Vector2 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.anchoredPosition, x => target.anchoredPosition = x, punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #region Special + + /// Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJumpAnchorPos(this RectTransform target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + + // Separate Y Tween so we can elaborate elapsedPercentage on that insted of on the Sequence + // (in case users add a delay or other elements to the Sequence) + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(()=> startPosY = target.anchoredPosition.y); + s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + s.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector2 pos = target.anchoredPosition; + pos.y += DOVirtual.EasedValue(0, offsetY, s.ElapsedDirectionalPercentage(), Ease.OutQuad); + target.anchoredPosition = pos; + }); + return s; + } + + #endregion + + #endregion + + #region ScrollRect + + /// Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), + x => { + target.horizontalNormalizedPosition = x.x; + target.verticalNormalizedPosition = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's horizontalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOHorizontalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.horizontalNormalizedPosition, x => target.horizontalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOVerticalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.verticalNormalizedPosition, x => target.verticalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Slider + + /// Tweens a Slider's value to the given value. + /// Also stores the Slider as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOValue(this Slider target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.value, x => target.value = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Text target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Text's alpha color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Text target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a Text's text to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static Tweener DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + return DOTween.To(() => target.text, x => target.text = x, endValue, duration) + .SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + } + + #endregion + + #region Blendables + + #region Graphic + + /// Tweens a Graphic's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Graphic as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Graphic target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens a Image's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Image as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Image target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color BY the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Text target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Utils + { + /// + /// Converts the anchoredPosition of the first RectTransform to the second RectTransform, + /// taking into consideration offset, anchors and pivot, and returns the new anchoredPosition + /// + public static Vector2 SwitchToRectTransform(RectTransform from, RectTransform to) + { + Vector2 localPoint; + Vector2 fromPivotDerivedOffset = new Vector2(from.rect.width * 0.5f + from.rect.xMin, from.rect.height * 0.5f + from.rect.yMin); + Vector2 screenP = RectTransformUtility.WorldToScreenPoint(null, from.position); + screenP += fromPivotDerivedOffset; + RectTransformUtility.ScreenPointToLocalPointInRectangle(to, screenP, null, out localPoint); + Vector2 pivotDerivedOffset = new Vector2(to.rect.width * 0.5f + to.rect.xMin, to.rect.height * 0.5f + to.rect.yMin); + return to.anchoredPosition + localPoint - pivotDerivedOffset; + } + } + } +} +#endif diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 0000000..d8d0997 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,252 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Shortcuts/functions that are not strictly related to specific Modules + /// but are available only on some Unity versions + /// + public static class DOTweenModuleUnityVersion + { +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER + #region Unity 4.3 or Newer + + #region Material + + /// Tweens a Material's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + /// Tweens a Material's named color property using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to use + /// The name of the material property to tween (like _Tint or _SpecColor) + /// The duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, string property, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, property, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #endregion +#endif + +#if UNITY_5_3_OR_NEWER || UNITY_2017_0_OR_NEWER + #region CustomYieldInstructions (Unity 5.3 or Newer) + + /// + /// Returns a that waits until the tween is killed or complete. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForCompletion(true); + /// + public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForCompletion(t); + } + + /// + /// Returns a that waits until the tween is killed or rewinded. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForRewind(); + /// + public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForRewind(t); + } + + /// + /// Returns a that waits until the tween is killed. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForKill(); + /// + public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForKill(t); + } + + /// + /// Returns a that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForElapsedLoops(2); + /// + /// Elapsed loops to wait for + public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForElapsedLoops(t, elapsedLoops); + } + + /// + /// Returns a that waits until the tween is killed or has reached the given position (loops included, delays excluded). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForPosition(2.5f); + /// + /// Position (loops included, delays excluded) to wait for + public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForPosition(t, position); + } + + /// + /// Returns a that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForStart(); + /// + public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForStart(t); + } + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + +#if UNITY_5_3_OR_NEWER || UNITY_2017_0_OR_NEWER + public static class DOTweenCYInstruction + { + public class WaitForCompletion : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.IsComplete(); + }} + readonly Tween t; + public WaitForCompletion(Tween tween) + { + t = tween; + } + } + + public class WaitForRewind : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); + }} + readonly Tween t; + public WaitForRewind(Tween tween) + { + t = tween; + } + } + + public class WaitForKill : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active; + }} + readonly Tween t; + public WaitForKill(Tween tween) + { + t = tween; + } + } + + public class WaitForElapsedLoops : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.CompletedLoops() < elapsedLoops; + }} + readonly Tween t; + readonly int elapsedLoops; + public WaitForElapsedLoops(Tween tween, int elapsedLoops) + { + t = tween; + this.elapsedLoops = elapsedLoops; + } + } + + public class WaitForPosition : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.position * (t.CompletedLoops() + 1) < position; + }} + readonly Tween t; + readonly float position; + public WaitForPosition(Tween tween, float position) + { + t = tween; + this.position = position; + } + } + + public class WaitForStart : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.playedOnce; + }} + readonly Tween t; + public WaitForStart(Tween tween) + { + t = tween; + } + } + } +#endif +} diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleUtils.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleUtils.cs new file mode 100644 index 0000000..a768721 --- /dev/null +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,108 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Utility functions that deal with available Modules. + /// Modules defines: + /// - DOTAUDIO + /// - DOTPHYSICS + /// - DOTPHYSICS2D + /// - DOTSPRITE + /// - DOTUI + /// Extra defines set and used for implementation of external assets: + /// - DOTWEEN_TMP ► TextMesh Pro + /// - DOTWEEN_TK2D ► 2D Toolkit + /// + public static class DOTweenModuleUtils + { + static bool _initialized; + + /// + /// Called via Reflection by DOTweenComponent on Awake + /// + public static void Init() + { + if (_initialized) return; + + _initialized = true; + DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Physics + { + // Called via DOTweenExternalCommand callback + public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { +#if DOTPHYSICS + if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; + else trans.rotation = newRot; +#else + trans.rotation = newRot; +#endif + } + + // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached + public static bool HasRigidbody2D(Component target) + { +#if DOTPHYSICS2D + return target.GetComponent() != null; +#else + return false; +#endif + } + + #region Called via Reflection + + + // Called via Reflection by DOTweenPathInspector + // Returns FALSE if the DOTween's Physics Module is disabled, or if there's no rigidbody attached + public static bool HasRigidbody(Component target) + { +#if DOTPHYSICS + return target.GetComponent() != null; +#else + return false; +#endif + } + + // Called via Reflection by DOTweenPath + public static TweenerCore CreateDOTweenPathTween( + MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode + ){ + TweenerCore t; +#if DOTPHYSICS + Rigidbody rBody = tweenRigidbody ? target.GetComponent() : null; + if (tweenRigidbody && rBody != null) { + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } else { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } +#else + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); +#endif + return t; + } + + #endregion + } + } +} From f32507af9557c67b503f76d9ecde7c4119a7b338 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Mon, 16 Jul 2018 12:13:20 +0200 Subject: [PATCH 02/14] Completed Module System usability (upgrade testing required) --- .../DOTween/Core/DOTweenComponent.cs | 8 +- _DOTween.Assembly/DOTween/Core/Utils.cs | 28 ++ .../DOTweenEditor/Core/EditorGUIUtils.cs | 12 +- .../DOTweenEditor/Core/EditorUtils.cs | 45 ++- .../DOTweenEditor/DOTweenEditor.csproj | 2 +- .../DOTweenEditor/DOTweenModulesSetupGUI.cs | 43 +-- .../DOTweenEditor/DOTweenSetup.cs | 224 ++++++++++++++ .../DOTweenEditor/DOTweenSetupMenuItem.cs | 195 ------------ .../DOTweenEditor/DOTweenUtilityWindow.cs | 113 ++++--- _DOTween.Assembly/bin/DOTween43.dll | Bin 9728 -> 0 bytes _DOTween.Assembly/bin/DOTween43.dll.mdb | Bin 1830 -> 0 bytes _DOTween.Assembly/bin/DOTween43.xml | 85 ------ _DOTween.Assembly/bin/DOTween46.dll | Bin 21504 -> 0 bytes _DOTween.Assembly/bin/DOTween46.dll.mdb | Bin 6364 -> 0 bytes _DOTween.Assembly/bin/DOTween46.xml | 279 ------------------ _DOTween.Assembly/bin/DOTween50.dll | Bin 7680 -> 0 bytes _DOTween.Assembly/bin/DOTween50.dll.mdb | Bin 1780 -> 0 bytes _DOTween.Assembly/bin/DOTween50.xml | 163 ---------- .../bin/Modules/DOTweenModuleAudio.cs | 2 +- .../bin/Modules/DOTweenModulePhysics2D.cs | 2 +- .../bin/Modules/DOTweenModuleSprite.cs | 2 +- .../bin/Modules/DOTweenModuleUI.cs | 2 +- .../bin/Modules/DOTweenModuleUnityVersion.cs | 6 +- 23 files changed, 409 insertions(+), 802 deletions(-) create mode 100644 _DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs delete mode 100644 _DOTween.Assembly/DOTweenEditor/DOTweenSetupMenuItem.cs delete mode 100644 _DOTween.Assembly/bin/DOTween43.dll delete mode 100644 _DOTween.Assembly/bin/DOTween43.dll.mdb delete mode 100644 _DOTween.Assembly/bin/DOTween43.xml delete mode 100644 _DOTween.Assembly/bin/DOTween46.dll delete mode 100644 _DOTween.Assembly/bin/DOTween46.dll.mdb delete mode 100644 _DOTween.Assembly/bin/DOTween46.xml delete mode 100644 _DOTween.Assembly/bin/DOTween50.dll delete mode 100644 _DOTween.Assembly/bin/DOTween50.dll.mdb delete mode 100644 _DOTween.Assembly/bin/DOTween50.xml diff --git a/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs b/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs index 9665a2e..7d83471 100644 --- a/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs +++ b/_DOTween.Assembly/DOTween/Core/DOTweenComponent.cs @@ -35,8 +35,12 @@ namespace DG.Tweening.Core _unscaledTime = Time.realtimeSinceStartup; // Initialize DOTweenModuleUtils via Reflection - // TODO DOTweenModuleUtils.Init > verify that this works - MethodInfo mi = Type.GetType("DG.Tweening.DOTweenModuleUtils").GetMethod("Init", BindingFlags.Static | BindingFlags.Public); + Type modules = Utils.GetLooseScriptType("DG.Tweening.DOTweenModuleUtils"); + if (modules == null) { + Debug.LogError("DOTween ► Couldn't load Modules system"); + return; + } + MethodInfo mi = modules.GetMethod("Init", BindingFlags.Static | BindingFlags.Public); mi.Invoke(null, null); } diff --git a/_DOTween.Assembly/DOTween/Core/Utils.cs b/_DOTween.Assembly/DOTween/Core/Utils.cs index 1bc94db..e225613 100644 --- a/_DOTween.Assembly/DOTween/Core/Utils.cs +++ b/_DOTween.Assembly/DOTween/Core/Utils.cs @@ -4,12 +4,19 @@ // License Copyright (c) Daniele Giardini. // This work is subject to the terms at http://dotween.demigiant.com/license.php +using System; +using System.Reflection; using UnityEngine; namespace DG.Tweening.Core { internal static class Utils { + static Assembly[] _loadedAssemblies; + static readonly string[] _defAssembliesToQuery = new[] { // First assemblies to look into before checking all of them + "Assembly-CSharp", "Assembly-CSharp-firstpass" + }; + /// /// Returns a Vector3 with z = 0 /// @@ -44,6 +51,27 @@ namespace DG.Tweening.Core && Mathf.Approximately(a.z, b.z); } + /// + /// Looks for the type withing all possible project assembly names + /// + internal static Type GetLooseScriptType(string typeName) + { + // Check in default assemblies (Unity 2017 and later) + for (int i = 0; i < _defAssembliesToQuery.Length; ++i) { + Type result = Type.GetType(string.Format("{0}, {1}", typeName, _defAssembliesToQuery[i])); + if (result == null) continue; + return result; + } + // Check in all assemblies + if (_loadedAssemblies == null) _loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + for (int i = 0; i < _loadedAssemblies.Length; ++i) { + Type result = Type.GetType(string.Format("{0}, {1}", typeName, _loadedAssemblies[i].GetName())); + if (result == null) continue; + return result; + } + return null; + } + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ diff --git a/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs b/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs index 679da62..60e1790 100644 --- a/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs +++ b/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs @@ -14,7 +14,8 @@ namespace DG.DOTweenEditor.Core public static GUIStyle boldLabelStyle, setupLabelStyle, redLabelStyle, - btStyle, + btBigStyle, + btSetup, btImgStyle, wrapCenterLabelStyle; public static GUIStyle handlelabelStyle, @@ -141,8 +142,13 @@ namespace DG.DOTweenEditor.Core wrapCenterLabelStyle.wordWrap = true; wrapCenterLabelStyle.alignment = TextAnchor.MiddleCenter; - btStyle = new GUIStyle(GUI.skin.button); - btStyle.padding = new RectOffset(0, 0, 10, 10); + btBigStyle = new GUIStyle(GUI.skin.button); + btBigStyle.padding = new RectOffset(0, 0, 10, 10); + + btSetup = new GUIStyle(btBigStyle); + btSetup.padding = new RectOffset(36, 36, 6, 6); + btSetup.wordWrap = true; + btSetup.richText = true; // diff --git a/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs b/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs index 0dd9f66..94a1948 100644 --- a/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs +++ b/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs @@ -81,12 +81,14 @@ namespace DG.DOTweenEditor.Core } /// - /// Returns TRUE if addons setup is required. + /// Returns TRUE if addons setup is required (legacy: now it always returns TRUE). /// public static bool DOTweenSetupRequired() { - if (!Directory.Exists(dotweenDir)) return false; // Can happen if we were deleting DOTween - return Directory.GetFiles(dotweenDir, "*.addon").Length > 0 || hasPro && Directory.GetFiles(dotweenProDir, "*.addon").Length > 0; + return false; + // Legacy method +// if (!Directory.Exists(dotweenDir)) return false; // Can happen if we were deleting DOTween +// return Directory.GetFiles(dotweenDir, "*.addon").Length > 0 || hasPro && Directory.GetFiles(dotweenProDir, "*.addon").Length > 0; } // Deletes the files used in older versions of DOTween where Modules still didn't exist @@ -246,17 +248,19 @@ namespace DG.DOTweenEditor.Core public static void AddGlobalDefine(string id) { bool added = false; + int totGroupsModified = 0; BuildTargetGroup[] targetGroups = (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup)); foreach(BuildTargetGroup btg in targetGroups) { - if (btg == BuildTargetGroup.Unknown) continue; + if (!IsValidBuildTargetGroup(btg)) continue; string defs = PlayerSettings.GetScriptingDefineSymbolsForGroup(btg); string[] singleDefs = defs.Split(';'); if (Array.IndexOf(singleDefs, id) != -1) continue; // Already present added = true; + totGroupsModified++; defs += defs.Length > 0 ? ";" + id : id; PlayerSettings.SetScriptingDefineSymbolsForGroup(btg, defs); } - if (added) Debug.Log("DOTween : added global define " + id); + if (added) Debug.Log(string.Format("DOTween : added global define \"{0}\" to {1} BuildTargetGroups", id, totGroupsModified)); } /// @@ -265,13 +269,15 @@ namespace DG.DOTweenEditor.Core public static void RemoveGlobalDefine(string id) { bool removed = false; + int totGroupsModified = 0; BuildTargetGroup[] targetGroups = (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup)); foreach(BuildTargetGroup btg in targetGroups) { - if (btg == BuildTargetGroup.Unknown) continue; + if (!IsValidBuildTargetGroup(btg)) continue; string defs = PlayerSettings.GetScriptingDefineSymbolsForGroup(btg); string[] singleDefs = defs.Split(';'); if (Array.IndexOf(singleDefs, id) == -1) continue; // Not present removed = true; + totGroupsModified++; _Strb.Length = 0; for (int i = 0; i < singleDefs.Length; ++i) { if (singleDefs[i] == id) continue; @@ -281,7 +287,7 @@ namespace DG.DOTweenEditor.Core PlayerSettings.SetScriptingDefineSymbolsForGroup(btg, _Strb.ToString()); } _Strb.Length = 0; - if (removed) Debug.Log("DOTween : removed global define " + id); + if (removed) Debug.Log(string.Format("DOTween : removed global define \"{0}\" from {1} BuildTargetGroups", id, totGroupsModified)); } /// @@ -296,7 +302,7 @@ namespace DG.DOTweenEditor.Core ? (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup)) : new[] {(BuildTargetGroup)buildTargetGroup}; foreach(BuildTargetGroup btg in targetGroups) { - if (btg == BuildTargetGroup.Unknown) continue; + if (!IsValidBuildTargetGroup(btg)) continue; string defs = PlayerSettings.GetScriptingDefineSymbolsForGroup(btg); string[] singleDefs = defs.Split(';'); if (Array.IndexOf(singleDefs, id) != -1) return true; @@ -358,5 +364,28 @@ namespace DG.DOTweenEditor.Core T data = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(data, adbFilePath); } + + static bool IsValidBuildTargetGroup(BuildTargetGroup group) + { + if (group == BuildTargetGroup.Unknown) return false; + Type moduleManager = Type.GetType("UnityEditor.Modules.ModuleManager, UnityEditor.dll"); +// MethodInfo miIsPlatformSupportLoaded = moduleManager.GetMethod("IsPlatformSupportLoaded", BindingFlags.Static | BindingFlags.NonPublic); + MethodInfo miGetTargetStringFromBuildTargetGroup = moduleManager.GetMethod( + "GetTargetStringFromBuildTargetGroup", BindingFlags.Static | BindingFlags.NonPublic + ); + MethodInfo miGetPlatformName = typeof(PlayerSettings).GetMethod( + "GetPlatformName", BindingFlags.Static | BindingFlags.NonPublic + ); + string targetString = (string)miGetTargetStringFromBuildTargetGroup.Invoke(null, new object[] {group}); + string platformName = (string)miGetPlatformName.Invoke(null, new object[] {group}); + + // Group is valid if at least one betweeen targetString and platformName is not empty. + // This seems to me the safest and more reliant way to check, + // since ModuleManager.IsPlatformSupportLoaded dosn't work well with BuildTargetGroup (only BuildTarget) + bool isValid = !string.IsNullOrEmpty(targetString) || !string.IsNullOrEmpty(platformName); + +// Debug.Log((isValid ? "" : "") + group + " > " + targetString + " / " + platformName + " > " + isValid + "/" + miIsPlatformSupportLoaded.Invoke(null, new object[] {group.ToString()}) + ""); + return isValid; + } } } \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj b/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj index b3deed7..89c81d7 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj @@ -79,7 +79,7 @@ - + diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs index 365d995..3632423 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs @@ -23,14 +23,14 @@ namespace DG.DOTweenEditor public static void Refresh() { - _hasAudioModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_AudioModule); - _hasPhysicsModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_PhysicsModule); - _hasPhysics2DModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_Physics2DModule); - _hasSpriteModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_SpriteModule); - _hasUIModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_UIModule); + _hasAudioModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_AudioModule); + _hasPhysicsModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_PhysicsModule); + _hasPhysics2DModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_Physics2DModule); + _hasSpriteModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_SpriteModule); + _hasUIModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_UIModule); - _hasTextMeshProModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_TextMeshPro); - _hasTk2DModule = EditorUtils.HasGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_TK2D); + _hasTextMeshProModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_TextMeshPro); + _hasTk2DModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_TK2D); } // Returns TRUE if it should be closed @@ -56,29 +56,32 @@ namespace DG.DOTweenEditor GUILayout.Space(2); GUILayout.BeginHorizontal(); - if (GUILayout.Button("Apply")) Apply(); + if (GUILayout.Button("Apply")) { + Apply(); + return true; + } if (GUILayout.Button("Cancel")) return true; GUILayout.EndHorizontal(); - EditorGUILayout.HelpBox( - "NOTE: if you get \"PlayerSettings Validation\" or [CS0618] errors when you press apply don't worry:" + - " it's ok and it allows the setup to work on all possible Unity versions", - MessageType.Warning - ); +// EditorGUILayout.HelpBox( +// "NOTE: if you get \"PlayerSettings Validation\" or [CS0618] errors when you press apply don't worry:" + +// " it's ok and it allows the setup to work on all possible Unity versions", +// MessageType.Warning +// ); return false; } static void Apply() { - ModifyDefineIfChanged(_hasAudioModule, DOTweenSetupMenuItem.GlobalDefine_AudioModule); - ModifyDefineIfChanged(_hasPhysicsModule, DOTweenSetupMenuItem.GlobalDefine_PhysicsModule); - ModifyDefineIfChanged(_hasPhysics2DModule, DOTweenSetupMenuItem.GlobalDefine_Physics2DModule); - ModifyDefineIfChanged(_hasSpriteModule, DOTweenSetupMenuItem.GlobalDefine_SpriteModule); - ModifyDefineIfChanged(_hasUIModule, DOTweenSetupMenuItem.GlobalDefine_UIModule); + ModifyDefineIfChanged(_hasAudioModule, DOTweenSetup.GlobalDefine_AudioModule); + ModifyDefineIfChanged(_hasPhysicsModule, DOTweenSetup.GlobalDefine_PhysicsModule); + ModifyDefineIfChanged(_hasPhysics2DModule, DOTweenSetup.GlobalDefine_Physics2DModule); + ModifyDefineIfChanged(_hasSpriteModule, DOTweenSetup.GlobalDefine_SpriteModule); + ModifyDefineIfChanged(_hasUIModule, DOTweenSetup.GlobalDefine_UIModule); if (EditorUtils.hasPro) { - ModifyDefineIfChanged(_hasTextMeshProModule, DOTweenSetupMenuItem.GlobalDefine_TextMeshPro); - ModifyDefineIfChanged(_hasTk2DModule, DOTweenSetupMenuItem.GlobalDefine_TK2D); + ModifyDefineIfChanged(_hasTextMeshProModule, DOTweenSetup.GlobalDefine_TextMeshPro); + ModifyDefineIfChanged(_hasTk2DModule, DOTweenSetup.GlobalDefine_TK2D); } } diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs new file mode 100644 index 0000000..123b83c --- /dev/null +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs @@ -0,0 +1,224 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2014/09/30 11:59 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +using System; +using System.IO; +using DG.DOTweenEditor.Core; +using UnityEditor; +using UnityEngine; + +namespace DG.DOTweenEditor +{ + /// + /// Not used as menu item anymore, but as a utiity function + /// + static class DOTweenSetup + { + // Modules + public const string GlobalDefine_AudioModule = "DOTAUDIO"; + public const string GlobalDefine_PhysicsModule = "DOTPHYSICS"; + public const string GlobalDefine_Physics2DModule = "DOTPHYSICS2D"; + public const string GlobalDefine_SpriteModule = "DOTSPRITE"; + public const string GlobalDefine_UIModule = "DOTUI"; + // External assets defines + public const string GlobalDefine_TK2D = "DOTWEEN_TK2D"; + public const string GlobalDefine_TextMeshPro = "DOTWEEN_TMP"; + // Legacy (in versions older than 1.2.000) + public const string GlobalDefine_Legacy_NoRigidbody = "DOTWEEN_NORBODY"; + + // Removes all DOTween defines including the ones for external assets + public static void RemoveAllDefines() + { + EditorUtils.RemoveGlobalDefine(GlobalDefine_AudioModule); + EditorUtils.RemoveGlobalDefine(GlobalDefine_PhysicsModule); + EditorUtils.RemoveGlobalDefine(GlobalDefine_Physics2DModule); + EditorUtils.RemoveGlobalDefine(GlobalDefine_SpriteModule); + EditorUtils.RemoveGlobalDefine(GlobalDefine_UIModule); + + EditorUtils.RemoveGlobalDefine(GlobalDefine_Legacy_NoRigidbody); + + EditorUtils.RemoveGlobalDefine(GlobalDefine_TK2D); + EditorUtils.RemoveGlobalDefine(GlobalDefine_TextMeshPro); + } + + // Adds all Unity Modules defines but not the ones for external assets + public static void AddAllUnityDefines() + { + EditorUtils.AddGlobalDefine(GlobalDefine_AudioModule); + EditorUtils.AddGlobalDefine(GlobalDefine_PhysicsModule); + EditorUtils.AddGlobalDefine(GlobalDefine_Physics2DModule); + EditorUtils.AddGlobalDefine(GlobalDefine_SpriteModule); + EditorUtils.AddGlobalDefine(GlobalDefine_UIModule); + } + + + +// // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ +// // ███ LEGACY (before Modules) █████████████████████████████████████████████████████████████████████████████████████████ +// +// const string _Title = "DOTween Setup"; +// +// /// +// /// Setups DOTween +// /// +// /// If TRUE, no warning window appears in case there is no need for setup +// public static void Setup(bool partiallySilent = false) +// { +// bool setupRequired = EditorUtils.DOTweenSetupRequired(); +// if (setupRequired) { +// string msg = "Based on your Unity version (" + Application.unityVersion + ") and eventual plugins, DOTween will now activate additional tween elements, if available."; +// if (!EditorUtility.DisplayDialog(_Title, msg, "Ok", "Cancel")) return; +// } else { +// if (!partiallySilent) { +// string msg = "This project has already been setup for your version of DOTween.\nReimport DOTween if you added new compatible external assets or upgraded your Unity version."; +// if (!EditorUtility.DisplayDialog(_Title, msg, "Force Setup", "Cancel")) return; +// } else return; +// } +// +// string addonsDir = EditorUtils.dotweenDir; +// string proAddonsDir = EditorUtils.dotweenProDir; +// +// EditorUtility.DisplayProgressBar(_Title, "Please wait...", 0.25f); +// +// int totImported = 0; +// // Unity version-based files +// string[] vs = Application.unityVersion.Split("."[0]); +// int majorVersion = Convert.ToInt32(vs[0]); +// int minorVersion = Convert.ToInt32(vs[1]); +// if (majorVersion < 4) { +// SetupComplete(addonsDir, proAddonsDir, totImported); +// return; +// } +// if (majorVersion == 4) { +// if (minorVersion < 3) { +// SetupComplete(addonsDir, proAddonsDir, totImported); +// return; +// } +// totImported += ImportAddons("43", addonsDir); +// if (minorVersion >= 6) totImported += ImportAddons("46", addonsDir); +// } else { +// // 5.x +// totImported += ImportAddons("43", addonsDir); +// totImported += ImportAddons("46", addonsDir); +// totImported += ImportAddons("50", addonsDir); +// } +// // Additional plugin files +// // Pro plugins +// if (EditorUtils.hasPro) { +// // PRO > 2DToolkit shortcuts +// if (Has2DToolkit()) { +// totImported += ImportAddons("Tk2d", proAddonsDir); +// EditorUtils.AddGlobalDefine(GlobalDefine_TK2D); +// } else EditorUtils.RemoveGlobalDefine(GlobalDefine_TK2D); +// // PRO > TextMeshPro shortcuts +// if (HasTextMeshPro()) { +// totImported += ImportAddons("TextMeshPro", proAddonsDir); +// EditorUtils.AddGlobalDefine(GlobalDefine_TextMeshPro); +// } else EditorUtils.RemoveGlobalDefine(GlobalDefine_TextMeshPro); +// } +// +// SetupComplete(addonsDir, proAddonsDir, totImported); +// } +// +// static void SetupComplete(string addonsDir, string proAddonsDir, int totImported) +// { +// int totRemoved = 0; +// +// // Delete all remaining addon files +// string[] leftoverAddonFiles = Directory.GetFiles(addonsDir, "*.addon"); +// if (leftoverAddonFiles.Length > 0) { +// EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional files...", 0.5f); +// foreach (string leftoverAddonFile in leftoverAddonFiles) { +// totRemoved++; +// File.Delete(leftoverAddonFile); +// } +// } +// if (EditorUtils.hasPro) { +// leftoverAddonFiles = Directory.GetFiles(proAddonsDir, "*.addon"); +// if (leftoverAddonFiles.Length > 0) { +// EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional files...", 0.5f); +// foreach (string leftoverAddonFile in leftoverAddonFiles) { +// totRemoved++; +// File.Delete(leftoverAddonFile); +// } +// } +// } +// // Delete all remaining addon meta files +// leftoverAddonFiles = Directory.GetFiles(addonsDir, "*.addon.meta"); +// if (leftoverAddonFiles.Length > 0) { +// EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional meta files...", 0.75f); +// foreach (string leftoverAddonFile in leftoverAddonFiles) { +// File.Delete(leftoverAddonFile); +// } +// } +// if (EditorUtils.hasPro) { +// leftoverAddonFiles = Directory.GetFiles(proAddonsDir, "*.addon.meta"); +// if (leftoverAddonFiles.Length > 0) { +// EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional meta files...", 0.75f); +// foreach (string leftoverAddonFile in leftoverAddonFiles) { +// File.Delete(leftoverAddonFile); +// } +// } +// } +// +// EditorUtility.DisplayProgressBar(_Title, "Refreshing...", 0.9f); +// AssetDatabase.Refresh(); +// +// EditorUtility.ClearProgressBar(); +// EditorUtility.DisplayDialog(_Title, "DOTween setup is now complete." + +// (totImported == 0 ? "" : "\n" + totImported + " additional libraries were imported or updated.") + +// (totRemoved == 0 ? "" : "\n" + totRemoved + " extra files were removed."), +// "Ok" +// ); +// } +// +// // Removes relative .addon extension thus activating files +// static int ImportAddons(string version, string addonsDir) +// { +// bool imported = false; +// string[] filenames = new[] { +// "DOTween" + version + ".dll", +// "DOTween" + version + ".xml", +// "DOTween" + version + ".dll.mdb", +// "DOTween" + version + ".cs" +// }; +// +// foreach (string filename in filenames) { +// string addonFilepath = addonsDir + filename + ".addon"; +// string finalFilepath = addonsDir + filename; +// if (File.Exists(addonFilepath)) { +// // Delete eventual existing final file +// if (File.Exists(finalFilepath)) File.Delete(finalFilepath); +// // Rename addon file to final +// File.Move(addonFilepath, finalFilepath); +// imported = true; +// } +// } +// +// return imported ? 1 : 0; +// } +// +// static bool Has2DToolkit() +// { +// string[] rootDirs = Directory.GetDirectories(EditorUtils.projectPath, "TK2DROOT", SearchOption.AllDirectories); +// if (rootDirs.Length == 0) return false; +// foreach (string rootDir in rootDirs) { +// if (Directory.GetFiles(rootDir, "tk2dSprite.cs", SearchOption.AllDirectories).Length > 0) return true; +// } +// return false; +// } +// static bool HasTextMeshPro() +// { +// string[] rootDirs = Directory.GetDirectories(EditorUtils.projectPath, "TextMesh Pro", SearchOption.AllDirectories); +// if (rootDirs.Length == 0) return false; +// foreach (string rootDir in rootDirs) { +// if (Directory.GetFiles(rootDir, "TextMeshPro.cs", SearchOption.AllDirectories).Length > 0) return true; // Old payed version +// if (Directory.GetFiles(rootDir, "TextMeshPro*.dll", SearchOption.AllDirectories).Length > 0) return true; // New free version +// } +// return false; +// } + } +} \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenSetupMenuItem.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenSetupMenuItem.cs deleted file mode 100644 index bb930b2..0000000 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenSetupMenuItem.cs +++ /dev/null @@ -1,195 +0,0 @@ -// Author: Daniele Giardini - http://www.demigiant.com -// Created: 2014/09/30 11:59 -// -// License Copyright (c) Daniele Giardini. -// This work is subject to the terms at http://dotween.demigiant.com/license.php - -using System; -using System.IO; -using DG.DOTweenEditor.Core; -using UnityEditor; -using UnityEngine; - -namespace DG.DOTweenEditor -{ - /// - /// Not used as menu item anymore, but as a utiity function - /// - static class DOTweenSetupMenuItem - { - // TODO Remove old defines and add new ones - // Modules - public const string GlobalDefine_AudioModule = "DOTAUDIO"; - public const string GlobalDefine_PhysicsModule = "DOTPHYSICS"; - public const string GlobalDefine_Physics2DModule = "DOTPHYSICS2D"; - public const string GlobalDefine_SpriteModule = "DOTSPRITE"; - public const string GlobalDefine_UIModule = "DOTUI"; - // External assets defines - public const string GlobalDefine_TK2D = "DOTWEEN_TK2D"; - public const string GlobalDefine_TextMeshPro = "DOTWEEN_TMP"; - // Legacy (in versions older than 1.2.000) - public const string GlobalDefine_Legacy_NoRigidbody = "DOTWEEN_NORBODY"; - - const string _Title = "DOTween Setup"; - - /// - /// Setups DOTween - /// - /// If TRUE, no warning window appears in case there is no need for setup - public static void Setup(bool partiallySilent = false) - { - bool setupRequired = EditorUtils.DOTweenSetupRequired(); - if (setupRequired) { - string msg = "Based on your Unity version (" + Application.unityVersion + ") and eventual plugins, DOTween will now activate additional tween elements, if available."; - if (!EditorUtility.DisplayDialog(_Title, msg, "Ok", "Cancel")) return; - } else { - if (!partiallySilent) { - string msg = "This project has already been setup for your version of DOTween.\nReimport DOTween if you added new compatible external assets or upgraded your Unity version."; - if (!EditorUtility.DisplayDialog(_Title, msg, "Force Setup", "Cancel")) return; - } else return; - } - - string addonsDir = EditorUtils.dotweenDir; - string proAddonsDir = EditorUtils.dotweenProDir; - - EditorUtility.DisplayProgressBar(_Title, "Please wait...", 0.25f); - - int totImported = 0; - // Unity version-based files - string[] vs = Application.unityVersion.Split("."[0]); - int majorVersion = Convert.ToInt32(vs[0]); - int minorVersion = Convert.ToInt32(vs[1]); - if (majorVersion < 4) { - SetupComplete(addonsDir, proAddonsDir, totImported); - return; - } - if (majorVersion == 4) { - if (minorVersion < 3) { - SetupComplete(addonsDir, proAddonsDir, totImported); - return; - } - totImported += ImportAddons("43", addonsDir); - if (minorVersion >= 6) totImported += ImportAddons("46", addonsDir); - } else { - // 5.x - totImported += ImportAddons("43", addonsDir); - totImported += ImportAddons("46", addonsDir); - totImported += ImportAddons("50", addonsDir); - } - // Additional plugin files - // Pro plugins - if (EditorUtils.hasPro) { - // PRO > 2DToolkit shortcuts - if (Has2DToolkit()) { - totImported += ImportAddons("Tk2d", proAddonsDir); - EditorUtils.AddGlobalDefine(GlobalDefine_TK2D); - } else EditorUtils.RemoveGlobalDefine(GlobalDefine_TK2D); - // PRO > TextMeshPro shortcuts - if (HasTextMeshPro()) { - totImported += ImportAddons("TextMeshPro", proAddonsDir); - EditorUtils.AddGlobalDefine(GlobalDefine_TextMeshPro); - } else EditorUtils.RemoveGlobalDefine(GlobalDefine_TextMeshPro); - } - - SetupComplete(addonsDir, proAddonsDir, totImported); - } - - static void SetupComplete(string addonsDir, string proAddonsDir, int totImported) - { - int totRemoved = 0; - - // Delete all remaining addon files - string[] leftoverAddonFiles = Directory.GetFiles(addonsDir, "*.addon"); - if (leftoverAddonFiles.Length > 0) { - EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional files...", 0.5f); - foreach (string leftoverAddonFile in leftoverAddonFiles) { - totRemoved++; - File.Delete(leftoverAddonFile); - } - } - if (EditorUtils.hasPro) { - leftoverAddonFiles = Directory.GetFiles(proAddonsDir, "*.addon"); - if (leftoverAddonFiles.Length > 0) { - EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional files...", 0.5f); - foreach (string leftoverAddonFile in leftoverAddonFiles) { - totRemoved++; - File.Delete(leftoverAddonFile); - } - } - } - // Delete all remaining addon meta files - leftoverAddonFiles = Directory.GetFiles(addonsDir, "*.addon.meta"); - if (leftoverAddonFiles.Length > 0) { - EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional meta files...", 0.75f); - foreach (string leftoverAddonFile in leftoverAddonFiles) { - File.Delete(leftoverAddonFile); - } - } - if (EditorUtils.hasPro) { - leftoverAddonFiles = Directory.GetFiles(proAddonsDir, "*.addon.meta"); - if (leftoverAddonFiles.Length > 0) { - EditorUtility.DisplayProgressBar(_Title, "Removing " + leftoverAddonFiles.Length + " unused additional meta files...", 0.75f); - foreach (string leftoverAddonFile in leftoverAddonFiles) { - File.Delete(leftoverAddonFile); - } - } - } - - EditorUtility.DisplayProgressBar(_Title, "Refreshing...", 0.9f); - AssetDatabase.Refresh(); - - EditorUtility.ClearProgressBar(); - EditorUtility.DisplayDialog(_Title, "DOTween setup is now complete." + - (totImported == 0 ? "" : "\n" + totImported + " additional libraries were imported or updated.") + - (totRemoved == 0 ? "" : "\n" + totRemoved + " extra files were removed."), - "Ok" - ); - } - - // Removes relative .addon extension thus activating files - static int ImportAddons(string version, string addonsDir) - { - bool imported = false; - string[] filenames = new[] { - "DOTween" + version + ".dll", - "DOTween" + version + ".xml", - "DOTween" + version + ".dll.mdb", - "DOTween" + version + ".cs" - }; - - foreach (string filename in filenames) { - string addonFilepath = addonsDir + filename + ".addon"; - string finalFilepath = addonsDir + filename; - if (File.Exists(addonFilepath)) { - // Delete eventual existing final file - if (File.Exists(finalFilepath)) File.Delete(finalFilepath); - // Rename addon file to final - File.Move(addonFilepath, finalFilepath); - imported = true; - } - } - - return imported ? 1 : 0; - } - - static bool Has2DToolkit() - { - string[] rootDirs = Directory.GetDirectories(EditorUtils.projectPath, "TK2DROOT", SearchOption.AllDirectories); - if (rootDirs.Length == 0) return false; - foreach (string rootDir in rootDirs) { - if (Directory.GetFiles(rootDir, "tk2dSprite.cs", SearchOption.AllDirectories).Length > 0) return true; - } - return false; - } - static bool HasTextMeshPro() - { - string[] rootDirs = Directory.GetDirectories(EditorUtils.projectPath, "TextMesh Pro", SearchOption.AllDirectories); - if (rootDirs.Length == 0) return false; - foreach (string rootDir in rootDirs) { - if (Directory.GetFiles(rootDir, "TextMeshPro.cs", SearchOption.AllDirectories).Length > 0) return true; // Old payed version - if (Directory.GetFiles(rootDir, "TextMeshPro*.dll", SearchOption.AllDirectories).Length > 0) return true; // New free version - } - return false; - } - } -} \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs index 4241875..b05291e 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs @@ -30,20 +30,19 @@ namespace DG.DOTweenEditor break; } if (!containsDOTween) return AssetDeleteResult.DidNotDelete; - // DOTween found: remove scripting define symbols - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_AudioModule); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_PhysicsModule); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_Physics2DModule); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_SpriteModule); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_UIModule); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_TK2D); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_TextMeshPro); - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_Legacy_NoRigidbody); + // DOTween is being deleted: deal with it // Remove EditorPrefs EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.Id); EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.IdPro); + // Remove scripting define symbols + DOTweenSetup.RemoveAllDefines(); // - EditorUtility.DisplayDialog("DOTween Deleted", "DOTween was deleted and all of its scripting define symbols removed.\nThis might show an error depending on your previous setup. If this happens, please close and reopen Unity or reimport DOTween.", "Ok"); + EditorUtility.DisplayDialog("DOTween Deleted", + "DOTween was deleted and all of its scripting define symbols removed." + + "\n\nThis might show an error depending on your previous setup." + + " If this happens, please close and reopen Unity or reimport DOTween.", + "Ok" + ); return AssetDeleteResult.DidNotDelete; } } @@ -64,22 +63,30 @@ namespace DG.DOTweenEditor // Delete old DemiLib configuration EditorUtils.DeleteOldDemiLibCore(); // Remove old NoRigidbody define - EditorUtils.RemoveGlobalDefine(DOTweenSetupMenuItem.GlobalDefine_Legacy_NoRigidbody); + EditorUtils.RemoveGlobalDefine(DOTweenSetup.GlobalDefine_Legacy_NoRigidbody); // - bool openSetupDialog = EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.Id) != Application.dataPath + DOTween.Version - || EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.IdPro) != Application.dataPath + EditorUtils.proVersion; - if (openSetupDialog) { - Debug.Log("Should open setup dialogue"); + bool differentCoreVersion = EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.Id) != Application.dataPath + DOTween.Version; + bool differentProVersion = EditorUtils.hasPro && EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.IdPro) != Application.dataPath + EditorUtils.proVersion; + bool setupRequired = differentCoreVersion || differentProVersion; + if (setupRequired) { _setupDialogRequested = true; EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.Id, Application.dataPath + DOTween.Version); - EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.IdPro, Application.dataPath + EditorUtils.proVersion); - EditorUtility.DisplayDialog("DOTween", "New version of DOTween imported.\n\nSelect \"Tools > Demigiant > DOTween Utility Panel\" and press \"Setup DOTween...\" in the window that opens to set it up.", "Ok"); -// EditorUtility.DisplayDialog("DOTween", "New version of DOTween imported.\n\nUse the Setup Panel to add/remove its Modules.", "Ok"); + if (EditorUtils.hasPro) EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.IdPro, Application.dataPath + EditorUtils.proVersion); +// DOTweenSetup.AddAllUnityDefines(); + EditorUtility.DisplayDialog("DOTween", + differentCoreVersion + ? "New version of DOTween imported." + + "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove Modules." + : "New version of DOTween Pro imported." + + " \n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove external Modules (TextMesh Pro/2DToolkit/etc).", + "Ok" + ); + DOTweenUtilityWindow.Open(); // Opening window after a postProcess doesn't work on Unity 3 so check that - string[] vs = Application.unityVersion.Split("."[0]); - int majorVersion = System.Convert.ToInt32(vs[0]); - if (majorVersion >= 4) EditorUtils.DelayedCall(0.5f, DOTweenUtilityWindow.Open); - EditorUtils.DelayedCall(8, ()=> _setupDialogRequested = false); +// string[] vs = Application.unityVersion.Split("."[0]); +// int majorVersion = System.Convert.ToInt32(vs[0]); +// if (majorVersion >= 4) EditorUtils.DelayedCall(0.5f, DOTweenUtilityWindow.Open); +// EditorUtils.DelayedCall(8, ()=> _setupDialogRequested = false); } } } @@ -96,6 +103,7 @@ namespace DG.DOTweenEditor public const string IdPro = "DOTweenProVersion"; static readonly float _HalfBtSize = _WinSize.x * 0.5f - 6; + bool _initialized; DOTweenSettings _src; Texture2D _headerImg, _footerImg; Vector2 _headerSize, _footerSize; @@ -119,6 +127,26 @@ namespace DG.DOTweenEditor EditorPrefs.SetString(IdPro, EditorUtils.proVersion); } + // Returns TRUE if DOTween is initialized + bool Init() + { + if (_initialized) return true; + + if (_headerImg == null) { + _headerImg = AssetDatabase.LoadAssetAtPath("Assets/" + EditorUtils.editorADBDir + "Imgs/Header.jpg", typeof(Texture2D)) as Texture2D; + if (_headerImg == null) return false; // DOTween imported for the first time and images not yet imported + EditorUtils.SetEditorTexture(_headerImg, FilterMode.Bilinear, 512); + _headerSize.x = _WinSize.x; + _headerSize.y = (int)((_WinSize.x * _headerImg.height) / _headerImg.width); + _footerImg = AssetDatabase.LoadAssetAtPath("Assets/" + EditorUtils.editorADBDir + (EditorGUIUtility.isProSkin ? "Imgs/Footer.png" : "Imgs/Footer_dark.png"), typeof(Texture2D)) as Texture2D; + EditorUtils.SetEditorTexture(_footerImg, FilterMode.Bilinear, 256); + _footerSize.x = _WinSize.x; + _footerSize.y = (int)((_WinSize.x * _footerImg.height) / _footerImg.width); + } + _initialized = true; + return true; + } + // =================================================================================== // UNITY METHODS --------------------------------------------------------------------- @@ -135,16 +163,7 @@ namespace DG.DOTweenEditor if (EditorUtils.hasPro) _innerTitle += "\nDOTweenPro v" + EditorUtils.proVersion; else _innerTitle += "\nDOTweenPro not installed"; - if (_headerImg == null) { - _headerImg = AssetDatabase.LoadAssetAtPath("Assets/" + EditorUtils.editorADBDir + "Imgs/Header.jpg", typeof(Texture2D)) as Texture2D; - EditorUtils.SetEditorTexture(_headerImg, FilterMode.Bilinear, 512); - _headerSize.x = _WinSize.x; - _headerSize.y = (int)((_WinSize.x * _headerImg.height) / _headerImg.width); - _footerImg = AssetDatabase.LoadAssetAtPath("Assets/" + EditorUtils.editorADBDir + (EditorGUIUtility.isProSkin ? "Imgs/Footer.png" : "Imgs/Footer_dark.png"), typeof(Texture2D)) as Texture2D; - EditorUtils.SetEditorTexture(_footerImg, FilterMode.Bilinear, 256); - _footerSize.x = _WinSize.x; - _footerSize.y = (int)((_WinSize.x * _footerImg.height) / _footerImg.width); - } + Init(); _setupRequired = EditorUtils.DOTweenSetupRequired(); } @@ -156,6 +175,11 @@ namespace DG.DOTweenEditor void OnGUI() { + if (!Init()) { + GUILayout.Space(8); + GUILayout.Label("Completing import process..."); + return; + } Connect(); EditorGUIUtils.SetGUIStyles(_footerSize); @@ -202,12 +226,19 @@ namespace DG.DOTweenEditor GUILayout.EndVertical(); GUI.backgroundColor = Color.white; } else GUILayout.Space(8); - if (GUILayout.Button("Setup DOTween...", EditorGUIUtils.btStyle)) { -// DOTweenSetupMenuItem.Setup(); + GUI.color = Color.green; + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Setup DOTween...\n(add/remove Modules)", EditorGUIUtils.btSetup)) { +// DOTweenSetup.Setup(); // _setupRequired = EditorUtils.DOTweenSetupRequired(); DOTweenModulesSetupGUI.Refresh(); _isModulesMode = true; } + GUILayout.FlexibleSpace(); + GUI.color = Color.white; + GUILayout.EndHorizontal(); + GUILayout.Space(8); // EditorGUILayout.HelpBox( // "NOTE: if you get \"Requested build target group (N) doesn't exist\" or [CS0618] errors during the setup don't worry: it's ok and allows the setup to work on all possible Unity versions", @@ -215,12 +246,16 @@ namespace DG.DOTweenEditor // ); GUILayout.BeginHorizontal(); - if (GUILayout.Button("Documentation", EditorGUIUtils.btStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/documentation.php"); - if (GUILayout.Button("Support", EditorGUIUtils.btStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/support.php"); + if (GUILayout.Button("Website", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/index.php"); + if (GUILayout.Button("Get Started", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/getstarted.php"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - if (GUILayout.Button("Changelog", EditorGUIUtils.btStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/download.php"); - if (GUILayout.Button("Check Updates", EditorGUIUtils.btStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/download.php?v=" + DOTween.Version); + if (GUILayout.Button("Documentation", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/documentation.php"); + if (GUILayout.Button("Support", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/support.php"); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Changelog", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/download.php"); + if (GUILayout.Button("Check Updates", EditorGUIUtils.btBigStyle, GUILayout.Width(_HalfBtSize))) Application.OpenURL("http://dotween.demigiant.com/download.php?v=" + DOTween.Version); GUILayout.EndHorizontal(); GUILayout.Space(14); if (GUILayout.Button(_footerImg, EditorGUIUtils.btImgStyle)) Application.OpenURL("http://www.demigiant.com/"); @@ -229,7 +264,7 @@ namespace DG.DOTweenEditor void DrawPreferencesGUI() { GUILayout.Space(40); - if (GUILayout.Button("Reset", EditorGUIUtils.btStyle)) { + if (GUILayout.Button("Reset", EditorGUIUtils.btBigStyle)) { // Reset to original defaults _src.useSafeMode = true; _src.showUnityEditorReport = false; diff --git a/_DOTween.Assembly/bin/DOTween43.dll b/_DOTween.Assembly/bin/DOTween43.dll deleted file mode 100644 index 590ab8e4d337ddf6277e6f564457986d7ef0ffd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9728 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 Mk^L6=e_w(B1Y7P-zW@LL diff --git a/_DOTween.Assembly/bin/DOTween43.dll.mdb b/_DOTween.Assembly/bin/DOTween43.dll.mdb deleted file mode 100644 index eb000af284ddd351d74945d8498e8639d37d3dd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1830 zcmbVNZDrhJd50C?|bbZJlLlc)p<7G>3z89dcK#a8n4PdL<~F?zjd(C z6Qs_8zJ&JyVaiA3iDw9ph&KQQSRa@h3M>wV1JMo9m{lDLhu>ZLcG=3pu)nk@7%UEk z!b_}}wV^T=i{f2iS=q*DG>&jr%qX($XjOUa!;my)7lwlCt(runHc`AO5sllGR@|Ol zI3r@$<_50zcl^AhY3SEdHF@I9j_;eV4gAxX*i$plx|_-gi5Y0bY{s+*My#=!!eh}m zCBbCuTt96=6ug1PTHR_>8-N)0T1og8nD-+EY{MDyib`-Y}M#T?c%d1riK&$ z)@Zx;W1OT>Mx389VtP2S$xElb9iu0fcpOc~D#@*)vG*A*XA%Eu`2Y;GtMo$bEi zr9SV#=;f@8YQKp-()u{@oj2>$u6KzmfQXkk<$87cQ~&ERYfz{EbmyW#RM3gqW6)>D z=i=UYWTg!{YJ4TFEl$*T2AwocN$V5lc;^l3GJcX?gX{fb&~@X6^l*GcYj+LmGyauc zo9lgK(k`>kbVrq5%A|wlA?bCvao?KMY#x_hr|Y$w)M0i$?sc1V#q5E{h*w*CnA!54s+pl^e30+XO0g6{$N$I-IUxDMn(=LrU;K)(r|2~3490SADWp~K)6z%=N3 b@K)dz=tgh~$b&uy{sF*pIsbZs`+@%fLzRLR diff --git a/_DOTween.Assembly/bin/DOTween43.xml b/_DOTween.Assembly/bin/DOTween43.xml deleted file mode 100644 index f0efe2b..0000000 --- a/_DOTween.Assembly/bin/DOTween43.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - DOTween43 - - - - - Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween43 methods, require Unity 4.3 or later. - - - - Tweens a Material's color using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens a Material's named color property using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to use - The name of the material property to tween (like _Tint or _SpecColor) - The duration of the tween - - - Tweens a SpriteRenderer's color to the given value. - Also stores the spriteRenderer as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Material's alpha color to the given value. - Also stores the spriteRenderer as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a SpriteRenderer's color using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens a Rigidbody2D's position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's X position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's Y position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's rotation to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. - IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a SpriteRenderer's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - diff --git a/_DOTween.Assembly/bin/DOTween46.dll b/_DOTween.Assembly/bin/DOTween46.dll deleted file mode 100644 index 79daf788f55c9929e95fc08205fc313d0c403ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 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 diff --git a/_DOTween.Assembly/bin/DOTween46.dll.mdb b/_DOTween.Assembly/bin/DOTween46.dll.mdb deleted file mode 100644 index 07e780077ab5392a30b682de78bb5de429b76bd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6364 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 diff --git a/_DOTween.Assembly/bin/DOTween46.xml b/_DOTween.Assembly/bin/DOTween46.xml deleted file mode 100644 index 4c0ff32..0000000 --- a/_DOTween.Assembly/bin/DOTween46.xml +++ /dev/null @@ -1,279 +0,0 @@ - - - - DOTween46 - - - - - Various utils that require Unity 4.6 or later - - - - - Converts the anchoredPosition of the first RectTransform to the second RectTransform, - taking into consideration offset, anchors and pivot, and returns the new anchoredPosition - - - - - Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween46 methods, require Unity 4.6 or later. - - - - Tweens a CanvasGroup's alpha color to the given value. - Also stores the canvasGroup as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Graphic's color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Graphic's alpha color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's alpha color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's fillAmount to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reach (0 to 1)The duration of the tween - - - Tweens an Image's colors using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens an LayoutElement's flexibleWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens an LayoutElement's minWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens an LayoutElement's preferredWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Outline's effectColor to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Outline's effectColor alpha to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Outline's effectDistance to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's anchoredPosition to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D Z to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchorMax to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchorMin to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's pivot to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's pivot X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's pivot Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's sizeDelta to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one - as if it was connected to the starting position via an elastic. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The direction and strength of the punch (added to the RectTransform's current position) - The duration of the tween - Indicates how much will the punch vibrate - Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. - 1 creates a full oscillation between the punch direction and the opposite direction, - while 0 oscillates only between the punch and the start position - If TRUE the tween will smoothly snap all values to integers - - - Shakes a RectTransform's anchoredPosition with the given values. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The duration of the tween - The shake strength - Indicates how much will the shake vibrate - Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). - Setting it to 0 will shake along a single direction. - If TRUE the tween will smoothly snap all values to integers - If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not - - - Shakes a RectTransform's anchoredPosition with the given values. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The duration of the tween - The shake strength on each axis - Indicates how much will the shake vibrate - Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). - Setting it to 0 will shake along a single direction. - If TRUE the tween will smoothly snap all values to integers - If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not - - - Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's horizontalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's verticalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Slider's value to the given value. - Also stores the Slider as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Text's color to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Text's alpha color to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Text's text to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end string to tween toThe duration of the tween - If TRUE (default), rich text will be interpreted correctly while animated, - otherwise all tags will be considered as normal text - The type of scramble mode to use, if any - A string containing the characters to use for scrambling. - Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. - Leave it to NULL (default) to use default ones - - - Tweens a Graphic's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Graphic as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - Tweens a Image's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Image as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - Tweens a Text's color BY the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Text as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - diff --git a/_DOTween.Assembly/bin/DOTween50.dll b/_DOTween.Assembly/bin/DOTween50.dll deleted file mode 100644 index d8acdcd51f9826ae3497791f3ab671de348477d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 diff --git a/_DOTween.Assembly/bin/DOTween50.dll.mdb b/_DOTween.Assembly/bin/DOTween50.dll.mdb deleted file mode 100644 index 47d825a71f6178a169cb146ca5c59c63109888d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmb`Ik580!9LGP;-96vuc}@x|0#Xspi_8_G=mv(RyF^!|SDxo7?Xe#iUXZ(g78 zb9|of_xn7gwXMH9E$4FaY)TBhYv+ahUxyd%_4K_IZ5dZP%7|8@)axL!!!P3ZOgPWo zW}b>%AQQzT1at7~_!z@b;TmLvsy*|3p2a@DN3Yk7&}yIG|MJq(@``-FyKJG?TkQ4u zOF~AdzQ!D+2N^<2KqIabG-iNy`5)G}YsL_q8(qJSSt_wu@ zvLx5cU2zXZi-(R&a~2Q8mwYmM;#}>S*v|D?{U2Pt{Kxd18Q0dF_00|wwiR249hWH8 z?R6DBSK#*>p+Kb($&)0B?{F$T&-Y$hph5NwTbe|u9Cpx2M;{IjhW%-QE;;Bo$L}U8 z6zCrZ{p+}6BDX->WQxh#aiaKz%LHnY>44m9qE`j_T&52Bh>5BM>XxZT{>nr_fd*vy zLB3$3wE|s{X+-|hL>nc+?#lF^JZ7?3g6(3on>8d3vb{0EK4jF!+D+D+V4aNOtc$bc zYGjkcW}hIvu;ke+Fk3&Puh~H2A{3so3fCB2XE&@ufmPV7&=zH@B31xblvsskg<6zW ztFXc0`cIBMRMC#u8tE-Z^Se zX^;9oe|(cSHkllD`*>cox2e>we#VQ$;iFQKo8vE4>Q;L!oGs=Ks`R6J(Sj~>?sb)J zs5dQ~E9P#}XtTD3zc0l1=9_c(YP3(=Z{hi3Zihxkw4)YuW3Fi8lt#T;pT(Do$vn(C&JU9 z6y%xk>CgknZg>&&AaWIa1(b^XHhc{<9=Q?z9`q3Mr|^T&!^pkxFQ7+|hvDa;bYu-T zVS_S|C&AMpy#HAtd=~T=@-p}$Xacehe;t~L{1!Y6O+wxU-wI_Re*|xWCL^DKAA_=y z&%;kcQ;@H~e}SeV+pu_lBR`Iuft(6WL(YY}Anb+sABCl&JBekY4S<}x06BjWAGjr& G0skLprD4 - - - DOTween50 - - - - - Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween50 methods, require Unity 5.0 or later. - - - - Tweens an AudioMixer's exposed float to the given value. - Also stores the AudioMixer as the tween's target so it can be used for filtered operations. - Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. - Name given to the exposed float to set - The end value to reachThe duration of the tween - - - - Completes all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens completed - (meaning the tweens that don't have infinite loops and were not already complete) - - For Sequences only: if TRUE also internal Sequence callbacks will be fired, - otherwise they will be ignored - - - - Kills all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens killed. - - If TRUE completes the tween before killing it - - - - Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens flipped. - - - - - Sends to the given position all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens involved. - - Time position to reach - (if higher than the whole tween duration the tween will simply reach its end) - If TRUE will play the tween after reaching the given position, otherwise it will pause it - - - - Pauses all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens paused. - - - - - Plays all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Plays backwards all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Plays forward all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Restarts all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens restarted. - - - - - Rewinds all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens rewinded. - - - - - Smoothly rewinds all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens rewinded. - - - - - Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens involved. - - - - - Methods that extend Tween objects and allow to control or get data from them. - These require at least Unity 5.3 - - - - - Returns a that waits until the tween is killed or complete. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForCompletion(true); - - - - - Returns a that waits until the tween is killed or rewinded. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForRewind(); - - - - - Returns a that waits until the tween is killed. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForKill(); - - - - - Returns a that waits until the tween is killed or has gone through the given amount of loops. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForElapsedLoops(2); - - Elapsed loops to wait for - - - - Returns a that waits until the tween is killed or has reached the given position (loops included, delays excluded). - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForPosition(2.5f); - - Position (loops included, delays excluded) to wait for - - - - Returns a that waits until the tween is killed or started - (meaning when the tween is set in a playing state the first time, after any eventual delay). - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForStart(); - - - - diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs index ec2be84..c9b77af 100644 --- a/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleAudio.cs @@ -35,7 +35,7 @@ namespace DG.Tweening #endregion -#if UNITY_5 || UNITY_2017_0_OR_NEWER +#if UNITY_5 || UNITY_2017_1_OR_NEWER #region AudioMixer (Unity 5 or Newer) /// Tweens an AudioMixer's exposed float to the given value. diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs index b99b8ab..ba8625f 100644 --- a/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs +++ b/_DOTween.Assembly/bin/Modules/DOTweenModulePhysics2D.cs @@ -1,7 +1,7 @@ // Author: Daniele Giardini - http://www.demigiant.com // Created: 2018/07/13 -#if DOTPHYSICS2D && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +#if DOTPHYSICS2D && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) using System; using UnityEngine; diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs index 91505c9..21f5d60 100644 --- a/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleSprite.cs @@ -1,7 +1,7 @@ // Author: Daniele Giardini - http://www.demigiant.com // Created: 2018/07/13 -#if DOTSPRITE && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +#if DOTSPRITE && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) using System; using UnityEngine; using DG.Tweening.Core; diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs index 1eaca57..de800d5 100644 --- a/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleUI.cs @@ -1,7 +1,7 @@ // Author: Daniele Giardini - http://www.demigiant.com // Created: 2018/07/13 -#if DOTUI && (UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER) +#if DOTUI && (UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) using System; using UnityEngine; using UnityEngine.UI; diff --git a/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs b/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs index d8d0997..751a0a7 100644 --- a/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs +++ b/_DOTween.Assembly/bin/Modules/DOTweenModuleUnityVersion.cs @@ -14,7 +14,7 @@ namespace DG.Tweening /// public static class DOTweenModuleUnityVersion { -#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_0_OR_NEWER +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER #region Unity 4.3 or Newer #region Material @@ -71,7 +71,7 @@ namespace DG.Tweening #endregion #endif -#if UNITY_5_3_OR_NEWER || UNITY_2017_0_OR_NEWER +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER #region CustomYieldInstructions (Unity 5.3 or Newer) /// @@ -169,7 +169,7 @@ namespace DG.Tweening // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ -#if UNITY_5_3_OR_NEWER || UNITY_2017_0_OR_NEWER +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER public static class DOTweenCYInstruction { public class WaitForCompletion : CustomYieldInstruction From 58e64e9f7707f3fd8dab969fbcbc6664df030149 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Mon, 16 Jul 2018 13:35:15 +0200 Subject: [PATCH 03/14] - BAT changes --- _DOTween.Assembly/PostBuild_DOTween.bat | 31 ++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat index 275d745..4a6b0b3 100644 --- a/_DOTween.Assembly/PostBuild_DOTween.bat +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -44,29 +44,28 @@ set CopyToDirCompatibilityTests=%1..\UnityCompatibilityTests.Unity35\Assets\Demi set CopyToDirExtPluginsTests=%1..\ExternalPluginsTestsAndExamples.Unity5\Assets\Demigiant\%5%SubDir% set CopyToDirModulesTest=%1..\ModulesTest.Unity2018\Assets\Demigiant\%5%SubDir% -:: For now build only to Modules test project +:: Modules test project echo ::: Exporting from %CopyFromDir% to %CopyToDirModulesTest% -echo ::: f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E - -exit /B - +echo f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E +:: exit /B +:: bin.Global echo ::: Exporting from %CopyFromDir% to %CopyToDir% -echo ::: f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E - +echo f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E +:: bin.Global_no_meta echo ::: Exporting from %CopyFromDir% to %CopyToDirNoMeta% -echo ::: f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E - +echo f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E +:: UnityTests.Unity4 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnityTests% -echo ::: f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E - +echo f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E +:: UnityTests.Unity5 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% -echo ::: f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E - +echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E +:: UnityCompatibilityTests.Unity35 echo ::: Exporting from %CopyFromDir% to %CopyToDirCompatibilityTests% -echo ::: f | xcopy %CopyFromDir% %CopyToDirCompatibilityTests% /Y /I /E - +echo f | xcopy %CopyFromDir% %CopyToDirCompatibilityTests% /Y /I /E +:: ExternalPluginsTestsAndExamples.Unity5 echo ::: Exporting from %CopyFromDir% to %CopyToDirExtPluginsTests% -echo ::: f | xcopy %CopyFromDir% %CopyToDirExtPluginsTests% /Y /I /E +echo f | xcopy %CopyFromDir% %CopyToDirExtPluginsTests% /Y /I /E echo : echo : From 23982b5631b8bcb5c2f1fc23cd2c013e5e9b76ca Mon Sep 17 00:00:00 2001 From: Demigiant Date: Mon, 16 Jul 2018 13:57:46 +0200 Subject: [PATCH 04/14] - minor --- .../Assets/Demigiant/DemiLib/Core/DemiLib.pdb.meta | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/DemiLib.pdb.meta diff --git a/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/DemiLib.pdb.meta b/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/DemiLib.pdb.meta deleted file mode 100644 index d054dc2..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/DemiLib.pdb.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9bb63fd0cf03cdc4d9e59294bc161dfc -timeCreated: 1452683141 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: From 927c38fa6167e0949e9e68873dc2a228f026ef21 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Mon, 16 Jul 2018 14:14:54 +0200 Subject: [PATCH 05/14] - minor --- .../DemiLib/Core/Editor/Imgs/project.meta | 7 +++++++ .../ProjectSettings/ProjectSettings.asset | Bin 55446 -> 55458 bytes .../DOTweenEditor/DOTweenSetup.cs | 6 ++++++ .../DOTweenEditor/DOTweenUtilityWindow.cs | 8 ++++++-- _DOTween.Assembly/PostBuild_DOTween.bat | 8 ++++---- 5 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/Editor/Imgs/project.meta diff --git a/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/Editor/Imgs/project.meta b/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/Editor/Imgs/project.meta new file mode 100644 index 0000000..3f2cd9d --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DemiLib/Core/Editor/Imgs/project.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1fa36039328c18e48808faaf6a351f48 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/ProjectSettings/ProjectSettings.asset b/UnityTests.Unity5/ProjectSettings/ProjectSettings.asset index 336425d64350ea9b02ea0d351a2c126c93ddc3b4..62318014c10db8e74aa540b063f7feee8cdd0303 100644 GIT binary patch delta 56 zcmV-80LTB9u>+#90|)>B$F%?e*rKrru*U+@5R-w(8ne{L_zV*d0000%OjJ8WPgGY$ OMNVH-O;EGb)WZXBcon|@ delta 44 zcmV+{0Mq}Xu>+Q|0|)>B$F%?e*p{&fu*U+%5R-w(8ne{L_zVXF0000%OjNVq)WZXh CArblj diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs index 123b83c..865739a 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs @@ -44,6 +44,12 @@ namespace DG.DOTweenEditor EditorUtils.RemoveGlobalDefine(GlobalDefine_TextMeshPro); } + // Removes all legacy defines + public static void RemoveAllLegacyDefines() + { + EditorUtils.RemoveGlobalDefine(GlobalDefine_Legacy_NoRigidbody); + } + // Adds all Unity Modules defines but not the ones for external assets public static void AddAllUnityDefines() { diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs index b05291e..f10304f 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs @@ -30,6 +30,7 @@ namespace DG.DOTweenEditor break; } if (!containsDOTween) return AssetDeleteResult.DidNotDelete; + Debug.Log("::: DOTween deleted"); // DOTween is being deleted: deal with it // Remove EditorPrefs EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.Id); @@ -53,21 +54,24 @@ namespace DG.DOTweenEditor static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { + Debug.Log("::::::::::::::::::::: OnPostprocessAllAssets :::::::::::::::::::::::::::::"); if (_setupDialogRequested) return; string[] dotweenEntries = System.Array.FindAll(importedAssets, name => name.Contains("DOTween") && !name.EndsWith(".meta") && !name.EndsWith(".jpg") && !name.EndsWith(".png")); bool dotweenImported = dotweenEntries.Length > 0; + Debug.Log("::: DOTween imported: " + dotweenImported); if (dotweenImported) { // Delete old DOTween files EditorUtils.DeleteLegacyNoModulesDOTweenFiles(); // Delete old DemiLib configuration EditorUtils.DeleteOldDemiLibCore(); - // Remove old NoRigidbody define - EditorUtils.RemoveGlobalDefine(DOTweenSetup.GlobalDefine_Legacy_NoRigidbody); + // Remove old legacy defines + DOTweenSetup.RemoveAllLegacyDefines(); // bool differentCoreVersion = EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.Id) != Application.dataPath + DOTween.Version; bool differentProVersion = EditorUtils.hasPro && EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.IdPro) != Application.dataPath + EditorUtils.proVersion; bool setupRequired = differentCoreVersion || differentProVersion; + Debug.Log("::: Setup required: " + setupRequired + " - " + differentCoreVersion + "/" + differentProVersion); if (setupRequired) { _setupDialogRequested = true; EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.Id, Application.dataPath + DOTween.Version); diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat index 4a6b0b3..0f33186 100644 --- a/_DOTween.Assembly/PostBuild_DOTween.bat +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -47,7 +47,10 @@ set CopyToDirModulesTest=%1..\ModulesTest.Unity2018\Assets\Demigiant\%5%SubDir% :: Modules test project echo ::: Exporting from %CopyFromDir% to %CopyToDirModulesTest% echo f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E -:: exit /B +:: UnityTests.Unity5 +echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% +echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E +exit /B :: bin.Global echo ::: Exporting from %CopyFromDir% to %CopyToDir% echo f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E @@ -57,9 +60,6 @@ echo f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E :: UnityTests.Unity4 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnityTests% echo f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E -:: UnityTests.Unity5 -echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% -echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E :: UnityCompatibilityTests.Unity35 echo ::: Exporting from %CopyFromDir% to %CopyToDirCompatibilityTests% echo f | xcopy %CopyFromDir% %CopyToDirCompatibilityTests% /Y /I /E From 431cf32a39f905a5679f13904ce8ae1fd82a413a Mon Sep 17 00:00:00 2001 From: Demigiant Date: Mon, 16 Jul 2018 18:34:38 +0200 Subject: [PATCH 06/14] Refactoring and preparing to include DOTweenUpgradeManager library --- .../Assets/_Tests/CustomYieldInstructions.cs | 1 - _DOTween.Assembly/DOTween/DOTween.cs | 2 +- .../{DOTweenSetup.cs => DOTweenDefines.cs} | 3 +- .../DOTweenEditor/DOTweenEditor.csproj | 17 +-- .../DOTweenEditor/DOTweenProcessors.cs | 94 +++++++++++++++ .../DOTweenEditor/{Core => }/DelayedCall.cs | 2 +- .../DOTweenEditor/{Core => }/EditorUtils.cs | 46 +++---- .../{ => UI}/DOTweenInspector.cs | 6 +- .../{ => UI}/DOTweenSettingsInspector.cs | 7 +- .../{ => UI}/DOTweenUtilityWindow.cs | 112 +++--------------- .../DOTweenUtilityWindowModules.cs} | 38 +++--- .../{Core => UI}/EditorGUIUtils.cs | 34 +++--- 12 files changed, 182 insertions(+), 180 deletions(-) rename _DOTween.Assembly/DOTweenEditor/{DOTweenSetup.cs => DOTweenDefines.cs} (99%) create mode 100644 _DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs rename _DOTween.Assembly/DOTweenEditor/{Core => }/DelayedCall.cs (96%) rename _DOTween.Assembly/DOTweenEditor/{Core => }/EditorUtils.cs (94%) rename _DOTween.Assembly/DOTweenEditor/{ => UI}/DOTweenInspector.cs (98%) rename _DOTween.Assembly/DOTweenEditor/{ => UI}/DOTweenSettingsInspector.cs (84%) rename _DOTween.Assembly/DOTweenEditor/{ => UI}/DOTweenUtilityWindow.cs (74%) rename _DOTween.Assembly/DOTweenEditor/{DOTweenModulesSetupGUI.cs => UI/DOTweenUtilityWindowModules.cs} (73%) rename _DOTween.Assembly/DOTweenEditor/{Core => UI}/EditorGUIUtils.cs (85%) diff --git a/UnityTests.Unity5/Assets/_Tests/CustomYieldInstructions.cs b/UnityTests.Unity5/Assets/_Tests/CustomYieldInstructions.cs index 1bc892a..8a696d6 100644 --- a/UnityTests.Unity5/Assets/_Tests/CustomYieldInstructions.cs +++ b/UnityTests.Unity5/Assets/_Tests/CustomYieldInstructions.cs @@ -1,7 +1,6 @@ using System.Collections; using System.Collections.Generic; using DG.Tweening; -using DG.Tweening.CustomYieldInstructions; using UnityEngine; public class CustomYieldInstructions : BrainBase diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index 0f1272f..8547601 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -32,7 +32,7 @@ namespace DG.Tweening public class DOTween { /// DOTween's version - public static readonly string Version = "1.2.000"; // Last version before modules: 1.1.755 + public static readonly string Version = "1.2.001"; // Last version before modules: 1.1.755 /////////////////////////////////////////////// // Options //////////////////////////////////// diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenDefines.cs similarity index 99% rename from _DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs rename to _DOTween.Assembly/DOTweenEditor/DOTweenDefines.cs index 865739a..40988a8 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenSetup.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenDefines.cs @@ -6,7 +6,6 @@ using System; using System.IO; -using DG.DOTweenEditor.Core; using UnityEditor; using UnityEngine; @@ -15,7 +14,7 @@ namespace DG.DOTweenEditor /// /// Not used as menu item anymore, but as a utiity function /// - static class DOTweenSetup + static class DOTweenDefines { // Modules public const string GlobalDefine_AudioModule = "DOTAUDIO"; diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj b/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj index 89c81d7..8d1f8c2 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenEditor.csproj @@ -73,14 +73,15 @@ - - - - - - - - + + + + + + + + + diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs new file mode 100644 index 0000000..c641d8e --- /dev/null +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs @@ -0,0 +1,94 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/16 18:07 +// License Copyright (c) Daniele Giardini +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +using System.IO; +using DG.DOTweenEditor.UI; +using DG.Tweening; +using UnityEditor; +using UnityEngine; + +namespace DG.DOTweenEditor +{ + public class UtilityWindowModificationProcessor : UnityEditor.AssetModificationProcessor + { + // Checks if deleted folder contains DOTween Pro and in case removes scripting define symbols + static AssetDeleteResult OnWillDeleteAsset(string asset, RemoveAssetOptions options) + { + // Check if asset is a directory + string dir = EditorUtils.ADBPathToFullPath(asset); + if (!Directory.Exists(dir)) return AssetDeleteResult.DidNotDelete; + // Check if directory contains DOTween.dll + string[] files = Directory.GetFiles(dir, "DOTween.dll", SearchOption.AllDirectories); + int len = files.Length; + bool containsDOTween = false; + for (int i = 0; i < len; ++i) { + if (!files[i].EndsWith("DOTween.dll")) continue; + containsDOTween = true; + break; + } + if (!containsDOTween) return AssetDeleteResult.DidNotDelete; + Debug.Log("::: DOTween deleted"); + // DOTween is being deleted: deal with it + // Remove EditorPrefs + EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.Id); + EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.IdPro); + // Remove scripting define symbols + DOTweenDefines.RemoveAllDefines(); + // + EditorUtility.DisplayDialog("DOTween Deleted", + "DOTween was deleted and all of its scripting define symbols removed." + + "\n\nThis might show an error depending on your previous setup." + + " If this happens, please close and reopen Unity or reimport DOTween.", + "Ok" + ); + return AssetDeleteResult.DidNotDelete; + } + } + + public class UtilityWindowPostProcessor : AssetPostprocessor + { + static bool _setupDialogRequested; // Used to prevent OnPostProcessAllAssets firing twice (because of a Unity bug/feature) + + static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + Debug.Log("OnPostprocessAllAssets"); + if (_setupDialogRequested) return; + + string[] dotweenEntries = System.Array.FindAll(importedAssets, name => name.Contains("DOTween") && !name.EndsWith(".meta") && !name.EndsWith(".jpg") && !name.EndsWith(".png")); + bool dotweenImported = dotweenEntries.Length > 0; + if (dotweenImported) { + // Delete old DOTween files + EditorUtils.DeleteLegacyNoModulesDOTweenFiles(); + // Delete old DemiLib configuration + EditorUtils.DeleteOldDemiLibCore(); + // Remove old legacy defines + DOTweenDefines.RemoveAllLegacyDefines(); + // + bool differentCoreVersion = EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.Id) != Application.dataPath + DOTween.Version; + bool differentProVersion = EditorUtils.hasPro && EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.IdPro) != Application.dataPath + EditorUtils.proVersion; + bool setupRequired = differentCoreVersion || differentProVersion; + if (setupRequired) { + _setupDialogRequested = true; + EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.Id, Application.dataPath + DOTween.Version); + if (EditorUtils.hasPro) EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.IdPro, Application.dataPath + EditorUtils.proVersion); + EditorUtility.DisplayDialog("DOTween", + differentCoreVersion + ? "New version of DOTween imported." + + "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove Modules." + : "New version of DOTween Pro imported." + + " \n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove external Modules (TextMesh Pro/2DToolkit/etc).", + "Ok" + ); + DOTweenUtilityWindow.Open(); + // Opening window after a postProcess doesn't work on Unity 3 so check that +// string[] vs = Application.unityVersion.Split("."[0]); +// int majorVersion = System.Convert.ToInt32(vs[0]); +// if (majorVersion >= 4) EditorUtils.DelayedCall(0.5f, DOTweenUtilityWindow.Open); +// EditorUtils.DelayedCall(8, ()=> _setupDialogRequested = false); + } + } + } + } +} \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenEditor/Core/DelayedCall.cs b/_DOTween.Assembly/DOTweenEditor/DelayedCall.cs similarity index 96% rename from _DOTween.Assembly/DOTweenEditor/Core/DelayedCall.cs rename to _DOTween.Assembly/DOTweenEditor/DelayedCall.cs index e32c4e0..4ff0a4c 100644 --- a/_DOTween.Assembly/DOTweenEditor/Core/DelayedCall.cs +++ b/_DOTween.Assembly/DOTweenEditor/DelayedCall.cs @@ -5,7 +5,7 @@ using System; using UnityEditor; using UnityEngine; -namespace DG.DOTweenEditor.Core +namespace DG.DOTweenEditor { public class DelayedCall { diff --git a/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs b/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs similarity index 94% rename from _DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs rename to _DOTween.Assembly/DOTweenEditor/EditorUtils.cs index 94a1948..808fdf8 100644 --- a/_DOTween.Assembly/DOTweenEditor/Core/EditorUtils.cs +++ b/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs @@ -2,15 +2,14 @@ // Created: 2014/12/24 13:50 using System; -using System.Collections; -using System.Reflection; using System.IO; +using System.Reflection; using System.Text; using DG.Tweening; using UnityEditor; using UnityEngine; -namespace DG.DOTweenEditor.Core +namespace DG.DOTweenEditor { public static class EditorUtils { @@ -96,28 +95,29 @@ namespace DG.DOTweenEditor.Core { string adbDOTweenDir = FullPathToADBPath(dotweenDir); AssetDatabase.StartAssetEditing(); + Debug.Log(adbDOTweenDir + "DOTween43.dll"); DeleteAssetsIfExist(new[] { - adbDOTweenDir + "/DOTween43.dll", - adbDOTweenDir + "/DOTween43.xml", - adbDOTweenDir + "/DOTween43.dll.mdb", - adbDOTweenDir + "/DOTween43.dll.addon", - adbDOTweenDir + "/DOTween43.xml.addon", - adbDOTweenDir + "/DOTween43.dll.mdb.addon", - adbDOTweenDir + "/DOTween46.dll", - adbDOTweenDir + "/DOTween46.xml", - adbDOTweenDir + "/DOTween46.dll.mdb", - adbDOTweenDir + "/DOTween46.dll.addon", - adbDOTweenDir + "/DOTween46.xml.addon", - adbDOTweenDir + "/DOTween46.dll.mdb.addon", - adbDOTweenDir + "/DOTween50.dll", - adbDOTweenDir + "/DOTween50.xml", - adbDOTweenDir + "/DOTween50.dll.mdb", - adbDOTweenDir + "/DOTween50.dll.addon", - adbDOTweenDir + "/DOTween50.xml.addon", - adbDOTweenDir + "/DOTween50.dll.mdb.addon", + adbDOTweenDir + "DOTween43.dll", + adbDOTweenDir + "DOTween43.xml", + adbDOTweenDir + "DOTween43.dll.mdb", + adbDOTweenDir + "DOTween43.dll.addon", + adbDOTweenDir + "DOTween43.xml.addon", + adbDOTweenDir + "DOTween43.dll.mdb.addon", + adbDOTweenDir + "DOTween46.dll", + adbDOTweenDir + "DOTween46.xml", + adbDOTweenDir + "DOTween46.dll.mdb", + adbDOTweenDir + "DOTween46.dll.addon", + adbDOTweenDir + "DOTween46.xml.addon", + adbDOTweenDir + "DOTween46.dll.mdb.addon", + adbDOTweenDir + "DOTween50.dll", + adbDOTweenDir + "DOTween50.xml", + adbDOTweenDir + "DOTween50.dll.mdb", + adbDOTweenDir + "DOTween50.dll.addon", + adbDOTweenDir + "DOTween50.xml.addon", + adbDOTweenDir + "DOTween50.dll.mdb.addon", // - adbDOTweenDir + "/DOTweenTextMeshPro.cs.addon", - adbDOTweenDir + "/DOTweenTk2d.cs.addon", + adbDOTweenDir + "DOTweenTextMeshPro.cs.addon", + adbDOTweenDir + "DOTweenTk2d.cs.addon", }); AssetDatabase.StopAssetEditing(); } diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenInspector.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenInspector.cs similarity index 98% rename from _DOTween.Assembly/DOTweenEditor/DOTweenInspector.cs rename to _DOTween.Assembly/DOTweenEditor/UI/DOTweenInspector.cs index baf5e6f..c50c65f 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenInspector.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenInspector.cs @@ -4,17 +4,13 @@ // License Copyright (c) Daniele Giardini. // This work is subject to the terms at http://dotween.demigiant.com/license.php -using System; -using System.Collections.Generic; -using System.Reflection; using System.Text; -using DG.DOTweenEditor.Core; using DG.Tweening; using DG.Tweening.Core; using UnityEditor; using UnityEngine; -namespace DG.DOTweenEditor +namespace DG.DOTweenEditor.UI { [CustomEditor(typeof(DOTweenComponent))] public class DOTweenInspector : Editor diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenSettingsInspector.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenSettingsInspector.cs similarity index 84% rename from _DOTween.Assembly/DOTweenEditor/DOTweenSettingsInspector.cs rename to _DOTween.Assembly/DOTweenEditor/UI/DOTweenSettingsInspector.cs index 0bcf048..dbb3881 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenSettingsInspector.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenSettingsInspector.cs @@ -3,9 +3,8 @@ using DG.Tweening.Core; using UnityEditor; -using UnityEngine; -namespace DG.DOTweenEditor +namespace DG.DOTweenEditor.UI { [CustomEditor(typeof(DOTweenSettings))] public class DOTweenSettingsInspector : Editor @@ -22,11 +21,11 @@ namespace DG.DOTweenEditor override public void OnInspectorGUI() { - GUI.enabled = false; + UnityEngine.GUI.enabled = false; DrawDefaultInspector(); - GUI.enabled = true; + UnityEngine.GUI.enabled = true; } } } \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs similarity index 74% rename from _DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs rename to _DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs index f10304f..70a17f2 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenUtilityWindow.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs @@ -2,100 +2,14 @@ // Created: 2014/12/24 13:37 using System.IO; -using System.Reflection; -using DG.DOTweenEditor.Core; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Core.Enums; using UnityEditor; using UnityEngine; -namespace DG.DOTweenEditor +namespace DG.DOTweenEditor.UI { - public class UtilityWindowModificationProcessor : UnityEditor.AssetModificationProcessor - { - // Checks if deleted folder contains DOTween Pro and in case removes scripting define symbols - static AssetDeleteResult OnWillDeleteAsset(string asset, RemoveAssetOptions options) - { - // Check if asset is a directory - string dir = EditorUtils.ADBPathToFullPath(asset); - if (!Directory.Exists(dir)) return AssetDeleteResult.DidNotDelete; - // Check if directory contains DOTween.dll - string[] files = Directory.GetFiles(dir, "DOTween.dll", SearchOption.AllDirectories); - int len = files.Length; - bool containsDOTween = false; - for (int i = 0; i < len; ++i) { - if (!files[i].EndsWith("DOTween.dll")) continue; - containsDOTween = true; - break; - } - if (!containsDOTween) return AssetDeleteResult.DidNotDelete; - Debug.Log("::: DOTween deleted"); - // DOTween is being deleted: deal with it - // Remove EditorPrefs - EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.Id); - EditorPrefs.DeleteKey(Application.dataPath + DOTweenUtilityWindow.IdPro); - // Remove scripting define symbols - DOTweenSetup.RemoveAllDefines(); - // - EditorUtility.DisplayDialog("DOTween Deleted", - "DOTween was deleted and all of its scripting define symbols removed." + - "\n\nThis might show an error depending on your previous setup." + - " If this happens, please close and reopen Unity or reimport DOTween.", - "Ok" - ); - return AssetDeleteResult.DidNotDelete; - } - } - - public class UtilityWindowPostProcessor : AssetPostprocessor - { - static bool _setupDialogRequested; // Used to prevent OnPostProcessAllAssets firing twice (because of a Unity bug/feature) - - static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) - { - Debug.Log("::::::::::::::::::::: OnPostprocessAllAssets :::::::::::::::::::::::::::::"); - if (_setupDialogRequested) return; - - string[] dotweenEntries = System.Array.FindAll(importedAssets, name => name.Contains("DOTween") && !name.EndsWith(".meta") && !name.EndsWith(".jpg") && !name.EndsWith(".png")); - bool dotweenImported = dotweenEntries.Length > 0; - Debug.Log("::: DOTween imported: " + dotweenImported); - if (dotweenImported) { - // Delete old DOTween files - EditorUtils.DeleteLegacyNoModulesDOTweenFiles(); - // Delete old DemiLib configuration - EditorUtils.DeleteOldDemiLibCore(); - // Remove old legacy defines - DOTweenSetup.RemoveAllLegacyDefines(); - // - bool differentCoreVersion = EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.Id) != Application.dataPath + DOTween.Version; - bool differentProVersion = EditorUtils.hasPro && EditorPrefs.GetString(Application.dataPath + DOTweenUtilityWindow.IdPro) != Application.dataPath + EditorUtils.proVersion; - bool setupRequired = differentCoreVersion || differentProVersion; - Debug.Log("::: Setup required: " + setupRequired + " - " + differentCoreVersion + "/" + differentProVersion); - if (setupRequired) { - _setupDialogRequested = true; - EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.Id, Application.dataPath + DOTween.Version); - if (EditorUtils.hasPro) EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.IdPro, Application.dataPath + EditorUtils.proVersion); -// DOTweenSetup.AddAllUnityDefines(); - EditorUtility.DisplayDialog("DOTween", - differentCoreVersion - ? "New version of DOTween imported." + - "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove Modules." - : "New version of DOTween Pro imported." + - " \n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove external Modules (TextMesh Pro/2DToolkit/etc).", - "Ok" - ); - DOTweenUtilityWindow.Open(); - // Opening window after a postProcess doesn't work on Unity 3 so check that -// string[] vs = Application.unityVersion.Split("."[0]); -// int majorVersion = System.Convert.ToInt32(vs[0]); -// if (majorVersion >= 4) EditorUtils.DelayedCall(0.5f, DOTweenUtilityWindow.Open); -// EditorUtils.DelayedCall(8, ()=> _setupDialogRequested = false); - } - } - } - } - class DOTweenUtilityWindow : EditorWindow { [MenuItem("Tools/Demigiant/" + _Title)] @@ -196,10 +110,10 @@ namespace DG.DOTweenEditor GUILayout.EndHorizontal(); } else { if (_isModulesMode) { - if (DOTweenModulesSetupGUI.Draw()) _isModulesMode = false; + if (DOTweenUtilityWindowModules.Draw()) _isModulesMode = false; } else { Rect areaRect = new Rect(0, 0, _headerSize.x, 30); - _selectedTab = GUI.Toolbar(areaRect, _selectedTab, _tabLabels); + _selectedTab = UnityEngine.GUI.Toolbar(areaRect, _selectedTab, _tabLabels); switch (_selectedTab) { case 1: @@ -219,28 +133,30 @@ namespace DG.DOTweenEditor void DrawSetupGUI() { Rect areaRect = new Rect(0, 30, _headerSize.x, _headerSize.y); - GUI.DrawTexture(areaRect, _headerImg, ScaleMode.StretchToFill, false); + UnityEngine.GUI.DrawTexture(areaRect, _headerImg, ScaleMode.StretchToFill, false); GUILayout.Space(areaRect.y + _headerSize.y + 2); GUILayout.Label(_innerTitle, DOTween.isDebugBuild ? EditorGUIUtils.redLabelStyle : EditorGUIUtils.boldLabelStyle); if (_setupRequired) { - GUI.backgroundColor = Color.red; - GUILayout.BeginVertical(GUI.skin.box); + UnityEngine.GUI.backgroundColor = Color.red; + GUILayout.BeginVertical(UnityEngine.GUI.skin.box); GUILayout.Label("DOTWEEN SETUP REQUIRED", EditorGUIUtils.setupLabelStyle); GUILayout.EndVertical(); - GUI.backgroundColor = Color.white; + UnityEngine.GUI.backgroundColor = Color.white; } else GUILayout.Space(8); - GUI.color = Color.green; + UnityEngine.GUI.color = Color.green; GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Setup DOTween...\n(add/remove Modules)", EditorGUIUtils.btSetup)) { -// DOTweenSetup.Setup(); +// DOTweenDefines.Setup(); // _setupRequired = EditorUtils.DOTweenSetupRequired(); - DOTweenModulesSetupGUI.Refresh(); + DOTweenUtilityWindowModules.Refresh(); _isModulesMode = true; + EditorUtils.DeleteLegacyNoModulesDOTweenFiles(); + return; } GUILayout.FlexibleSpace(); - GUI.color = Color.white; + UnityEngine.GUI.color = Color.white; GUILayout.EndHorizontal(); GUILayout.Space(8); @@ -333,7 +249,7 @@ namespace DG.DOTweenEditor _src.defaultAutoKill = EditorGUILayout.Toggle("AutoKill", _src.defaultAutoKill); _src.defaultLoopType = (LoopType)EditorGUILayout.EnumPopup("Loop Type", _src.defaultLoopType); - if (GUI.changed) EditorUtility.SetDirty(_src); + if (UnityEngine.GUI.changed) EditorUtility.SetDirty(_src); } // =================================================================================== diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindowModules.cs similarity index 73% rename from _DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs rename to _DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindowModules.cs index 3632423..db15e7a 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenModulesSetupGUI.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindowModules.cs @@ -3,14 +3,12 @@ // License Copyright (c) Daniele Giardini // This work is subject to the terms at http://dotween.demigiant.com/license.php -using DG.DOTweenEditor.Core; using UnityEditor; using UnityEngine; -using EditorUtils = DG.DOTweenEditor.Core.EditorUtils; -namespace DG.DOTweenEditor +namespace DG.DOTweenEditor.UI { - public static class DOTweenModulesSetupGUI + public static class DOTweenUtilityWindowModules { static bool _hasAudioModule; static bool _hasPhysicsModule; @@ -23,14 +21,14 @@ namespace DG.DOTweenEditor public static void Refresh() { - _hasAudioModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_AudioModule); - _hasPhysicsModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_PhysicsModule); - _hasPhysics2DModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_Physics2DModule); - _hasSpriteModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_SpriteModule); - _hasUIModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_UIModule); + _hasAudioModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_AudioModule); + _hasPhysicsModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_PhysicsModule); + _hasPhysics2DModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_Physics2DModule); + _hasSpriteModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_SpriteModule); + _hasUIModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_UIModule); - _hasTextMeshProModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_TextMeshPro); - _hasTk2DModule = EditorUtils.HasGlobalDefine(DOTweenSetup.GlobalDefine_TK2D); + _hasTextMeshProModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_TextMeshPro); + _hasTk2DModule = EditorUtils.HasGlobalDefine(DOTweenDefines.GlobalDefine_TK2D); } // Returns TRUE if it should be closed @@ -38,7 +36,7 @@ namespace DG.DOTweenEditor { GUILayout.Label("Add/Remove Modules", EditorGUIUtils.titleStyle); - GUILayout.BeginVertical(GUI.skin.box); + GUILayout.BeginVertical(UnityEngine.GUI.skin.box); GUILayout.Label("Unity", EditorGUIUtils.boldLabelStyle); _hasAudioModule = EditorGUILayout.Toggle("Audio", _hasAudioModule); _hasPhysicsModule = EditorGUILayout.Toggle("Physics", _hasPhysicsModule); @@ -47,7 +45,7 @@ namespace DG.DOTweenEditor _hasUIModule = EditorGUILayout.Toggle("UI", _hasUIModule); EditorGUILayout.EndVertical(); if (EditorUtils.hasPro) { - GUILayout.BeginVertical(GUI.skin.box); + GUILayout.BeginVertical(UnityEngine.GUI.skin.box); GUILayout.Label("External Assets (Pro)", EditorGUIUtils.boldLabelStyle); _hasTk2DModule = EditorGUILayout.Toggle("2D Toolkit", _hasTk2DModule); _hasTextMeshProModule = EditorGUILayout.Toggle("TextMesh Pro", _hasTextMeshProModule); @@ -73,15 +71,15 @@ namespace DG.DOTweenEditor static void Apply() { - ModifyDefineIfChanged(_hasAudioModule, DOTweenSetup.GlobalDefine_AudioModule); - ModifyDefineIfChanged(_hasPhysicsModule, DOTweenSetup.GlobalDefine_PhysicsModule); - ModifyDefineIfChanged(_hasPhysics2DModule, DOTweenSetup.GlobalDefine_Physics2DModule); - ModifyDefineIfChanged(_hasSpriteModule, DOTweenSetup.GlobalDefine_SpriteModule); - ModifyDefineIfChanged(_hasUIModule, DOTweenSetup.GlobalDefine_UIModule); + ModifyDefineIfChanged(_hasAudioModule, DOTweenDefines.GlobalDefine_AudioModule); + ModifyDefineIfChanged(_hasPhysicsModule, DOTweenDefines.GlobalDefine_PhysicsModule); + ModifyDefineIfChanged(_hasPhysics2DModule, DOTweenDefines.GlobalDefine_Physics2DModule); + ModifyDefineIfChanged(_hasSpriteModule, DOTweenDefines.GlobalDefine_SpriteModule); + ModifyDefineIfChanged(_hasUIModule, DOTweenDefines.GlobalDefine_UIModule); if (EditorUtils.hasPro) { - ModifyDefineIfChanged(_hasTextMeshProModule, DOTweenSetup.GlobalDefine_TextMeshPro); - ModifyDefineIfChanged(_hasTk2DModule, DOTweenSetup.GlobalDefine_TK2D); + ModifyDefineIfChanged(_hasTextMeshProModule, DOTweenDefines.GlobalDefine_TextMeshPro); + ModifyDefineIfChanged(_hasTk2DModule, DOTweenDefines.GlobalDefine_TK2D); } } diff --git a/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs b/_DOTween.Assembly/DOTweenEditor/UI/EditorGUIUtils.cs similarity index 85% rename from _DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs rename to _DOTween.Assembly/DOTweenEditor/UI/EditorGUIUtils.cs index 60e1790..480bc8e 100644 --- a/_DOTween.Assembly/DOTweenEditor/Core/EditorGUIUtils.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/EditorGUIUtils.cs @@ -6,7 +6,7 @@ using DG.Tweening; using UnityEditor; using UnityEngine; -namespace DG.DOTweenEditor.Core +namespace DG.DOTweenEditor.UI { public static class EditorGUIUtils { @@ -101,16 +101,16 @@ namespace DG.DOTweenEditor.Core // A button which works as a toggle public static bool ToggleButton(bool toggled, GUIContent content, GUIStyle guiStyle = null, params GUILayoutOption[] options) { - Color orColor = GUI.backgroundColor; - GUI.backgroundColor = toggled ? Color.green : Color.white; + Color orColor = UnityEngine.GUI.backgroundColor; + UnityEngine.GUI.backgroundColor = toggled ? Color.green : Color.white; bool clicked = guiStyle == null ? GUILayout.Button(content, options) : GUILayout.Button(content, guiStyle, options); if (clicked) { toggled = !toggled; - GUI.changed = true; + UnityEngine.GUI.changed = true; } - GUI.backgroundColor = orColor; + UnityEngine.GUI.backgroundColor = orColor; return toggled; } @@ -120,7 +120,7 @@ namespace DG.DOTweenEditor.Core _additionalStylesSet = true; Vector2 footerSizeV = (Vector2)footerSize; - btImgStyle = new GUIStyle(GUI.skin.button); + btImgStyle = new GUIStyle(UnityEngine.GUI.skin.button); btImgStyle.normal.background = null; btImgStyle.imagePosition = ImagePosition.ImageOnly; btImgStyle.padding = new RectOffset(0, 0, 0, 0); @@ -131,18 +131,18 @@ namespace DG.DOTweenEditor.Core if (!_stylesSet) { _stylesSet = true; - boldLabelStyle = new GUIStyle(GUI.skin.label); + boldLabelStyle = new GUIStyle(UnityEngine.GUI.skin.label); boldLabelStyle.fontStyle = FontStyle.Bold; - redLabelStyle = new GUIStyle(GUI.skin.label); + redLabelStyle = new GUIStyle(UnityEngine.GUI.skin.label); redLabelStyle.normal.textColor = Color.red; setupLabelStyle = new GUIStyle(boldLabelStyle); setupLabelStyle.alignment = TextAnchor.MiddleCenter; - wrapCenterLabelStyle = new GUIStyle(GUI.skin.label); + wrapCenterLabelStyle = new GUIStyle(UnityEngine.GUI.skin.label); wrapCenterLabelStyle.wordWrap = true; wrapCenterLabelStyle.alignment = TextAnchor.MiddleCenter; - btBigStyle = new GUIStyle(GUI.skin.button); + btBigStyle = new GUIStyle(UnityEngine.GUI.skin.button); btBigStyle.padding = new RectOffset(0, 0, 10, 10); btSetup = new GUIStyle(btBigStyle); @@ -152,12 +152,12 @@ namespace DG.DOTweenEditor.Core // - titleStyle = new GUIStyle(GUI.skin.label) { + titleStyle = new GUIStyle(UnityEngine.GUI.skin.label) { fontSize = 12, fontStyle = FontStyle.Bold }; - handlelabelStyle = new GUIStyle(GUI.skin.label) { + handlelabelStyle = new GUIStyle(UnityEngine.GUI.skin.label) { normal = { textColor = Color.white }, alignment = TextAnchor.MiddleLeft }; @@ -166,20 +166,20 @@ namespace DG.DOTweenEditor.Core fontStyle = FontStyle.Bold }; - wordWrapLabelStyle = new GUIStyle(GUI.skin.label); + wordWrapLabelStyle = new GUIStyle(UnityEngine.GUI.skin.label); wordWrapLabelStyle.wordWrap = true; wordWrapItalicLabelStyle = new GUIStyle(wordWrapLabelStyle); wordWrapItalicLabelStyle.fontStyle = FontStyle.Italic; - logoIconStyle = new GUIStyle(GUI.skin.box); + logoIconStyle = new GUIStyle(UnityEngine.GUI.skin.box); logoIconStyle.active.background = logoIconStyle.normal.background = null; logoIconStyle.margin = new RectOffset(0, 0, 0, 0); logoIconStyle.padding = new RectOffset(0, 0, 0, 0); // - sideBtStyle = new GUIStyle(GUI.skin.button); + sideBtStyle = new GUIStyle(UnityEngine.GUI.skin.button); sideBtStyle.margin.top = 1; sideBtStyle.padding = new RectOffset(0, 0, 2, 2); @@ -187,14 +187,14 @@ namespace DG.DOTweenEditor.Core sideLogoIconBoldLabelStyle.alignment = TextAnchor.MiddleLeft; sideLogoIconBoldLabelStyle.padding.top = 2; - wordWrapTextArea = new GUIStyle(GUI.skin.textArea); + wordWrapTextArea = new GUIStyle(UnityEngine.GUI.skin.textArea); wordWrapTextArea.wordWrap = true; popupButton = new GUIStyle(EditorStyles.popup); popupButton.fixedHeight = 18; popupButton.margin.top += 1; - btIconStyle = new GUIStyle(GUI.skin.button); + btIconStyle = new GUIStyle(UnityEngine.GUI.skin.button); btIconStyle.padding.left -= 2; btIconStyle.fixedWidth = 24; btIconStyle.stretchWidth = false; From 8601e646168b84088d1a5d505c1ebcd0a916e429 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Tue, 17 Jul 2018 10:30:51 +0200 Subject: [PATCH 07/14] Added DOTweenUpgradeManager library --- _DOTween.Assembly/DOTween.sln | 12 ++++ .../DOTweenEditor/DOTweenProcessors.cs | 17 +++-- .../DOTweenEditor/EditorUtils.cs | 22 ++++-- .../DOTweenEditor/UI/DOTweenUtilityWindow.cs | 1 + .../DOTweenUpgradeManager/Autorun.cs | 29 ++++++++ .../DOTweenUpgradeManager.csproj | 67 +++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 ++++++++++ _DOTween.Assembly/PostBuild_DOTween.bat | 2 +- 8 files changed, 172 insertions(+), 14 deletions(-) create mode 100644 _DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs create mode 100644 _DOTween.Assembly/DOTweenUpgradeManager/DOTweenUpgradeManager.csproj create mode 100644 _DOTween.Assembly/DOTweenUpgradeManager/Properties/AssemblyInfo.cs diff --git a/_DOTween.Assembly/DOTween.sln b/_DOTween.Assembly/DOTween.sln index 07d5337..5518894 100644 --- a/_DOTween.Assembly/DOTween.sln +++ b/_DOTween.Assembly/DOTween.sln @@ -24,6 +24,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOTween_LooseScripts", "DOT EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Legacy_NoModules", "Legacy_NoModules", "{3945F2EC-EA44-45DF-82B5-33E978AE8345}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOTweenUpgradeManager", "DOTweenUpgradeManager\DOTweenUpgradeManager.csproj", "{6BC7290B-999D-4688-959C-868306C1F52B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CompatibilityMode|Any CPU = CompatibilityMode|Any CPU @@ -93,6 +95,16 @@ Global {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release|Any CPU {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release_NoRigidbody|Any CPU.ActiveCfg = Release|Any CPU {0B529A90-0B97-4840-BEB6-4A6700B46655}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.CompatibilityMode|Any CPU.ActiveCfg = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.CompatibilityMode|Any CPU.Build.0 = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release_IncludeRigidbody|Any CPU.ActiveCfg = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release_IncludeRigidbody|Any CPU.Build.0 = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release_NoRigidbody|Any CPU.ActiveCfg = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release_NoRigidbody|Any CPU.Build.0 = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BC7290B-999D-4688-959C-868306C1F52B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs b/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs index c641d8e..7e39792 100644 --- a/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs +++ b/_DOTween.Assembly/DOTweenEditor/DOTweenProcessors.cs @@ -53,7 +53,6 @@ namespace DG.DOTweenEditor static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { - Debug.Log("OnPostprocessAllAssets"); if (_setupDialogRequested) return; string[] dotweenEntries = System.Array.FindAll(importedAssets, name => name.Contains("DOTween") && !name.EndsWith(".meta") && !name.EndsWith(".jpg") && !name.EndsWith(".png")); @@ -73,14 +72,14 @@ namespace DG.DOTweenEditor _setupDialogRequested = true; EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.Id, Application.dataPath + DOTween.Version); if (EditorUtils.hasPro) EditorPrefs.SetString(Application.dataPath + DOTweenUtilityWindow.IdPro, Application.dataPath + EditorUtils.proVersion); - EditorUtility.DisplayDialog("DOTween", - differentCoreVersion - ? "New version of DOTween imported." + - "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove Modules." - : "New version of DOTween Pro imported." + - " \n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove external Modules (TextMesh Pro/2DToolkit/etc).", - "Ok" - ); +// EditorUtility.DisplayDialog("DOTween", +// differentCoreVersion +// ? "New version of DOTween imported." + +// "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove Modules." +// : "New version of DOTween Pro imported." + +// " \n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to add/remove external Modules (TextMesh Pro/2DToolkit/etc).", +// "Ok" +// ); DOTweenUtilityWindow.Open(); // Opening window after a postProcess doesn't work on Unity 3 so check that // string[] vs = Application.unityVersion.Split("."[0]); diff --git a/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs b/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs index 808fdf8..6ac6a48 100644 --- a/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs +++ b/_DOTween.Assembly/DOTweenEditor/EditorUtils.cs @@ -80,22 +80,36 @@ namespace DG.DOTweenEditor } /// - /// Returns TRUE if addons setup is required (legacy: now it always returns TRUE). + /// Returns TRUE if setup is required /// public static bool DOTweenSetupRequired() { - return false; - // Legacy method + if (!Directory.Exists(dotweenDir)) return false; + return Directory.GetFiles(dotweenDir + "Editor", "DOTweenUpgradeManager.*").Length > 0; + + // Legacy methods // if (!Directory.Exists(dotweenDir)) return false; // Can happen if we were deleting DOTween // return Directory.GetFiles(dotweenDir, "*.addon").Length > 0 || hasPro && Directory.GetFiles(dotweenProDir, "*.addon").Length > 0; } + // Deletes DOTweenUpgradeManager files + public static void DeleteDOTweenUpgradeManagerFiles() + { + string adbDOTweenDir = FullPathToADBPath(dotweenDir); + AssetDatabase.StartAssetEditing(); + DeleteAssetsIfExist(new[] { + adbDOTweenDir + "Editor/DOTweenUpgradeManager.dll", + adbDOTweenDir + "Editor/DOTweenUpgradeManager.xml", + adbDOTweenDir + "Editor/DOTweenUpgradeManager.dll.mdb" + }); + AssetDatabase.StopAssetEditing(); + } + // Deletes the files used in older versions of DOTween where Modules still didn't exist public static void DeleteLegacyNoModulesDOTweenFiles() { string adbDOTweenDir = FullPathToADBPath(dotweenDir); AssetDatabase.StartAssetEditing(); - Debug.Log(adbDOTweenDir + "DOTween43.dll"); DeleteAssetsIfExist(new[] { adbDOTweenDir + "DOTween43.dll", adbDOTweenDir + "DOTween43.xml", diff --git a/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs index 70a17f2..3206f31 100644 --- a/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs @@ -153,6 +153,7 @@ namespace DG.DOTweenEditor.UI DOTweenUtilityWindowModules.Refresh(); _isModulesMode = true; EditorUtils.DeleteLegacyNoModulesDOTweenFiles(); + EditorUtils.DeleteDOTweenUpgradeManagerFiles(); return; } GUILayout.FlexibleSpace(); diff --git a/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs b/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs new file mode 100644 index 0000000..5366a82 --- /dev/null +++ b/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs @@ -0,0 +1,29 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/16 18:41 +// License Copyright (c) Daniele Giardini +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; + +namespace DG.DOTweenUpgradeManager +{ + /// + /// This class and its whole library are deleted the first time DOTween's setup is run after an upgrade (or after a new install) + /// + static class Autorun + { + [DidReloadScripts] + static void DidReloadScripts() + { + EditorUtility.DisplayDialog("DOTween", + "New version of DOTween imported: SETUP REQUIRED." + + "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to set it up and to add/remove Modules." + + "\n\nIMPORTANT: if you were upgrading from a DOTween version older than 1.2.000 you will see lots of errors." + + " Close and reopen your project, then open DOTween's Utility Panel and run the Setup to activate required Modules.", + "Ok" + ); + } + } +} \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenUpgradeManager/DOTweenUpgradeManager.csproj b/_DOTween.Assembly/DOTweenUpgradeManager/DOTweenUpgradeManager.csproj new file mode 100644 index 0000000..0a2ee14 --- /dev/null +++ b/_DOTween.Assembly/DOTweenUpgradeManager/DOTweenUpgradeManager.csproj @@ -0,0 +1,67 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {6BC7290B-999D-4688-959C-868306C1F52B} + Library + Properties + DG.DOTweenUpgradeManager + DOTweenUpgradeManager + v3.5 + 512 + Unity Subset v3.5 + + + true + full + false + ..\bin\Editor\ + DEBUG;TRACE + prompt + 4 + ..\bin\Editor\DOTweenUpgradeManager.XML + 1591 + + + pdbonly + true + ..\bin\Editor\ + TRACE + prompt + 4 + ..\bin\Editor\DOTweenUpgradeManager.XML + 1591 + + + OnOutputUpdated + + + + + C:\Program Files (x86)\Unity 46\Editor\Data\Managed\UnityEditor.dll + False + + + C:\Program Files (x86)\Unity 46\Editor\Data\Managed\UnityEngine.dll + False + + + + + + + + + call $(SolutionDir)PostBuild_DOTween.bat $(SolutionDir) $(TargetDir) $(TargetFileName) $(TargetName) DOTween bin Editor + + + \ No newline at end of file diff --git a/_DOTween.Assembly/DOTweenUpgradeManager/Properties/AssemblyInfo.cs b/_DOTween.Assembly/DOTweenUpgradeManager/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6d06ebc --- /dev/null +++ b/_DOTween.Assembly/DOTweenUpgradeManager/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DOTweenUpgradeManager")] +[assembly: AssemblyDescription("Upgrade manager for DOTween")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Demigiant")] +[assembly: AssemblyProduct("DOTweenUpgradeManager")] +[assembly: AssemblyCopyright("Copyright © Daniele Giardini, Demigiant 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("807e068c-2a0e-4c81-a303-4b4fd3924511")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat index 0f33186..ec5a9b7 100644 --- a/_DOTween.Assembly/PostBuild_DOTween.bat +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -28,7 +28,7 @@ CD %2 echo ::: Deleting PDB files: %4.pdb DEL %4.pdb echo ::: PDB files deleted, PAUSE for 0.5 second -waitfor pdbsToBeDeletedHopefully /t 0.5 2>NUL || type nul>nul +waitfor pdbFilesToBeDeletedIHope /t 0.5 2>NUL || type nul>nul echo :::::: Starting export... From 581f242fb95c9eb4c9deef6c43c50687254dc368 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Tue, 17 Jul 2018 12:03:46 +0200 Subject: [PATCH 08/14] DOTweenUpgradeManager should be working correctly now (just opens a dialogue) --- _DOTween.Assembly/DOTween/DOTween.cs | 2 +- .../DOTweenUpgradeManager/Autorun.cs | 40 ++++++++++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index 8547601..e7d52a7 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -32,7 +32,7 @@ namespace DG.Tweening public class DOTween { /// DOTween's version - public static readonly string Version = "1.2.001"; // Last version before modules: 1.1.755 + public static readonly string Version = "1.2.002"; // Last version before modules: 1.1.755 /////////////////////////////////////////////// // Options //////////////////////////////////// diff --git a/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs b/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs index 5366a82..48df884 100644 --- a/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs +++ b/_DOTween.Assembly/DOTweenUpgradeManager/Autorun.cs @@ -3,27 +3,47 @@ // License Copyright (c) Daniele Giardini // This work is subject to the terms at http://dotween.demigiant.com/license.php +using System; using UnityEditor; using UnityEditor.Callbacks; using UnityEngine; +using DateTime = System.DateTime; namespace DG.DOTweenUpgradeManager { /// - /// This class and its whole library are deleted the first time DOTween's setup is run after an upgrade (or after a new install) + /// This class and its whole library are deleted the first time DOTween's setup is run after an upgrade (or after a new install). + /// NOTE: DidReloadScripts doesn't work on first install so it's useless, InitializeOnLoad is the only way /// + [InitializeOnLoad] static class Autorun { - [DidReloadScripts] - static void DidReloadScripts() + static readonly string _Id = "DOTweenUpgradeManager"; + + static Autorun() { - EditorUtility.DisplayDialog("DOTween", - "New version of DOTween imported: SETUP REQUIRED." + - "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to set it up and to add/remove Modules." + - "\n\nIMPORTANT: if you were upgrading from a DOTween version older than 1.2.000 you will see lots of errors." + - " Close and reopen your project, then open DOTween's Utility Panel and run the Setup to activate required Modules.", - "Ok" - ); + _Id = Application.dataPath + _Id; + + bool refresh; + DateTime now = DateTime.UtcNow; + DateTime lastTime; + if (!EditorPrefs.HasKey(_Id) || !DateTime.TryParse(EditorPrefs.GetString(_Id), out lastTime)) { + refresh = true; + } else { + refresh = (now - lastTime).TotalSeconds > 60; + } + if (refresh) { + EditorPrefs.SetString(_Id, now.ToString()); + EditorUtility.DisplayDialog("DOTween", + "DOTWEEN SETUP REQUIRED: new version imported." + + "\n\nSelect \"Setup DOTween...\" in DOTween's Utility Panel to set it up and add/remove Modules." + + "\n\n::::: IMPORTANT :::::" + + "\nIf you're upgrading from a DOTween version older than 1.2.000 you will see lots of errors." + + "\n1) Close and reopen the project (if you haven't already done so)" + + "\n2) Open DOTween's Utility Panel and run the Setup to activate required Modules", + "Ok" + ); + } } } } \ No newline at end of file From cbc30f3aa1f49140c493567b9864f2e0ba92fa0f Mon Sep 17 00:00:00 2001 From: Demigiant Date: Tue, 17 Jul 2018 12:05:57 +0200 Subject: [PATCH 09/14] - minor --- .../Demigiant/DOTween/Editor/DOTweenEditor.pdb.meta | 8 -------- _DOTween.Assembly/DOTween/DOTween.cs | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.pdb.meta diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.pdb.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.pdb.meta deleted file mode 100644 index 7e9a327..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.pdb.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 22a87305a04c84e40964cdfae301554e -timeCreated: 1449422216 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index e7d52a7..fd44bde 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -32,7 +32,7 @@ namespace DG.Tweening public class DOTween { /// DOTween's version - public static readonly string Version = "1.2.002"; // Last version before modules: 1.1.755 + public static readonly string Version = "1.2.003"; // Last version before modules: 1.1.755 /////////////////////////////////////////////// // Options //////////////////////////////////// From 8bb776f1786152a22d1a94799279e0f86b674ca6 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Tue, 17 Jul 2018 12:35:27 +0200 Subject: [PATCH 10/14] - minor --- .../Assets/_Tests/RectTransformConversionTests.cs | 2 +- _DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/UnityTests.Unity5/Assets/_Tests/RectTransformConversionTests.cs b/UnityTests.Unity5/Assets/_Tests/RectTransformConversionTests.cs index 54d710a..29d7d3e 100644 --- a/UnityTests.Unity5/Assets/_Tests/RectTransformConversionTests.cs +++ b/UnityTests.Unity5/Assets/_Tests/RectTransformConversionTests.cs @@ -33,7 +33,7 @@ public class RectTransformConversionTests : BrainBase Vector2 bPivotDerivedOffset = new Vector2(b.rect.width * 0.5f + b.rect.xMin, b.rect.height * 0.5f + b.rect.yMin); Debug.Log(bPivotDerivedOffset); b.anchoredPosition = b.anchoredPosition + localPoint - bPivotDerivedOffset; - Debug.Log(b.anchoredPosition + " - " + DOTweenUtils46.SwitchToRectTransform(a, b)); +// Debug.Log(b.anchoredPosition + " - " + DOTweenUtils46.SwitchToRectTransform(a, b)); } string ArrayToString(IList list) diff --git a/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs index 3206f31..1c45f75 100644 --- a/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs +++ b/_DOTween.Assembly/DOTweenEditor/UI/DOTweenUtilityWindow.cs @@ -110,7 +110,10 @@ namespace DG.DOTweenEditor.UI GUILayout.EndHorizontal(); } else { if (_isModulesMode) { - if (DOTweenUtilityWindowModules.Draw()) _isModulesMode = false; + if (DOTweenUtilityWindowModules.Draw()) { + _setupRequired = EditorUtils.DOTweenSetupRequired(); + _isModulesMode = false; + } } else { Rect areaRect = new Rect(0, 0, _headerSize.x, 30); _selectedTab = UnityEngine.GUI.Toolbar(areaRect, _selectedTab, _tabLabels); From 9b3731b2a499066d2e0fcbbb38f8951237a090d0 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Wed, 18 Jul 2018 10:27:54 +0200 Subject: [PATCH 11/14] - minor --- _DOTween.Assembly/DOTween/DOTween.cs | 2 +- _DOTween.Assembly/PostBuild_DOTween.bat | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index fd44bde..6e5187f 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -32,7 +32,7 @@ namespace DG.Tweening public class DOTween { /// DOTween's version - public static readonly string Version = "1.2.003"; // Last version before modules: 1.1.755 + public static readonly string Version = "1.2.004"; // Last version before modules: 1.1.755 /////////////////////////////////////////////// // Options //////////////////////////////////// diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat index ec5a9b7..2c48a7b 100644 --- a/_DOTween.Assembly/PostBuild_DOTween.bat +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -47,16 +47,16 @@ set CopyToDirModulesTest=%1..\ModulesTest.Unity2018\Assets\Demigiant\%5%SubDir% :: Modules test project echo ::: Exporting from %CopyFromDir% to %CopyToDirModulesTest% echo f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E -:: UnityTests.Unity5 -echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% -echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E -exit /B -:: bin.Global -echo ::: Exporting from %CopyFromDir% to %CopyToDir% -echo f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E +:: bin.Global - Ignore, not good anymore +:: echo ::: Exporting from %CopyFromDir% to %CopyToDir% +:: echo f | xcopy %CopyFromDir% %CopyToDir% /Y /I /E :: bin.Global_no_meta echo ::: Exporting from %CopyFromDir% to %CopyToDirNoMeta% echo f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E +exit /B +:: UnityTests.Unity5 +echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% +echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E :: UnityTests.Unity4 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnityTests% echo f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E From fc3b5a198c0fe1f0bdd3367ca2f82847f283a796 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Wed, 18 Jul 2018 19:21:36 +0200 Subject: [PATCH 12/14] - minor --- _DOTween.Assembly/PostBuild_DOTween.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_DOTween.Assembly/PostBuild_DOTween.bat b/_DOTween.Assembly/PostBuild_DOTween.bat index 2c48a7b..e59dafd 100644 --- a/_DOTween.Assembly/PostBuild_DOTween.bat +++ b/_DOTween.Assembly/PostBuild_DOTween.bat @@ -53,10 +53,10 @@ echo f | xcopy %CopyFromDir% %CopyToDirModulesTest% /Y /I /E :: bin.Global_no_meta echo ::: Exporting from %CopyFromDir% to %CopyToDirNoMeta% echo f | xcopy %CopyFromDir% %CopyToDirNoMeta% /Y /I /E -exit /B :: UnityTests.Unity5 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnity5Tests% echo f | xcopy %CopyFromDir% %CopyToDirUnity5Tests% /Y /I /E +exit /B :: UnityTests.Unity4 echo ::: Exporting from %CopyFromDir% to %CopyToDirUnityTests% echo f | xcopy %CopyFromDir% %CopyToDirUnityTests% /Y /I /E From 3097de22c401c546baf6cf0b04d3a285f88efa35 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Wed, 18 Jul 2018 19:29:28 +0200 Subject: [PATCH 13/14] - readme update --- _DOTween.Assembly/bin/readme.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/_DOTween.Assembly/bin/readme.txt b/_DOTween.Assembly/bin/readme.txt index 3439db1..aa60e6f 100644 --- a/_DOTween.Assembly/bin/readme.txt +++ b/_DOTween.Assembly/bin/readme.txt @@ -1,8 +1,17 @@ DOTween and DOTween Pro are copyright (c) 2014 Daniele Giardini - Demigiant +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate all Modules for the tweens you were using (all of them, probably) + // GET STARTED ////////////////////////////////////////////// -- After importing a new DOTween update, select DOTween's Utility Panel from the Tools menu (if it doesn't open automatically) and press the "Setup DOTween..." button to set up additional features based on your Unity version. +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. - In your code, add "using DG.Tweening" to each class where you want to use DOTween. - You're ready to tween. Check out the links below for full documentation and license info. @@ -12,7 +21,8 @@ DOTween and DOTween Pro are copyright (c) 2014 Daniele Giardini - Demigiant DOTween website (documentation, examples, etc): http://dotween.demigiant.com DOTween license: http://dotween.demigiant.com/license.php DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com // NOTES ////////////////////////////////////////////////////// -- DOTween's Utility Panel can be found under "Tools > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file From f61f98855d6701c5e04e50602b3e4cf5ed3222b2 Mon Sep 17 00:00:00 2001 From: Demigiant Date: Wed, 1 Aug 2018 10:26:40 +0200 Subject: [PATCH 14/14] Modules upgrade complete --- .../Assets/Demigiant/DOTween/DOTween.XML | 138 ++--- .../Assets/Demigiant/DOTween/DOTween.dll | Bin 145920 -> 161280 bytes .../Assets/Demigiant/DOTween/DOTween.dll.mdb | Bin 56396 -> 66083 bytes .../Assets/Demigiant/DOTween/DOTween43.dll | Bin 9728 -> 0 bytes .../Demigiant/DOTween/DOTween43.dll.mdb | Bin 1830 -> 0 bytes .../Demigiant/DOTween/DOTween43.dll.mdb.meta | 8 - .../Demigiant/DOTween/DOTween43.dll.meta | 24 - .../Assets/Demigiant/DOTween/DOTween43.xml | 85 --- .../Demigiant/DOTween/DOTween43.xml.meta | 8 - .../Assets/Demigiant/DOTween/DOTween46.dll | Bin 21504 -> 0 bytes .../Demigiant/DOTween/DOTween46.dll.mdb | Bin 6364 -> 0 bytes .../Demigiant/DOTween/DOTween46.dll.mdb.meta | 8 - .../Demigiant/DOTween/DOTween46.dll.meta | 24 - .../Assets/Demigiant/DOTween/DOTween46.xml | 279 --------- .../Demigiant/DOTween/DOTween46.xml.meta | 8 - .../Assets/Demigiant/DOTween/DOTween50.dll | Bin 7680 -> 0 bytes .../Demigiant/DOTween/DOTween50.dll.mdb | Bin 1780 -> 0 bytes .../Demigiant/DOTween/DOTween50.dll.mdb.meta | 8 - .../Demigiant/DOTween/DOTween50.dll.meta | 24 - .../Assets/Demigiant/DOTween/DOTween50.xml | 163 ----- .../Demigiant/DOTween/DOTween50.xml.meta | 8 - .../DOTween/Editor/DOTweenEditor.XML | 42 +- .../DOTween/Editor/DOTweenEditor.dll | Bin 34816 -> 37888 bytes .../DOTween/Editor/DOTweenEditor.dll.mdb | Bin 5426 -> 7454 bytes .../Assets/Demigiant/DOTween/Modules.meta | 9 + .../DOTween/Modules/DOTweenModuleAudio.cs | 193 ++++++ .../Modules/DOTweenModuleAudio.cs.meta | 12 + .../DOTween/Modules/DOTweenModulePhysics.cs | 212 +++++++ .../Modules/DOTweenModulePhysics.cs.meta | 12 + .../DOTween/Modules/DOTweenModulePhysics2D.cs | 101 ++++ .../Modules/DOTweenModulePhysics2D.cs.meta | 12 + .../DOTween/Modules/DOTweenModuleSprite.cs | 88 +++ .../Modules/DOTweenModuleSprite.cs.meta | 12 + .../DOTween/Modules/DOTweenModuleUI.cs | 570 ++++++++++++++++++ .../DOTween/Modules/DOTweenModuleUI.cs.meta | 12 + .../Modules/DOTweenModuleUnityVersion.cs | 252 ++++++++ .../Modules/DOTweenModuleUnityVersion.cs.meta | 12 + .../DOTween/Modules/DOTweenModuleUtils.cs | 108 ++++ .../Modules/DOTweenModuleUtils.cs.meta | 12 + .../Assets/Demigiant/DOTween/readme.txt | 14 +- .../ExternalPluginsStubs/TextMeshProStubs.cs | 25 +- UnityTests.Unity5/Assets/_Tests/TempTests.cs | 20 +- .../Assets/_Tests/TempTests.unity | Bin 24608 -> 25752 bytes .../ProjectSettings/ProjectSettings.asset | Bin 55458 -> 56406 bytes _DOTween.Assembly/bin/DOTween.XML | 138 ++--- _DOTween.Assembly/bin/DOTween.dll | Bin 145920 -> 161280 bytes _DOTween.Assembly/bin/DOTween.dll.mdb | Bin 56396 -> 66083 bytes .../bin/Editor/DOTweenEditor.XML | 42 +- .../bin/Editor/DOTweenEditor.dll | Bin 34816 -> 37888 bytes .../bin/Editor/DOTweenEditor.dll.mdb | Bin 5426 -> 7454 bytes .../bin/Editor/DOTweenUpgradeManager.XML | 14 + .../bin/Editor/DOTweenUpgradeManager.dll | Bin 0 -> 6144 bytes .../bin/Editor/DOTweenUpgradeManager.dll.mdb | Bin 0 -> 385 bytes 53 files changed, 1822 insertions(+), 875 deletions(-) delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll.mdb delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll.mdb.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll.meta delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.xml delete mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.xml.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs create mode 100644 UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta create mode 100644 _DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.XML create mode 100644 _DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll create mode 100644 _DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll.mdb diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.XML b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.XML index 2c3ec4d..0001102 100644 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.XML +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.XML @@ -179,6 +179,26 @@ Public only so custom shortcuts can access some of these methods + + + INTERNAL: used by DO shortcuts and Modules to set special startup mode + + + + + INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + + + + + INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + + + + + Used to dispatch commands that need to be captured externally, usually by Modules + + Returns a Vector3 with z = 0 @@ -195,6 +215,11 @@ because the latter fails (in some cases) when assigning a Vector3 to a transform.position and then checking it. + + + Looks for the type withing all possible project assembly names + + Struct that stores two colors (used for LineRenderer tweens) @@ -1239,16 +1264,6 @@ Methods that extend known Unity objects and allow to directly create and control tweens from their instances - - Tweens an AudioSource's volume to the given value. - Also stores the AudioSource as the tween's target so it can be used for filtered operations - The end value to reach (0 to 1)The duration of the tween - - - Tweens an AudioSource's pitch to the given value. - Also stores the AudioSource as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - Tweens a Camera's aspect to the given value. Also stores the camera as the tween's target so it can be used for filtered operations @@ -1418,81 +1433,6 @@ The name of the material property to tween The duration of the tween - - Tweens a Rigidbody's position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's X position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's Y position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's Z position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's rotation to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - Rotation mode - - - Tweens a Rigidbody's rotation so that it will look towards the given position. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The position to look atThe duration of the tween - Eventual axis constraint for the rotation - The vector that defines in which direction up is (default: Vector3.up) - - - Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations. - NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. - BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). - If you plan to publish there you should use a regular transform.DOPath. - The waypoints to go through - The duration of the tween - The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) - The path mode: 3D, side-scroller 2D, top-down 2D - The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. - Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints - The color of the path (shown when gizmos are active in the Play panel and the tween is running) - - - Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations - NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. - BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). - If you plan to publish there you should use a regular transform.DOLocalPath. - The waypoint to go through - The duration of the tween - The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) - The path mode: 3D, side-scroller 2D, top-down 2D - The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. - Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints - The color of the path (shown when gizmos are active in the Play panel and the tween is running) - Tweens a TrailRenderer's startWidth/endWidth to the given value. Also stores the TrailRenderer as the tween's target so it can be used for filtered operations @@ -1743,6 +1683,22 @@ Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's position via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's localPosition via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + Tweens a Tween's timeScale to the given value. Also stores the Tween as the tween's target so it can be used for filtered operations @@ -2523,9 +2479,21 @@ Called when a path tween's current waypoint changes + + Tweeners-only (ignored by Sequences), returns TRUE if the tween was set as relative + + + FALSE when tween is (or should be) despawned - set only by TweenManager + Gets and sets the time position (loops included, delays excluded) of the tween + + TRUE after the tween was set in a play state at least once, AFTER any delay is elapsed + + + Time position within a single loop cycle + Animates a single value diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.dll b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.dll index dd8bf57fea9c535dd08a6a0b106dd0b3ab51af78..7a86edc83ba9b98275928f74e82c2358ed45a25b 100644 GIT binary patch literal 161280 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 z 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

q}Bg6I)9btR%IqB(=RHwWB0;eMxFb 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 G;Qs-k(?nYU diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.dll.mdb b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween.dll.mdb index 7e60f1b9f934f5f856c20fe1285379e01de60328..25287c6d18156cd7d3458536a9c89cd20d3ab64e 100644 GIT binary patch literal 66083 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 literal 56396 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 Mk^L6=e_w(B1Y7P-zW@LL diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb deleted file mode 100644 index eb000af284ddd351d74945d8498e8639d37d3dd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1830 zcmbVNZDrhJd50C?|bbZJlLlc)p<7G>3z89dcK#a8n4PdL<~F?zjd(C z6Qs_8zJ&JyVaiA3iDw9ph&KQQSRa@h3M>wV1JMo9m{lDLhu>ZLcG=3pu)nk@7%UEk z!b_}}wV^T=i{f2iS=q*DG>&jr%qX($XjOUa!;my)7lwlCt(runHc`AO5sllGR@|Ol zI3r@$<_50zcl^AhY3SEdHF@I9j_;eV4gAxX*i$plx|_-gi5Y0bY{s+*My#=!!eh}m zCBbCuTt96=6ug1PTHR_>8-N)0T1og8nD-+EY{MDyib`-Y}M#T?c%d1riK&$ z)@Zx;W1OT>Mx389VtP2S$xElb9iu0fcpOc~D#@*)vG*A*XA%Eu`2Y;GtMo$bEi zr9SV#=;f@8YQKp-()u{@oj2>$u6KzmfQXkk<$87cQ~&ERYfz{EbmyW#RM3gqW6)>D z=i=UYWTg!{YJ4TFEl$*T2AwocN$V5lc;^l3GJcX?gX{fb&~@X6^l*GcYj+LmGyauc zo9lgK(k`>kbVrq5%A|wlA?bCvao?KMY#x_hr|Y$w)M0i$?sc1V#q5E{h*w*CnA!54s+pl^e30+XO0g6{$N$I-IUxDMn(=LrU;K)(r|2~3490SADWp~K)6z%=N3 b@K)dz=tgh~$b&uy{sF*pIsbZs`+@%fLzRLR diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb.meta deleted file mode 100644 index da5d44d..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.mdb.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 589b8271dd960624a8620bca5ed778db -timeCreated: 1431691486 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.meta deleted file mode 100644 index e3b9c77..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.dll.meta +++ /dev/null @@ -1,24 +0,0 @@ -fileFormatVersion: 2 -guid: cc98104edfc2736418636b4b8c0e3b0b -timeCreated: 1431691492 -licenseType: Free -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Any: - enabled: 1 - settings: {} - Editor: - enabled: 0 - settings: - DefaultValueInitialized: true - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml deleted file mode 100644 index f0efe2b..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - DOTween43 - - - -

- Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween43 methods, require Unity 4.3 or later. - - - - Tweens a Material's color using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens a Material's named color property using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to use - The name of the material property to tween (like _Tint or _SpecColor) - The duration of the tween - - - Tweens a SpriteRenderer's color to the given value. - Also stores the spriteRenderer as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Material's alpha color to the given value. - Also stores the spriteRenderer as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a SpriteRenderer's color using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens a Rigidbody2D's position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's X position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's Y position to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody2D's rotation to the given value. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. - IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a SpriteRenderer's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml.meta deleted file mode 100644 index 5cddc00..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween43.xml.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6e08c600d5d981242b5d3c1d825106d6 -timeCreated: 1431691500 -licenseType: Free -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll deleted file mode 100644 index 79daf788f55c9929e95fc08205fc313d0c403ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 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 diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb deleted file mode 100644 index 07e780077ab5392a30b682de78bb5de429b76bd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6364 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 diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb.meta deleted file mode 100644 index 3ca948a..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.mdb.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 773153d471589be45acb355405a2bcf5 -timeCreated: 1431691486 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.meta deleted file mode 100644 index 5379401..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.dll.meta +++ /dev/null @@ -1,24 +0,0 @@ -fileFormatVersion: 2 -guid: da65c15675bf19f4c953026614098b09 -timeCreated: 1431691492 -licenseType: Free -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Any: - enabled: 1 - settings: {} - Editor: - enabled: 0 - settings: - DefaultValueInitialized: true - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml deleted file mode 100644 index 4c0ff32..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml +++ /dev/null @@ -1,279 +0,0 @@ - - - - DOTween46 - - - - - Various utils that require Unity 4.6 or later - - - - - Converts the anchoredPosition of the first RectTransform to the second RectTransform, - taking into consideration offset, anchors and pivot, and returns the new anchoredPosition - - - - - Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween46 methods, require Unity 4.6 or later. - - - - Tweens a CanvasGroup's alpha color to the given value. - Also stores the canvasGroup as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Graphic's color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Graphic's alpha color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's alpha color to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens an Image's fillAmount to the given value. - Also stores the image as the tween's target so it can be used for filtered operations - The end value to reach (0 to 1)The duration of the tween - - - Tweens an Image's colors using the given gradient - (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). - Also stores the image as the tween's target so it can be used for filtered operations - The gradient to useThe duration of the tween - - - Tweens an LayoutElement's flexibleWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens an LayoutElement's minWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens an LayoutElement's preferredWidth/Height to the given value. - Also stores the LayoutElement as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Outline's effectColor to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Outline's effectColor alpha to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Outline's effectDistance to the given value. - Also stores the Outline as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's anchoredPosition to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchoredPosition3D Z to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchorMax to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's anchorMin to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a RectTransform's pivot to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's pivot X to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's pivot Y to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a RectTransform's sizeDelta to the given value. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one - as if it was connected to the starting position via an elastic. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The direction and strength of the punch (added to the RectTransform's current position) - The duration of the tween - Indicates how much will the punch vibrate - Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. - 1 creates a full oscillation between the punch direction and the opposite direction, - while 0 oscillates only between the punch and the start position - If TRUE the tween will smoothly snap all values to integers - - - Shakes a RectTransform's anchoredPosition with the given values. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The duration of the tween - The shake strength - Indicates how much will the shake vibrate - Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). - Setting it to 0 will shake along a single direction. - If TRUE the tween will smoothly snap all values to integers - If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not - - - Shakes a RectTransform's anchoredPosition with the given values. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The duration of the tween - The shake strength on each axis - Indicates how much will the shake vibrate - Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). - Setting it to 0 will shake along a single direction. - If TRUE the tween will smoothly snap all values to integers - If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not - - - Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the RectTransform as the tween's target so it can be used for filtered operations - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's horizontalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a ScrollRect's verticalNormalizedPosition to the given value. - Also stores the ScrollRect as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Slider's value to the given value. - Also stores the Slider as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Text's color to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Text's alpha color to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - - - Tweens a Text's text to the given value. - Also stores the Text as the tween's target so it can be used for filtered operations - The end string to tween toThe duration of the tween - If TRUE (default), rich text will be interpreted correctly while animated, - otherwise all tags will be considered as normal text - The type of scramble mode to use, if any - A string containing the characters to use for scrambling. - Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. - Leave it to NULL (default) to use default ones - - - Tweens a Graphic's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Graphic as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - Tweens a Image's color to the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Image as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - Tweens a Text's color BY the given value, - in a way that allows other DOBlendableColor tweens to work together on the same target, - instead than fight each other as multiple DOColor would do. - Also stores the Text as the tween's target so it can be used for filtered operations - The value to tween toThe duration of the tween - - - diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml.meta deleted file mode 100644 index e9cd763..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween46.xml.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d27835d6231b6aa48841c3f8b2214fa8 -timeCreated: 1431691500 -licenseType: Free -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll deleted file mode 100644 index d8acdcd51f9826ae3497791f3ab671de348477d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll.mdb b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.dll.mdb deleted file mode 100644 index 47d825a71f6178a169cb146ca5c59c63109888d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmb`Ik580!9LGP;-96vuc}@x|0#Xspi_8_G=mv(RyF^!|SDxo7?Xe#iUXZ(g78 zb9|of_xn7gwXMH9E$4FaY)TBhYv+ahUxyd%_4K_IZ5dZP%7|8@)axL!!!P3ZOgPWo zW}b>%AQQzT1at7~_!z@b;TmLvsy*|3p2a@DN3Yk7&}yIG|MJq(@``-FyKJG?TkQ4u zOF~AdzQ!D+2N^<2KqIabG-iNy`5)G}YsL_q8(qJSSt_wu@ zvLx5cU2zXZi-(R&a~2Q8mwYmM;#}>S*v|D?{U2Pt{Kxd18Q0dF_00|wwiR249hWH8 z?R6DBSK#*>p+Kb($&)0B?{F$T&-Y$hph5NwTbe|u9Cpx2M;{IjhW%-QE;;Bo$L}U8 z6zCrZ{p+}6BDX->WQxh#aiaKz%LHnY>44m9qE`j_T&52Bh>5BM>XxZT{>nr_fd*vy zLB3$3wE|s{X+-|hL>nc+?#lF^JZ7?3g6(3on>8d3vb{0EK4jF!+D+D+V4aNOtc$bc zYGjkcW}hIvu;ke+Fk3&Puh~H2A{3so3fCB2XE&@ufmPV7&=zH@B31xblvsskg<6zW ztFXc0`cIBMRMC#u8tE-Z^Se zX^;9oe|(cSHkllD`*>cox2e>we#VQ$;iFQKo8vE4>Q;L!oGs=Ks`R6J(Sj~>?sb)J zs5dQ~E9P#}XtTD3zc0l1=9_c(YP3(=Z{hi3Zihxkw4)YuW3Fi8lt#T;pT(Do$vn(C&JU9 z6y%xk>CgknZg>&&AaWIa1(b^XHhc{<9=Q?z9`q3Mr|^T&!^pkxFQ7+|hvDa;bYu-T zVS_S|C&AMpy#HAtd=~T=@-p}$Xacehe;t~L{1!Y6O+wxU-wI_Re*|xWCL^DKAA_=y z&%;kcQ;@H~e}SeV+pu_lBR`Iuft(6WL(YY}Anb+sABCl&JBekY4S<}x06BjWAGjr& G0skLprD4 - - - DOTween50 - - - - - Methods that extend known Unity objects and allow to directly create and control tweens from their instances. - These, as all DOTween50 methods, require Unity 5.0 or later. - - - - Tweens an AudioMixer's exposed float to the given value. - Also stores the AudioMixer as the tween's target so it can be used for filtered operations. - Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. - Name given to the exposed float to set - The end value to reachThe duration of the tween - - - - Completes all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens completed - (meaning the tweens that don't have infinite loops and were not already complete) - - For Sequences only: if TRUE also internal Sequence callbacks will be fired, - otherwise they will be ignored - - - - Kills all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens killed. - - If TRUE completes the tween before killing it - - - - Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens flipped. - - - - - Sends to the given position all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens involved. - - Time position to reach - (if higher than the whole tween duration the tween will simply reach its end) - If TRUE will play the tween after reaching the given position, otherwise it will pause it - - - - Pauses all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens paused. - - - - - Plays all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Plays backwards all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Plays forward all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens played. - - - - - Restarts all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens restarted. - - - - - Rewinds all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens rewinded. - - - - - Smoothly rewinds all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens rewinded. - - - - - Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference - (meaning tweens that were started from this target, or that had this target added as an Id) - and returns the total number of tweens involved. - - - - - Methods that extend Tween objects and allow to control or get data from them. - These require at least Unity 5.3 - - - - - Returns a that waits until the tween is killed or complete. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForCompletion(true); - - - - - Returns a that waits until the tween is killed or rewinded. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForRewind(); - - - - - Returns a that waits until the tween is killed. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForKill(); - - - - - Returns a that waits until the tween is killed or has gone through the given amount of loops. - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForElapsedLoops(2); - - Elapsed loops to wait for - - - - Returns a that waits until the tween is killed or has reached the given position (loops included, delays excluded). - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForPosition(2.5f); - - Position (loops included, delays excluded) to wait for - - - - Returns a that waits until the tween is killed or started - (meaning when the tween is set in a playing state the first time, after any eventual delay). - It can be used inside a coroutine as a yield. - Example usage:yield return myTween.WaitForStart(); - - - - diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.xml.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.xml.meta deleted file mode 100644 index e78bf41..0000000 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/DOTween50.xml.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3a6814e095786e74faa2c054ea887651 -timeCreated: 1431691500 -licenseType: Free -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.XML b/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.XML index 6afe743..6666e3e 100644 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.XML +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.XML @@ -4,37 +4,37 @@ DOTweenEditor - + Checks that the given editor texture use the correct import settings, and applies them if they're incorrect. - + - Returns TRUE if addons setup is required. + Returns TRUE if setup is required - + Returns TRUE if the file/directory at the given path exists. Path, relative to Unity's project folder - + Converts the given project-relative path to a full path, with backward (\) slashes). - + Converts the given full path to a path usable with AssetDatabase methods (relative to Unity's project folder, and with the correct Unity forward (/) slashes). - + Connects to a asset. If the asset already exists at the given path, loads it and returns it. @@ -45,21 +45,33 @@ File path (relative to Unity's project folder) If TRUE and the requested asset doesn't exist, forces its creation - + Full path for the given loaded assembly, assembly file included - + + + Adds the given global define if it's not already present + + + + + Removes the given global define if it's present + + + + + Returns TRUE if the given global define is present in all the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them. + + Not used as menu item anymore, but as a utiity function - - - Setups DOTween - - If TRUE, no warning window appears in case there is no need for setup - diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.dll b/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.dll index abd34df37ba4d4866517726edbc2ee850f4bb3fc..84a3ac5f860fdb3883dc2643df09baba35db57b1 100644 GIT binary patch literal 37888 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 L|6c$9v%voW5zn~j literal 34816 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 M`2TJGZ??ey07y2RegFUf diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.dll.mdb b/UnityTests.Unity5/Assets/Demigiant/DOTween/Editor/DOTweenEditor.dll.mdb index e0918e30d3d30dcce186f16fba29922e13da9f75..30eb36c189b4c418856c0335d9c1387c465811e3 100644 GIT binary patch literal 7454 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 literal 5426 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 an AudioSource's volume to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static Tweener DOFade(this AudioSource target, float endValue, float duration) + { + if (endValue < 0) endValue = 0; + else if (endValue > 1) endValue = 1; + return DOTween.To(() => target.volume, x => target.volume = x, endValue, duration).SetTarget(target); + } + + /// Tweens an AudioSource's pitch to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPitch(this AudioSource target, float endValue, float duration) + { + return DOTween.To(() => target.pitch, x => target.pitch = x, endValue, duration).SetTarget(target); + } + + #endregion + +#if UNITY_5 || UNITY_2017_1_OR_NEWER + #region AudioMixer (Unity 5 or Newer) + + /// Tweens an AudioMixer's exposed float to the given value. + /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. + /// Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. + /// Name given to the exposed float to set + /// The end value to reachThe duration of the tween + public static Tweener DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) + { + return DOTween.To(()=> { + float currVal; + target.GetFloat(floatName, out currVal); + return currVal; + }, x=> target.SetFloat(floatName, x), endValue, duration) + .SetTarget(target); + } + + #region Operation Shortcuts + + /// + /// Completes all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens completed + /// (meaning the tweens that don't have infinite loops and were not already complete) + /// + /// For Sequences only: if TRUE also internal Sequence callbacks will be fired, + /// otherwise they will be ignored + public static int DOComplete(this AudioMixer target, bool withCallbacks = false) + { + return DOTween.Complete(target, withCallbacks); + } + + /// + /// Kills all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens killed. + /// + /// If TRUE completes the tween before killing it + public static int DOKill(this AudioMixer target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens flipped. + /// + public static int DOFlip(this AudioMixer target) + { + return DOTween.Flip(target); + } + + /// + /// Sends to the given position all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + /// Time position to reach + /// (if higher than the whole tween duration the tween will simply reach its end) + /// If TRUE will play the tween after reaching the given position, otherwise it will pause it + public static int DOGoto(this AudioMixer target, float to, bool andPlay = false) + { + return DOTween.Goto(target, to, andPlay); + } + + /// + /// Pauses all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens paused. + /// + public static int DOPause(this AudioMixer target) + { + return DOTween.Pause(target); + } + + /// + /// Plays all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlay(this AudioMixer target) + { + return DOTween.Play(target); + } + + /// + /// Plays backwards all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayBackwards(this AudioMixer target) + { + return DOTween.PlayBackwards(target); + } + + /// + /// Plays forward all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayForward(this AudioMixer target) + { + return DOTween.PlayForward(target); + } + + /// + /// Restarts all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens restarted. + /// + public static int DORestart(this AudioMixer target) + { + return DOTween.Restart(target); + } + + /// + /// Rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DORewind(this AudioMixer target) + { + return DOTween.Rewind(target); + } + + /// + /// Smoothly rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DOSmoothRewind(this AudioMixer target) + { + return DOTween.SmoothRewind(target); + } + + /// + /// Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + public static int DOTogglePause(this AudioMixer target) + { + return DOTween.TogglePause(target); + } + + #endregion + + #endregion +#endif + + #endregion + } +} +#endif diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta new file mode 100644 index 0000000..08a8ee7 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0223eae4c5094ed4dbfa04756ed4dd63 +timeCreated: 1531903663 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs new file mode 100644 index 0000000..dca71a0 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,212 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTPHYSICS +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration) + .SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static Tweener DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static Tweener DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta new file mode 100644 index 0000000..587bfaa --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b013f26d887cf94e839b467ef843e07 +timeCreated: 1531903664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 0000000..ba8625f --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,101 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTPHYSICS2D && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) +using System; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics2D + { + #region Shortcuts + + #region Rigidbody2D Shortcuts + + /// Tweens a Rigidbody2D's position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMove(this Rigidbody2D target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's X position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveX(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's Y position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMoveY(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.position, target.MovePosition, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a Rigidbody2D's rotation to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DORotate(this Rigidbody2D target, float endValue, float duration) + { + return DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration) + .SetTarget(target); + } + + #region Special + + /// Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody2D target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, x => target.position = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, x => target.position = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta new file mode 100644 index 0000000..a3b9feb --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d023370de51f832488edc0b181cd9e20 +timeCreated: 1531903664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs new file mode 100644 index 0000000..21f5d60 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,88 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTSPRITE && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) +using System; +using UnityEngine; +using DG.Tweening.Core; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleSprite + { + #region Shortcuts + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this SpriteRenderer target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Material's alpha color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this SpriteRenderer target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a SpriteRenderer's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this SpriteRenderer target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #region Blendables + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this SpriteRenderer target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta new file mode 100644 index 0000000..ad4c826 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 27bcd8d6727d42c499cdcb2e021873a2 +timeCreated: 1531903663 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs new file mode 100644 index 0000000..de800d5 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs @@ -0,0 +1,570 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if DOTUI && (UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) +using System; +using UnityEngine; +using UnityEngine.UI; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUI + { + #region Shortcuts + + #region CanvasGroup + + /// Tweens a CanvasGroup's alpha color to the given value. + /// Also stores the canvasGroup as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this CanvasGroup target, float endValue, float duration) + { + return DOTween.To(() => target.alpha, x => target.alpha = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region Graphic + + /// Tweens an Graphic's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Graphic target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens an Graphic's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Graphic target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens an Image's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Image target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens an Image's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Image target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens an Image's fillAmount to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static Tweener DOFillAmount(this Image target, float endValue, float duration) + { + if (endValue > 1) endValue = 1; + else if (endValue < 0) endValue = 0; + return DOTween.To(() => target.fillAmount, x => target.fillAmount = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens an Image's colors using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Image target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #region LayoutElement + + /// Tweens an LayoutElement's flexibleWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { + target.flexibleWidth = x.x; + target.flexibleHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens an LayoutElement's minWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { + target.minWidth = x.x; + target.minHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens an LayoutElement's preferredWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { + target.preferredWidth = x.x; + target.preferredHeight = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Outline + + /// Tweens a Outline's effectColor to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Outline target, Color endValue, float duration) + { + return DOTween.To(() => target.effectColor, x => target.effectColor = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Outline's effectColor alpha to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Outline target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.effectColor, x => target.effectColor = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a Outline's effectDistance to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOScale(this Outline target, Vector2 endValue, float duration) + { + return DOTween.To(() => target.effectDistance, x => target.effectDistance = x, endValue, duration) + .SetTarget(target); + } + + #endregion + + #region RectTransform + + /// Tweens a RectTransform's anchoredPosition to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPosX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPosY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchoredPosition3D to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3D(this RectTransform target, Vector3 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(endValue, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, endValue, 0), duration) + .SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + } + /// Tweens a RectTransform's anchoredPosition3D Z to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorPos3DZ(this RectTransform target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, 0, endValue), duration) + .SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchorMax to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorMax(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchorMax, x => target.anchorMax = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a RectTransform's anchorMin to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOAnchorMin(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.anchorMin, x => target.anchorMin = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Tweens a RectTransform's pivot to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivot(this RectTransform target, Vector2 endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, endValue, duration) + .SetTarget(target); + } + /// Tweens a RectTransform's pivot X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivotX(this RectTransform target, float endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(endValue, 0), duration) + .SetOptions(AxisConstraint.X).SetTarget(target); + } + /// Tweens a RectTransform's pivot Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOPivotY(this RectTransform target, float endValue, float duration) + { + return DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(0, endValue), duration) + .SetOptions(AxisConstraint.Y).SetTarget(target); + } + + /// Tweens a RectTransform's sizeDelta to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSizeDelta(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.sizeDelta, x => target.sizeDelta = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + /// Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the RectTransform's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunchAnchorPos(this RectTransform target, Vector2 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.anchoredPosition, x => target.anchoredPosition = x, punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #region Special + + /// Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJumpAnchorPos(this RectTransform target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + + // Separate Y Tween so we can elaborate elapsedPercentage on that insted of on the Sequence + // (in case users add a delay or other elements to the Sequence) + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(()=> startPosY = target.anchoredPosition.y); + s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + s.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector2 pos = target.anchoredPosition; + pos.y += DOVirtual.EasedValue(0, offsetY, s.ElapsedDirectionalPercentage(), Ease.OutQuad); + target.anchoredPosition = pos; + }); + return s; + } + + #endregion + + #endregion + + #region ScrollRect + + /// Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), + x => { + target.horizontalNormalizedPosition = x.x; + target.verticalNormalizedPosition = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's horizontalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOHorizontalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.horizontalNormalizedPosition, x => target.horizontalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOVerticalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.verticalNormalizedPosition, x => target.verticalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Slider + + /// Tweens a Slider's value to the given value. + /// Also stores the Slider as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOValue(this Slider target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.value, x => target.value = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOColor(this Text target, Color endValue, float duration) + { + return DOTween.To(() => target.color, x => target.color = x, endValue, duration).SetTarget(target); + } + + /// Tweens a Text's alpha color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static Tweener DOFade(this Text target, float endValue, float duration) + { + return DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration) + .SetTarget(target); + } + + /// Tweens a Text's text to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static Tweener DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + return DOTween.To(() => target.text, x => target.text = x, endValue, duration) + .SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + } + + #endregion + + #region Blendables + + #region Graphic + + /// Tweens a Graphic's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Graphic as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Graphic target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens a Image's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Image as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Image target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color BY the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Text target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Utils + { + /// + /// Converts the anchoredPosition of the first RectTransform to the second RectTransform, + /// taking into consideration offset, anchors and pivot, and returns the new anchoredPosition + /// + public static Vector2 SwitchToRectTransform(RectTransform from, RectTransform to) + { + Vector2 localPoint; + Vector2 fromPivotDerivedOffset = new Vector2(from.rect.width * 0.5f + from.rect.xMin, from.rect.height * 0.5f + from.rect.yMin); + Vector2 screenP = RectTransformUtility.WorldToScreenPoint(null, from.position); + screenP += fromPivotDerivedOffset; + RectTransformUtility.ScreenPointToLocalPointInRectangle(to, screenP, null, out localPoint); + Vector2 pivotDerivedOffset = new Vector2(to.rect.width * 0.5f + to.rect.xMin, to.rect.height * 0.5f + to.rect.yMin); + return to.anchoredPosition + localPoint - pivotDerivedOffset; + } + } + } +} +#endif diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta new file mode 100644 index 0000000..f10970a --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd744f5b62ad0fb4391fa4499a84a8c0 +timeCreated: 1531903664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 0000000..751a0a7 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,252 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Shortcuts/functions that are not strictly related to specific Modules + /// but are available only on some Unity versions + /// + public static class DOTweenModuleUnityVersion + { +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER + #region Unity 4.3 or Newer + + #region Material + + /// Tweens a Material's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + /// Tweens a Material's named color property using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to use + /// The name of the material property to tween (like _Tint or _SpecColor) + /// The duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, string property, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, property, colorDuration).SetEase(Ease.Linear)); + } + return s; + } + + #endregion + + #endregion +#endif + +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER + #region CustomYieldInstructions (Unity 5.3 or Newer) + + /// + /// Returns a that waits until the tween is killed or complete. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForCompletion(true); + /// + public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForCompletion(t); + } + + /// + /// Returns a that waits until the tween is killed or rewinded. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForRewind(); + /// + public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForRewind(t); + } + + /// + /// Returns a that waits until the tween is killed. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForKill(); + /// + public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForKill(t); + } + + /// + /// Returns a that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForElapsedLoops(2); + /// + /// Elapsed loops to wait for + public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForElapsedLoops(t, elapsedLoops); + } + + /// + /// Returns a that waits until the tween is killed or has reached the given position (loops included, delays excluded). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForPosition(2.5f); + /// + /// Position (loops included, delays excluded) to wait for + public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForPosition(t, position); + } + + /// + /// Returns a that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForStart(); + /// + public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForStart(t); + } + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER + public static class DOTweenCYInstruction + { + public class WaitForCompletion : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.IsComplete(); + }} + readonly Tween t; + public WaitForCompletion(Tween tween) + { + t = tween; + } + } + + public class WaitForRewind : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); + }} + readonly Tween t; + public WaitForRewind(Tween tween) + { + t = tween; + } + } + + public class WaitForKill : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active; + }} + readonly Tween t; + public WaitForKill(Tween tween) + { + t = tween; + } + } + + public class WaitForElapsedLoops : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.CompletedLoops() < elapsedLoops; + }} + readonly Tween t; + readonly int elapsedLoops; + public WaitForElapsedLoops(Tween tween, int elapsedLoops) + { + t = tween; + this.elapsedLoops = elapsedLoops; + } + } + + public class WaitForPosition : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.position * (t.CompletedLoops() + 1) < position; + }} + readonly Tween t; + readonly float position; + public WaitForPosition(Tween tween, float position) + { + t = tween; + this.position = position; + } + } + + public class WaitForStart : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.playedOnce; + }} + readonly Tween t; + public WaitForStart(Tween tween) + { + t = tween; + } + } + } +#endif +} diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta new file mode 100644 index 0000000..e1bf18b --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 39df9327575994a4fa959ed9a97a1e5e +timeCreated: 1531903664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs new file mode 100644 index 0000000..a768721 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,108 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Utility functions that deal with available Modules. + /// Modules defines: + /// - DOTAUDIO + /// - DOTPHYSICS + /// - DOTPHYSICS2D + /// - DOTSPRITE + /// - DOTUI + /// Extra defines set and used for implementation of external assets: + /// - DOTWEEN_TMP ► TextMesh Pro + /// - DOTWEEN_TK2D ► 2D Toolkit + /// + public static class DOTweenModuleUtils + { + static bool _initialized; + + /// + /// Called via Reflection by DOTweenComponent on Awake + /// + public static void Init() + { + if (_initialized) return; + + _initialized = true; + DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Physics + { + // Called via DOTweenExternalCommand callback + public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { +#if DOTPHYSICS + if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; + else trans.rotation = newRot; +#else + trans.rotation = newRot; +#endif + } + + // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached + public static bool HasRigidbody2D(Component target) + { +#if DOTPHYSICS2D + return target.GetComponent() != null; +#else + return false; +#endif + } + + #region Called via Reflection + + + // Called via Reflection by DOTweenPathInspector + // Returns FALSE if the DOTween's Physics Module is disabled, or if there's no rigidbody attached + public static bool HasRigidbody(Component target) + { +#if DOTPHYSICS + return target.GetComponent() != null; +#else + return false; +#endif + } + + // Called via Reflection by DOTweenPath + public static TweenerCore CreateDOTweenPathTween( + MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode + ){ + TweenerCore t; +#if DOTPHYSICS + Rigidbody rBody = tweenRigidbody ? target.GetComponent() : null; + if (tweenRigidbody && rBody != null) { + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } else { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } +#else + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); +#endif + return t; + } + + #endregion + } + } +} diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta new file mode 100644 index 0000000..42f8631 --- /dev/null +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3fcddc0756073fd4aa84610b570ca6f9 +timeCreated: 1531903664 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityTests.Unity5/Assets/Demigiant/DOTween/readme.txt b/UnityTests.Unity5/Assets/Demigiant/DOTween/readme.txt index 3439db1..aa60e6f 100644 --- a/UnityTests.Unity5/Assets/Demigiant/DOTween/readme.txt +++ b/UnityTests.Unity5/Assets/Demigiant/DOTween/readme.txt @@ -1,8 +1,17 @@ DOTween and DOTween Pro are copyright (c) 2014 Daniele Giardini - Demigiant +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate all Modules for the tweens you were using (all of them, probably) + // GET STARTED ////////////////////////////////////////////// -- After importing a new DOTween update, select DOTween's Utility Panel from the Tools menu (if it doesn't open automatically) and press the "Setup DOTween..." button to set up additional features based on your Unity version. +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. - In your code, add "using DG.Tweening" to each class where you want to use DOTween. - You're ready to tween. Check out the links below for full documentation and license info. @@ -12,7 +21,8 @@ DOTween and DOTween Pro are copyright (c) 2014 Daniele Giardini - Demigiant DOTween website (documentation, examples, etc): http://dotween.demigiant.com DOTween license: http://dotween.demigiant.com/license.php DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com // NOTES ////////////////////////////////////////////////////// -- DOTween's Utility Panel can be found under "Tools > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/UnityTests.Unity5/Assets/ExternalPluginsStubs/TextMeshProStubs.cs b/UnityTests.Unity5/Assets/ExternalPluginsStubs/TextMeshProStubs.cs index c3cf851..2e04404 100644 --- a/UnityTests.Unity5/Assets/ExternalPluginsStubs/TextMeshProStubs.cs +++ b/UnityTests.Unity5/Assets/ExternalPluginsStubs/TextMeshProStubs.cs @@ -2,21 +2,22 @@ namespace TMPro { - public class TextMeshPro : MonoBehaviour + public class TMP_Text : MonoBehaviour + { + public Color color, outlineColor, faceColor; + public Material fontMaterial, fontSharedMaterial; + public float fontSize; + public int maxVisibleCharacters; + public string text; + } + + public class TextMeshPro : TMP_Text { - public Color color, outlineColor, faceColor; - public Material fontMaterial, fontSharedMaterial; - public float fontSize; - public int maxVisibleCharacters; - public string text; + } - public class TextMeshProUGUI : MonoBehaviour + public class TextMeshProUGUI : TMP_Text { - public Color color, outlineColor, faceColor; - public Material fontMaterial, fontSharedMaterial; - public float fontSize; - public int maxVisibleCharacters; - public string text; + } } \ No newline at end of file diff --git a/UnityTests.Unity5/Assets/_Tests/TempTests.cs b/UnityTests.Unity5/Assets/_Tests/TempTests.cs index 7125b2c..6b330d5 100644 --- a/UnityTests.Unity5/Assets/_Tests/TempTests.cs +++ b/UnityTests.Unity5/Assets/_Tests/TempTests.cs @@ -11,25 +11,17 @@ using UnityEngine.UI; public class TempTests : BrainBase { - public Image target; + public Transform target0; + public Transform target1; IEnumerator Start() { - Sequence _passenger_arrow_out = DOTween.Sequence(); - _passenger_arrow_out.Insert(0, target.GetComponent().DOAnchorPos(new Vector2(300f, 26f), 1f)); - _passenger_arrow_out.Insert(0, target.DOFade(0f, 0.8f)); - _passenger_arrow_out.SetAutoKill(false); - _passenger_arrow_out.Pause(); - - Sequence _passenger_arrow_in = DOTween.Sequence(); - _passenger_arrow_in.Insert(0, target.GetComponent().DOAnchorPos(new Vector2(-200f, 26f), 1f)); - _passenger_arrow_in.Insert(0, target.DOFade(1f, 0.8f)); - _passenger_arrow_in.SetAutoKill(false); - _passenger_arrow_in.Pause(); + Tween t0 = target0.DOBlendableLocalMoveBy(new Vector3(1, 2, 1), 2f); + Tween t1 = target1.DOBlendableLocalMoveBy(new Vector3(1, -2, 1), 2f); yield return new WaitForSeconds(1); - _passenger_arrow_out.Rewind(); - _passenger_arrow_out.PlayForward(); + t0.Kill(); + t1.Goto(1.5f); } } \ No newline at end of file diff --git a/UnityTests.Unity5/Assets/_Tests/TempTests.unity b/UnityTests.Unity5/Assets/_Tests/TempTests.unity index c21d4fd8209b3dc3a315012ef1be7caddad4a88c..87a4f89606c9cb203a64ccf64801b9b5d00cd9bf 100644 GIT binary patch delta 775 zcmXw%PiPZS5XR@Ft4(WdlO~c7le(5rHi)4?TB%|T30OUtRuWAht~J`!ToOY}ML}o; zQICPS#3<2) z2GM+zh@4orpfnMl3{NaXsMGCsg==-xHFhBMvax;pi+9NB-*_H<<(bscROxyV5 z5kEgOynR`q0fdj=B|QAi(4B$=O@mxjm4K{>5#Ee@#3Ak&XkPjiwDCUI``j*H6IOR{4Av6y7S?m~|P|N|RUBi=#8DKH=OT(yQMb#($ ze3=phlifw^4k;_5+nd3W+4LCWlF}^niRO2$74CKRzH=AoU2(5$ZHXP9U zofLu{vv%vx%vujuOpUWCT>}1^T5;?iO1>i}W-)76t@LFZH*y;57d39Dg8VD3TiMK6 zjq9dElUtxIsL7k;x2E5XFGF=7?p-~q!)>*4hOJjs`H^{)2QqeR+YH+H&XvI)qCRUi x_f&{uoHyO!hZqZwv?)%epfdlA)Yf2{{vZPr-}do delta 447 zcmXYq%S!@L7{$M9Q<=TSq#DW~0%e2{3JfYN%S}=Epx2ZLW1%j3V4=I9Wzj0Q5N-qm z7cCNu8_}+4Aqo8fEo~>RT(-)NG>gNz=l7lOyV(lMzp)9T;1`iTPDEC`8*uWtXWX8| z6#X`vO*Zg2VRH^XMl+Y!^>fGJ-fQmDJAFHbT10%i4otkLDr}RN)kQ9?sXXIy^sXMq zlJNyf$Ig=Rw0LsW6_N9QSeU{SfwDuxsu?jGa4cpaLj;a1QppTiXq0tbNIcD z>rshUHI)~(3e3(=_lHGl`^d!Cbu+JNK3)n-Lfu`FcqJ^0MpQNNhYh<}*C$PXY};i( diff --git a/UnityTests.Unity5/ProjectSettings/ProjectSettings.asset b/UnityTests.Unity5/ProjectSettings/ProjectSettings.asset index 62318014c10db8e74aa540b063f7feee8cdd0303..4ceded1f6a65c4834768758833e0db8b17235d70 100644 GIT binary patch delta 1195 zcmZ3qk@?yVW)231<69XR?u2dR*l?VwO=NQ838~Fjjz8h4w_#vlaPbdu40ZAJw+1o- zJR*ZVor95>MlK*ua6ph}h%1N{>IovlU0wa+Lwp06fclw%*wH71fdxoAK-eH9#F#0H z)zHZguE^ArXcAU~IDxK#xsDgeCc(@^oL=T5%^;lSOxCzc9bXEO@1S~=$P^~uAQW>% zh&HDlf9et?+93Sqh~YA)p2XxX4m60;EF*zrMm@RtP7=uwa?OxpV5q0qH_{Y2gbh-P KY~FD76B7U@K}KHy delta 258 zcmcb%gL%MbfS4JG9eqL=Sb#J? zgl+BO9}@2B>K7m48^AEx=ceX_ay=6xmr61*k; diff --git a/_DOTween.Assembly/bin/DOTween.XML b/_DOTween.Assembly/bin/DOTween.XML index 2c3ec4d..0001102 100644 --- a/_DOTween.Assembly/bin/DOTween.XML +++ b/_DOTween.Assembly/bin/DOTween.XML @@ -179,6 +179,26 @@ Public only so custom shortcuts can access some of these methods
+ + + INTERNAL: used by DO shortcuts and Modules to set special startup mode + + + + + INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + + + + + INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + + + + + Used to dispatch commands that need to be captured externally, usually by Modules + + Returns a Vector3 with z = 0 @@ -195,6 +215,11 @@ because the latter fails (in some cases) when assigning a Vector3 to a transform.position and then checking it. + + + Looks for the type withing all possible project assembly names + + Struct that stores two colors (used for LineRenderer tweens) @@ -1239,16 +1264,6 @@ Methods that extend known Unity objects and allow to directly create and control tweens from their instances - - Tweens an AudioSource's volume to the given value. - Also stores the AudioSource as the tween's target so it can be used for filtered operations - The end value to reach (0 to 1)The duration of the tween - - - Tweens an AudioSource's pitch to the given value. - Also stores the AudioSource as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - Tweens a Camera's aspect to the given value. Also stores the camera as the tween's target so it can be used for filtered operations @@ -1418,81 +1433,6 @@ The name of the material property to tween The duration of the tween - - Tweens a Rigidbody's position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's X position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's Y position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's Z position to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's rotation to the given value. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The end value to reachThe duration of the tween - Rotation mode - - - Tweens a Rigidbody's rotation so that it will look towards the given position. - Also stores the rigidbody as the tween's target so it can be used for filtered operations - The position to look atThe duration of the tween - Eventual axis constraint for the rotation - The vector that defines in which direction up is (default: Vector3.up) - - - Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. - Returns a Sequence instead of a Tweener. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations - The end value to reach - Power of the jump (the max height of the jump is represented by this plus the final Y offset) - Total number of jumps - The duration of the tween - If TRUE the tween will smoothly snap all values to integers - - - Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations. - NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. - BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). - If you plan to publish there you should use a regular transform.DOPath. - The waypoints to go through - The duration of the tween - The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) - The path mode: 3D, side-scroller 2D, top-down 2D - The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. - Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints - The color of the path (shown when gizmos are active in the Play panel and the tween is running) - - - Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. - Also stores the Rigidbody as the tween's target so it can be used for filtered operations - NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. - BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). - If you plan to publish there you should use a regular transform.DOLocalPath. - The waypoint to go through - The duration of the tween - The type of path: Linear (straight path) or CatmullRom (curved CatmullRom path) - The path mode: 3D, side-scroller 2D, top-down 2D - The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. - Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints - The color of the path (shown when gizmos are active in the Play panel and the tween is running) - Tweens a TrailRenderer's startWidth/endWidth to the given value. Also stores the TrailRenderer as the tween's target so it can be used for filtered operations @@ -1743,6 +1683,22 @@ Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's position via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's localPosition via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + Tweens a Tween's timeScale to the given value. Also stores the Tween as the tween's target so it can be used for filtered operations @@ -2523,9 +2479,21 @@ Called when a path tween's current waypoint changes + + Tweeners-only (ignored by Sequences), returns TRUE if the tween was set as relative + + + FALSE when tween is (or should be) despawned - set only by TweenManager + Gets and sets the time position (loops included, delays excluded) of the tween + + TRUE after the tween was set in a play state at least once, AFTER any delay is elapsed + + + Time position within a single loop cycle + Animates a single value diff --git a/_DOTween.Assembly/bin/DOTween.dll b/_DOTween.Assembly/bin/DOTween.dll index dd8bf57fea9c535dd08a6a0b106dd0b3ab51af78..7a86edc83ba9b98275928f74e82c2358ed45a25b 100644 GIT binary patch literal 161280 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 z zWCZA1=0o7`du)p|1=duxs*u$&p!eDuc)dP4#CE@>N=H`up_D^MQO5`H1TD-#>^@om zACg`@{oKzg%Jwle6vR5{e-2V$a1+wN3oZLl(KekG*^htK84&CDPL=`9eJjh`OpEq)(2HJ(af&GmpP}}m-$YtV zdzI)kc0Qh+ozCmrQJCT}y;SDLk#H9LGXQO5;KbBlgi2=OJCBPS%!L{AVYKH__6Hy2 z;dME-&%Uo-@Z`<%eotNn=LsM2m9XDBmaX+pZnHHQ7zv2PzFu;WaOiT^7Qt z1f%RK#SR)pc;|lf1^Tk~IuI;TWD0ld@P#3mN(;VU+eX#E^7o|;kYyfH7B-!OE~~aMa1JGWHFd6 z4@|uh@I*$OSaCi#R=G}-BMJiX;o3kvybCjTPZwZdVax5>uIS;QhD?lqpb+ooqY61% z#ECZ|t;a`nmsuZX2I6w^)Iy%9!(^%`m~i>bm{YDji6V<>HPoYK+A}I1o>KsvQXk3zQ{w-+=4R0TQ5S80 zEZB<^+Sh=AD$aH1_0IjEn)s6R#GQnT7PEOykjV=lo`aL(AYp{V z=OG#67lZzfNnZ>J^m_?I@?sd0ZHT7mSaC-14GHQUKRZE%)9DNOBnP7>!;kg@=NTA; zsyKc^WN`t)b^HYGX&7DGrBGvLmvU22LIu6iGnjDG?hqytmsY_#6Udwbd1=9-`b;>edG;KlHhMad%BVe*C@ca$ zPpSEWaT+^8yhXub=8$ zA_W&sE(t=qh~g(E0FGU8Y7zkTM3f}~P=Q2?5&$hZH~b?q$3}%2RVUkqGIRNp6t57# z9|fq<*EC!;cwn-=^vt=?Z^T9Utj6b8)p0hUqlZL^I^&!`e20O$lXG>|Ap*y`gUc2~ zIctydlLD?3R=?LVmjmZdMXz?AF}2JT1|?LA9t2+FJqXthQFhwW-Fq)r zaP$(+|H;6B29Ka@4c``_X~T!tL>++-6Bl2%MzFJb6r;l|me@ZXuz7H_iyV<6YfF^P ziFYgVwnvtaH(Ppk$o1#)5h5ixWpSWAA<>iKVEcM}zOrDew}%HmsUe6sTpB!@(1oDsUo4K_p2~k21g2t2Ctpo_P<4?Hq z-3i3rxn7zB8a_L{6<0amp+!jh*(q;)dBeIjPk8e-`DNOkjF9Z96MU)Xkb)xPCSTW6Xc;26ZSzA znHCrm7DhG&#)O5DF@Z5bn7q#f8v_o4|ZFIF{cEc`N0`^-{ z_i8hH3+vAQJ|ohv=^!}C%>D^M@->qQ+-=OI@7~*W_eY&O5dJURInis0OKSsmVZIH+ z+sk54969R{vn=LhC@T!5UzrTzq00OwC~Q15s@Gguud>I}l}`X5R*gDkzL$U{%k3c4 z+Kl9Er5`N53+VCGLZgIc_AQ*@ixaQNj4x z%(aUgSO%`}O^^!TJ^=*QFNj``9}YR_ibr4GM8bDt=e&>dP1!v4P<)(z2 z1qa3r7z@rEZ?)7O6orYNG-auPEMKb4GC9J6UtzFt zpgbz_x`sD5MEcpe-2j0uT*p()+*8OHf{NfpABG5Io{+ionRm42(fkGinJ1*(UMz*I zjLt-9v}Mv%j)ZTBP2_e(8_!w5Q!Pe!p|u!L2A`2oA)RSPmqolph9KCd^0G2YXc4XU z>)Fb4#jJI;q}N-4dVrzAZ;3z;%4j;o0K-b>8`Bax%894M2dTda90&aT1Z0ot7GCcf z$;j8=jGQ_s`bL~w`g7dW^r+RD1Hk{!qBBjZ6@=)-S4eLG{cf}F4v^(1hu#lO#V3cP zyKd(rmHWp>XOA6_&kjjHDKI(~L%Tm0T_%cQb@u>RK#%()^P9o^#1>PTKZXgmZxHnH zYyx)Qi*92jN8-nqmmBYMjX&kV1WhW(b`vH$JA& zf3Gl7Xlv=G1WWcIgu02`6n8YQv-GRhv9!TM4^F`*0?0^ zdE44E_%0C_7?EBkc&YG3BF|aNR}DO8Lu)%PTdsQO+q+xGOOgm%JD9BS9TC<)K`$rr z65S)@rQNU*29H@_=k$y6JnY=lzLNYR@?m3;U(s**>0^MNyt01Qsh#JFOz@l_oSOp0 zz%StIEO?R`+&p5;`u-VJ%?c2_)(`{kxGJx?6kIFw`?vHf{!16#|T@*jGaP)xl^vra_TbR&Cx@+36$MwVb^v6 z#DgUjzTigtkl}jD;F&P=;{q@y`oW#Um*A%UPN29M0}1Yh?LL-4>v{3}<$F(a7a}c; z*v7+fCQVm(DKomb>5Ltuo9=a56=ph3iXKPP8whRsf$#Ff8asGk2~^gBM9ddh_&1Onj{^ z+MlaTZUxoRNhdyO?mR8ei=y{20vXaGA;+{ zmn~z{^TMCy=py5C9<5AnWWb92M9Rc5QbsOav3dGxYsTjF_LtIK_xkQ92r;ak>>M&qy7}QA#$uX?3{wINAG+9t;mvx9yn`X zcWQro3SO2GYlRmgBy74)Ely&!Xx@-k`$!Wi)`O!|tSkIknsl|X(~eqXa3>{MNpfub zI*=R172lv_VMm@}4SL}ohQ_!##)(f?8((nl4-0Cr&E=pQYn{M#j4pF3f96xWjl~1j1EN zSn3jP3DE@XkqL((8@?R!?YNjW^c-pBI#dbXUi}JQs4tHBJbK_))R%G)?^12|@4>og z!G%}572n{{I@v^;zUlp`;wT@YxG2TTz#}H%@=`jpJDwOp6#2IGuUjXme4)vVHPkb5x z;^#Pc2LX21b%$Wqrsq#XEoYuO?9Ouny_L3Pj?ic~w7}d-A9yTdG+^@0k!e2 z>>2&F*d&g93|&9ETbdjoR5+m>mb+&l&leiF7Li5WfOJYedJ9Y9`8K169aF_^grAjn z|2TtEVTK6Zdg7l^E5|ud+~#T$4hjd@@EO+ zs{vDAfl*Rc^Y;jYIN@BTDkph}ApTHh>OClkt;cApw1p3qhD-(9Bef}0uaNxa2Vrj5 zR*u%p)J+1c$j7FEmor_>#ToB3Os~WZo&$$`l#T|-V;_1-nW3dDx+2y zBCPcelv^{2Z8wsNnP62IlAMueie&RuM8-{Y*KoT*W(JeZ2vdrkPqF#_TMi&Wd_p$N z!SJ!A*icvdIu1nNQN$idfZ;I$%-AmX)|J|fv_EK!aqv_j0<38wps70;I&@E7XSrT8 zIe^zvwFSg4A4$fRyxOOryYi7}%V4|wP^vtXh@5gO9$QZ_mVC4t?ZZTWH3bYWUS37( zPw63EX0J>S^JbHee@`ltR9*Sy5AH-&}fZ$YZnA)CNZelP4BrQRPu z4IjhcfEh&QYfuUgLoul1lW_ZLRvJXST~hV;p-yc*?q1u5GbM1VRQ*#h8z9R8wj(Kd zG!mq5$yP^-nd%T;pI1albkC{H_=tu%!)!f5sXWA9DCt17a!;o4(H zLIPwU3CT%LhLagW5>6nHks*OrK!zlOih_b*M=S$FB!s^pGztci~4q?|I} zk{#} zzxVO`2EWb_Gw{P>fxv`A%tB6Q=}@cXoed@!a)uor!J`ps zBC0dqM48A;{^mCtWJFw)Jjc)#AKcX9JQx{d6RZ<9RxV?b=?pBkdK<&N``9W^RUu)sr0>`eCb%M^qnVt=a4U*h-Kfr8Tj%;l2EL|)l3*~+ULUUSLI6XQ`{g{TEjQ0obU;|@6R?R9q3XsSBSoR}OXO(x;Q6^+X@ zkIjwA?YZ-}KmG{mm=}|Wm1a3npcy}8@?-Kl7UXr4o-qYHE$vtsQ#cj1+?206cPxr2 z$`6exR8Ji-1qfCUQ$VV_#&j)sDR|<68+Ky4(frgDe}^GLqi0+>T=AwBz0-h2aY_w( za7;$(Y3ZAKZz*M}Z$rmTr?koM#AD)`swx0_1Dv98${!z4SC4dfJ%Tjjg?(l-g50%g`@IC^Q<6d2&dP!f_RH@e&Pn zwUpuxDhshnKw)ugI{~j{kW`ynk~}YyUd>_oDLi3)v?Se%R(tZo&<%*Yc2TfvRvFC9mr=VUnyKcxh#SLn9P+J zFV0X=cn34CSB~p%G&dECJQz=Vn#l$}~gGo`yBl1x5 zvH+vVrr~~@Xr5HiAuvi+)`$$7-0_~f(D>+inv6sqLN~sF9?#WB_fW5p1?6GV8MvmC zgE+7lN%e_>LLI`z1%-=n!uj`db#5mpatcT3M3ks#987kTT*j~>1eJ=a5h^|PB3UY5 zY-Hr0WDV-=(OJW%m1Moe+N{t6>#Zznys6DKRuu_!oGxe$r35yT3G82n{V|$w`^pWW z*v<7ENuY8Pc^L>pVlpH?a2wbfkOr2*lP%4OIe6DjPQ`!~YHp3{z%8KyJ-&=2E?!RZ zQ1@j;|1WAemc&sSs&GS`2PEn%P$6VL6^HX#zSPlDb^g(|hab=O|JroqUr)?Ib>|&c z#wE{|fuaX#dSE>LlW^PENBAic?c;$ z5~+sM8)rCuXkcu&RZilxIGzo{Fuy)d0`O!|uuQJrQ37aV!ZdveAp2>u`q%8g0+N4b ze{GQcJeikE0RNKJt4?TjGpf5>xZ;V0E|V?CS%cQhh3zX3RCQG!^?0>FHX|N+Dp$^D zB#`q45S&JPKyonD)OUm)Q`t0PxPUJ%f=L4@gJB=hk#0D%k$MX8KcO{i9tweJR zL-^?+FB_*2O}pvn z+$O&m>weir%})3G`UQFvryk+qKr>`IbwOk5!#p-}GsSxZ=+!#tAv{rymyg?CkQ8f(e%*Q+cswx8)$d(R}1t# zz2%+;+8D~{Pj_D0iPkf)Q|399=MciX3HGbnLw#U;VJ-FCRDmWtdobK}LMiWqH1W2A z!{QwXT7+o5(XSLCX?uhkJmoq<@@`2JZ$&sP-nHP6PX~nT>FnTen?*?4$w2ASABV+z z9~|<&s08@B42Fn=!i>BUJETzt z4{7A}VqO_$eR6d;ugb>zBdjR2k=K&*3XcvG$UP>!+*V-`xh{S5S~RZ*(_=zM?lCi4 zR=`SJiR>&!(>Q>IBcbM)bI}gaWYKqG35s@<@PN|^ehECxVrEYQ@(2v>nUXxbw1Ju* z%;Ww2emX`~nTK(>JB(f`4(AtYdZ;eKzJux-brCd<+4R_**9li3I_t!=xMfn|V1W?x z1k`B%JOS09;Aw7;^cm<_T11P$w;p4x*zWCQKSDb{ybMUo$#zTx##s;8-2&LWa!adV z?RhaBPtYxo!bs$YbJ9A7c0cGC=Mp=vYj{XpR~vWIQKvx5VCCnaClRd|qmFfqmWvRy zN>${X^ofbaF`w3_z{Uw5UQ6fgCx%-jx31J;ZbHnu0pq*gMsq&q zOGx`N7d{TV+vp4d%kdnsjW%iI;3x;WSl$$h<^3VK|LQ?>5jwc9G_$HOR%W8D$VVCq>5MfrG)_OcgI>4j%w zQjU8!9WPA9d3sOlF*KKLC);XXp=e!+GSFv?LbljY2~54XB`5zJO|Q7{`5Yb*U?WNG4>rT>nQ?XEP;K3o`-i_ z+F@_hY5x?2qoV2U8aWwnO}GK`cRE@3BG;q%)=%kg8<~#+;kh~l_@C}M8;_Ex8{0-Z zr-`Q1aUp%%X+Dg`0erd-KS(%Eo?`Ovv6|vOXpG`IF?AV4&|6|9Dg}|sGc=eRM6|}m zpaJnwSzKRskt4`DIDYX~BD-0o{mAhXg}9kh`-Cet%|S zKsVxxBw9C?P+Ck+6&?`P<2>@f6dhr2IM)|`nQDXCG9Gy$pYVu(|9>|<7ym2iN#iv9 z_4LFz>9IW3{sfV|ozVNX_vb(I+Z~vXXg@*ukJo}fLkgA6xCjYF5fM}rRAKQb<}X5? zMEQ$i=6}m{G}Vi-VCOGsdV&j9Ps83Z>O=loNke_SlQmr6mZt{!qdEwh!zBC4d+PH@ zt8TQsfIqZcg%dIAz#;V`Lm(&n5f7gr&{-V2OPB`Wr6~^E@*)SFwh@1h#8KO5v1l5L z*RftA-JPbtOn>5}>UchzNNq2vtL8s1h>nVcTQ-4Y$$NFecl(xIg%*tfSQHMt`=%Xy z(D$K_Gd#6Oo_{?;6OrI4yXzcQQrAfOUOC<(L>RoF7pl{ZhISs(!RyG3n!;zamkqXo zCg7aFsgyFTwqPhgo!~T0r6d7tCeG9?Oi4+U8HF!11LC!GJ4?hz?(Qq{`uux}oHbIJ z2brR3oOAz=#cMd62Ow>ghTbHbFQE;d$59GRP8&7^9z{hAw+Z9a%xIB5r|_9Re0ZT9 zW#ji%db8dfkvCBXqbJ@bMVm=hjP$SWkEm=y7)U_0sF2;|t^aK39#xE3I4xWkyP5iFG?|uCCH}U%kKN}{+;+KKn0pQ*Ec?$td>s0hzJ)|rB!}hOK z;@*o_QU4~6OQ#xvr*3cOVD4+gg|`lG$cPOHR$pZ{Tc@g!9Iy%BO7nhL-6vrfA94geQ z(!(DF${0}6`kWwcdcf@fDN#vUICk8Lz_C}VI5|nvc%#{C5VpSMSg2^i=ZWVje zI0V_ie2yn5>C~Hd3W%N!xEaFa$H^B}oP0KpJY`nW(^H@c9IpAeMg(L+`3bC`5rl8S zP??|-6|U?!DkF%?mT+c#jta>cB?{Bru#f&#f$ggH|DYAR>Lat~r8` zxCRm?XIrrC^tkD!xHiZr%w{K$)I&xOl-fn56d`F01Zum0y3-nDP_I>!phScon+P_Jx~*&UfRxZ_4qr;n zBTjJ55LGAwdg%702d{Sqlnz}+hV-0s_7}mWL${J0lb&{elAdg&mt#s;c*5^gBwyaT*t8)^QY2^p*aeo<>%u$*CIHXf{XT3JFBiLoyLW4J%+U zV39_@7Ce$2oxOB%2A}rI<`_*(c*=l~^6%@olaFiMIMRqgJ$@*Jt^Gj4+{ zO*5h_4^3d8=W4$XP0}zizeEYFl5jlFOQNinC=C8!H*#{|I9bW9m2y=IJ|kf_1)r5L zUBPt{;+`C8@d1N3ZwJyme-pYwJTqZ##B&~MrSRb+sVC#_Wc+T&Z#{mW;YV|w0{pO6 zA}+yi5q@}p5MSVj_rL@+3cQ;pF2nC0{9eNEEBvC+61(Hqh~ISl?#FL4ess<(23=Aa zey8HshTjtWHskjdeqI~a%t)d4#0uiGW^{q$i2XX=9=i|^0d{5^aU#4138e-Lz2O%k zPK0+i)Xi`O3%%(VB2I*NEeWLs3vKfY5hudCfP~V6h2HWD5hudiLPG9fp||})#EI}W zkWfaj&^vx1;zW2eNhmW|XuDsCI1ye!LRrB=@A`#^6XE?3xjiF0Sm-^!5OE^BPmz!( zSm=Gf5OE^B^GGNsSZIe|h&U16NhFjTEVR=vM4Sk3e-g?I7W%+1M4Sk3Itk&e4ej(ySclY$UgcobNVg~Lj3QXPSej(ySc&{g+9>GGGK{$pJC&G)h zH8H~*EcB&ch&T~mygMXj;GT!T==S-Ah$G*Uo6$2^=qtYvape6-GkOIJ{lhOroCxpR z=*ni`E~~)kzV-_dC&K#(3E`rvKq2&3PU?sg;hjxFeS(F)@e2_rBJb=OmBA7R{1U{8 z$g7)C6)f?sUxGLhdFeB%gC!37C5WRA2vMKzflaZhPfvCEziELQB%EI!T@b8Jz|{oY z19pRNebnIdZgH$d+{gIanBxO!-F$f@m2 z3*YX+-G(%*$xE8)`M&Yr*Nq55FhmNy`2=xbb?e`?--%t8sJ0|9vu9KmrcX#1 z&Bs#c_JI(b;fdDsQWUpDad~fz3zhk_!h>?wdC8z!=#xC}pk7Sm8?Blmagoc-)DUoox-p$x`qcSM$*sOk0ht9PlMWGfoTN{^ zg@p*UY)4A?y(^2`BMwT_JNU(TSp|2m=u;O$W^@yl5O0OUrs*2b__!4p<3&AEfsQ&n zx2FU~%X_R4yxWQQzTy!uT6Q?RJBYVa@dy|#A2_@_iT9!65inYIIXukc%oe=K!toI> zT6R0UyNLI(;t?=fK5=+=6K{{=5inXlb$Is>?=!_CV6^OIUO%kE5pN?ZQOj8%xyU-7 zkJ0kEBX!>~Qa+ymsr!9Wn1zPto~cju`52xrDUL54g%2Df>hlQ_MJ_KU(Q#xPN`QdT zvX9k(w}g0KQDoo|Fk1fM@E#=I*NR8LXu)D2ssifEQo!7^^{LCqdn%TyK{1atTfT8Z zFQ?FFt5^vbEeDv_fO9E;`qYO>;vA9~8t7%TeCy~~5vYSefR0C4$D@Hd{9cX@#D(2o z#Dz(K*>VtiDK5X4(ej-W7dB4KmhVXdIYGc^`GI-Rv5Iv(K@x|Q4!@Vt@}r~UNs{=d z(m}vz`N`3-nsq!y5)elMft7e{Ul%RNnUm;01q1?X3NVe zeFTh_%|M)X?2q_)1Oj;2H8J^f08~#17^+di&P{>6KqGfdIvrXZd*q0(fr|&rwX^XvG+5{Q?Az7Qg`JH=96!*%+DpJOTkc zj8pz5K)|W4r{OHLkI6?7rehStZamH5uE#_mQO-3nn5kp*y=Y&OAVPkCKlGtHyP%Uk z?Lz?8pidXuRhNtRp0QFuk)Iad{nu zvHeZuZNAQL^KS4k`N4KSY>t~w5H^28!5y3T04SS3g_CXe`Az>AUa-s; z;W0LofYj)@GRR~KVyiI|t?4sBUk^mU$$s$m63?ln1f1l6_jzDA0s-MrkNn{X1cbxb zDqp?LEz_qGFs5UX%cS8Bq@2DE*&I8_+oywoKJ^=>2pHt% z@m4AQmWKf-g@fy^wCib=HuB{oJ(M;A`cw>{u!{x-c{jVNUQqEJtMH}G(Lvrm9R&2L z-?I)XI;8_8BZn^2@W zdYJvAjFRmRjFbHRS}0EP(Wm~?M|lX49_;i>J8_b%WO1CRP%@c6!5`ItzDS>=@;BGSaP2B~Kj0 zkay_ebFcWH9G8nT%f!GZQ*rd-FkI+8$s^w3=u>|Oo6ipNI<6hWkal3AM0St|+d&R}Dke-J{9Sg zHX>s_;MhnmFt!lFR3~+DrY}D7JZ^l%knx4Wh4{#W<0A*I#s!sS6Dt9y9aoCNpI@hk z9WSyS6h6?7NW!vh;2j}VN67QIb`V3_(GD)yK^|-eIdG9TsI((P0a+a6?<)>m{|)Gv z^#q$m>H^J*Aq;ycfBbcqe2;4vF{E7`;DTM`!FG`Yx2A*o>MjGSGjhqnS9d9BZsCPn zu{hS&h1?ymHkErO$ng$ImFD^;GW zJUBWZ)-(HgWri&b%2k}%SEe*JhvN0(!VNL<9b0>FFZ*2&g}Ts za4oR_VliBg$Z~AsQ z1to=CaRkSalv6#ZiQvqcY6(H74^Sss9WMWs)yt8gx@w9s(Df&6MAi?f#W?yP1de}! zqYgm?mYx#@hg0&zDkHr&LP9NIVke%K zEyGN87=pLzc?X$JJ2|`U220~C1Xd#x;P#(|paTtfEW}ZWaO=1w5|G!;hS_X88|%~q zamUm=j$a+7{CggDohUsIf_I|yT=&0_9@J{*EX47XAz5W75MqCz%`Rv&Lm;{({cECT$FgO+r+deaUh!LGciP$ zcc4&Lw!3F>>%!A|4-|)yGMy)7wOr?sUFso z+@YMhk2&{N<&d6#vbN>O0b87sOZgC+OR)@$CZA`KdmY5`0U!10AV!vvoeRsze_K8I z$GgeDygT{7S52k-C~JFxX#;DhfmODsX1aj=ukunX-Kxl**I}V8CiJ2-c6SrKg-bB0 z^QfFCF#(--mRb zrFd286z(i>1GGd74U%V|<=w!Nud?L1c>9rTnOs5P&c!{Oq-7QJuD~gAO6_(pX}Ln2 zqRoWlsYO@iBxqMF)ZBw~t`TRmWEjV{R!nB}K3n}95Z*};GmDB)+Ak6h=r^EnplOV{ zbuH?HIxJ=}ssQQ$G>6f+Zbg0KfEF+s170G~B1Y?gQp85_Afs|frUO07=yve3fSzJx zftL%kp3wpD3Nc^W%%~Q;VxTt}ErMlbK<_hp52z>5$Bg0-t`E?cS{u@IXP=@zP5AQs z_sn}2yc+SE_>s|CgzE?NyGCVOTiLl%09iVi;{5c^m3@J1o$6T&cz+Yy6q?HDV|<*6 zczYOqDnc23!{{>+#^?q{Utk@GByUwHg3&5QUy4XZ8yM}wL4A@eW%QMZVziji0nuJ3 zJFn^RZaVsT5v{jDa(KnN=}nA?ccF>0xQn;^KY> z(*K6LRNQ(SNtPXePE*Uo_z^9h1~N5M!(l6+uN5lLHCMFQn=2)YdGxxaYi*wfT*Fnx z@l~Zh4K0aUJ?H0B?VnB`juEJV(F+Qlq*F~E(1RpXw4to!q`pt5eq3# z!mXXpl5h7RNw0Q+43{X;WVWnF{?q9RTDf)!r!Sv%mTOZOomD}Sr)u}I&O2kCP9G~q zYfE(M42Gu9spu=lX_y-Tbzw9Sh-$&R$;7)E@wyf7O7}3nFNo>%v8GXR$c`cXGg>1_U z8txW_)%hIzi&|GkFEiSxb!T)M$NrL5#^@(TFKgwD=CUoDvwrDks zMsn=0Xnh$SWb~>wfYG&V%WK*|Ml~G!R_!E4A2NDf8^UNZ$Nq*kj8Qv|{Y`BoqX!vn z)0!D&a_nzuqZwgy4>|F+b_S#KIQDn6vl!VN`*!VYM)xp!SDU~{ww3p^NsPW@TRze* zVsstb@|iZBk(*=RtFOQ8LH=5A7yK zs~PRrZf5j%j{RHh7DjZtW|R0%yN%JkjDFDWWQ0i-ct2`)GkTlRPuhKqhH&h^Xp0%` z#pOp$;x}z6qjxZMZxVlKk1%=)FU~e$GwTUPgK!^06UL^sjCL@J)Hg7i#{El-{<49t zNbKn*@LjN2{WZe^8ic*BzM?abkrpl1;n|`|bOGuJUN!3O-$af69i#h$klTlBdtqG9 z#1U;br}YM{=}GkEYND?f^iK41tKrixj_Acq7cljJVon{`7jz|Pnb^{8b#$D_O0G|g z6Ib;odRNLSBTfu=k^4H=Dx;&=kUS_cM*Qd<0-u5^^52#=9Q3O?a#z>)1`RJHcX@gf z=)_cVFHai{+N}#|i%cRtZzYXM>?k&Q>p^=Z68#~eC+KF-?!xMIHrz`)lmCY~^}e)- zy3t6*O=U!fLg$FKQ<*j~?U_J6wM?s-J|9OuuQJ`jw7Ea|jAeQz(Eyo_rEG|i?)yN8pe`9A1$D_u3tspy%hEv zVqfy3ppmTY>a==Dz6G}?(h@1&JdXXtDw6yIEyxgEGl>r2{OrZqVFx;bqt^n992bV(smt#m7L__t)#b}==b+`D^GPxU&}({rgb zqf6fcU0wJtXbNJt#hC8oKQ!qB(3?ug-P)J9@6}VP_xJk%^pk!hc~kPm@IR*?>AbRx z^xT(C^3rE1=hfjpyW#T-!rFp-9GXqJBr229UPMXt7U;YrkMeLdXrP7|v8U^&NNFh3 zle&?+iRl3L8OHRXBJ$tNbT89~*nbPtUzo;mC^x&Ou=_?x4rv?RrzgU;^!XC;J{m`< zcm^~^yjpe$^p~<<;B!;2-LUQU^j6UPzGUYNgfc`-^%2m>8Y9UN_vBG+d4g+Eaw^GZ zGaWUcC+gCzX<MA zv3c~t8U|V)Rz&JC-tkCe^GIa#h-34JWAliEwJWq%n@1&E?CR!9vcPb zIFXv3o~3N#4%xj_lvPjI`a^yDTY2TvA<@)J<$I?*+Q5{|wl9 z7utS|__dg9zMkEin0~;tF`q}|ek5~I&$^^;VoE~;QaZpBZQ0_sY@(Z(o>lp+j?urz zgh*Q~>CqZ#h-YDUIr_#7xDdNRAe26gOQmM{n!E=?rbSThLayE}T7F{JGa)c-W` zqvy<|?%J@3b3kKaCxM1{ya04a^f}1AjsvLQSkmKSxVsgQyE0=2+?S#+#hNR|BN|Pv zg3td1y^i(x=>X47>@%O~Z9e+WKx!|owa54QbFK^(DC4;AV*Qd*|Jhpm|8;tH9F@Yr zT58MZvwKXL&;Gn-8uSKsG$mYYcq;egB6rD>$*Xk)@QMe-@Y1rXFr^ zp{?D)^jT2H|LgJx;oqf!XnW8yu`2fAq&V@KaUVv3t0RbB8BKIl4AB7{hz{>a^lPTq zb|QDrSfWoc)daZ@gcIG{p6EYW!;7rpan`Va!{&0>r0A!m#$k&&tcSz)-7smqMitYm-6{20NS_F5C!HXp=Sun??~nG%DqVBtIIO@=6k38Nfd$9QIQfQMla} zUzY>kCTn;1PD9)-hWDgHU(c)_0~$E55`!Y!!Gqi}nYl6+`r$~Q@AA~KCU7KZNe z{*aU|+zNf~{Tay1XkNlC-XlqFv0d`S)H*%cEqJe9%oCT?9ZAX(jn9XP*_C$V9xks#2Xi|ZmdXLzlP*r9~>b)YeK!!Wg zuV?c8qN@+JOTAy5q0louI;1`zW-(eQ<`?u#UM!X=6kpaZb+Oo?(DelgsY}Gq3LPj- zNnI*3cxP&%n1a|J5`%mwGxcGyNTJ-qkkm)SE``oQ43FUhB{F?S-0e~y6I~U01-zAF zm_mc<+oi4)vwSE&^>OjELU%&)39(C|*7A0#Pl!nD3sdg4mglEFDXJ9e3(2R%ScPhm z+NC}v7Whzp>Kd^{q4h|^TCrcDq5X?fpAiXI3nHCE`P8gB;s))u-f@J4ewIfnr7Zr@=i97O-ByAIu6uQ6koYZaN zVMf#sYT{k-qzd;~&CRLripUbFWmNV(sXIl54=qdmNR0QPRjHqf1wQm#>OQeup|=V) zr|uVKsnl{t>9*8wMTHOTO8riZ_o2^Ie+aVWM+$_0o2)Jaze)X3+@~a~G7qKxBv$y) zuc<$aiZYU1DB{ZwrT&VY7>UlPJCypHDB)8E3&nv_&2?C8Q7E_Y*VI46TpTZ^a7Wx> zE={Yz@nb@R>cd>Rwojqf@)tB>UE?w;mquWeK4^~5w+w1y52{}u{&VVWyO z8?Vs9svK7b?P-O+D=Bt$(n71GWNrUmt~hO&LR+h9UGdrig=W{+yAre=3JoYe*@fMw zY8mdL&L_K)v~>zS)8%AW7j0~fqXRiKsBOO#a5=IW}ARVWOoSlgvgTmEcU ziB`l%H8$$E)oP-LHcFum8JgBZTcOa5GD0sYG@|HcR}XD3qxoWV*}bmb+8~@$q1dOD zJ?QGAoj*vTVMQxkm0IY@gyxAmQ`frsYO_y~=%2kdy9Q}n7%dcWwQspj(mD+z-a@gv z$A_*V+8GM%b-m>prmavYall)yk=oA+{QzFGRySORE6;h$HCmgi(7Kv0TxV#z6j}{* zmgX5DCEX?8xz5&>`Op#9B+WBY@+K62=W5lK`Op#96wT8pdAoZ=rp?eMD>PwXeA-Oy zd4(R#i%*-SMK(E-X=&GJqkO0^?RssQ50$6gsC8|YlBvmk({9$L`OwK}w`k_6l6OPR z$!WK1a}>I}wmI!CZHEtyOS@M)W0aIUFQ++ev9`j8#-%OQO6b@!@^g{*g0zRVbqe*( znV$BT7I~WF^>WQldqQheXtU?$w5POX3U!aWJM9@Q^mHjX1ZcfBUZI&lFKSy9dIRA$ zX$fa2o#4HyO;M-`=nZX$Le~Plt$D{t$<-Ol)85k-D0El1r_w&q_9?U;ypOcHGo|E8 z@b+l8DKtLig|xleULV?;_NC@MOG@U(ZB6@!cAG*2fWFawR%i;)L9KDDl$=!aUfK`Z z4ux7vzDoO9YaAze-=+MNc0}8z(51ycr5XBwvn9`6Vy1`c+kB`)dV9U`9LbwdoR%J^ z@9?3*^kltpyyTsql9ryX@AIL;bdNrMg5)KaRiqc{p%YaMKqdN|NfI^YHl+8|#d#84 z2~@4ODb$!dDSd#x%g39PK1i?oyOf-sa#i|ZeXc@L-pI65^yn7Ji}DtxjnL=%PeyfyxY`_a? zt@>7lKFPQ-{UUvz4=qf;L^m&#l3x|vn0~45@}Y(4Q}qgkV$1GMpRNz{p(W`v^hpYR zUb-Uva(%WBtxmr}U#!q>_uc7N>Fa!GN&40Lc7-zP?@qr)-|s_9(r4@DWNFL!<#(rF zt0()=lJx8J5{0Ug?oPj6ALK(z(&y-76&l?C#`GKXSw6Hd{U&{}Lgy#mm_AQ`-iH>Z z&)0V;bYtS(>9^>Id}vAfLOt>#Y0DQ#!>xLT4=qW*O|M`i=P0-9gC!EzmaR{}T`#$q z!d)$n6l??a!hQ)tl*y^z90r>HaYNZoT9ZspU-f{`C9w z@ji4Y{eFFpLZeeRraz!BQ|O$Gjp>W^Z9eo{`V#$+Lf!it?xlM46sfa&z2RP_=PUGV zqTyby4^U`$hT(olAFEJErr~~AZ&T5uDKjN}vFD!qge<~;>ru2p)Q4<)*v(6=h|Q@q=~T93Sp zv@8@q#pk=%=!1Ny)V)@pqtJ+2xBFRrtHY}*bw8(1o2tT9^>J^|z0)K*(_Qa=QD5dm zr?_9zqo+H()7+c&Sw3{G`!#*94_)MbT`!p-B}b=*x!%+#`%t2LoBpIi=VTm~16Pog`_n5Ix&=P*}_a;;3XQow^h-uJ;}eB0s!7T$HS*`ma2M6| z%Pcph_)u$RZ(|3ed7{4iqReU|;%1V(I&`8()9Q?ljIIp5%o8i>jAX@o9K60phT^RQ zudmTn@m?yaH2N9!3cXu0qDVb>sMN73@|QabY(zTg` zjp*Ab+u(9YLnU1B`UXp^|D z_SUQ^#!7`+3zueHYAm>iBsYm8*-vLpHI^zgCHvN_>Bb8RtpS>0>{2MU__eIdjh_{& zZg@BA3ZvKkq(zQ@Hw47@Q`QYe9rHGc)S2>&R3=VUK2iWHiX z-H^T1=&R5gpk>A=g<^{@&R%ZJQmDG&^6VAHsZ0FvtqF+luIx3&SmsfD4`)AZtW@Yo z_A}Yf7#kIul6_b9I%B6oYk;0J4k{E|{7UwEBjG`5XLZBd*)JISQh$6~jYvjReh0I+ z`eJV_)I6^nC5m?>yQAk#V}U|bvJYmzWrQx1I@bWbZH!eYw%Fr&$5^LObwhX0d&cc6 z{PFEE7BiywMtb%H#5dmasj-833q}9h%RGCHgG%y9_H{s^kI49@WRLWGVN6kI4bYcH z#bc5eTYQgapV6pLb;CoRuZ?{xId;)p{D$YBM%ik=Er)%v-&XsH=de-5Jj&~Xp5Kk< z6*`iw<@{m1qtKM>Pdu9WjY4aHbTjlRC-zP`hMA#Ibwf&yZQi)XA76~=Z!1+fG3IT| zqxeqB>0s_v=t%bHoKEIX3Qftb%84`EJuPEc0~Bv&C=^>fDJQ`kq)>IkML9{PYpp-N ztbq9D=VY1r%%k`o$jLVAo{>6_WIvgcV~$p6O7{GmJadXdYk>02^Vdnq*y7DO1?C)u zsvF+Q>1v*|-XC8tvyl;%?GHJ<%r=G4HghY?strzj3AugD^A(zs{X& zpLgOb%B?ZCC{*3hGqP@h?f8N3v(; zo?=c@XiD}Oxx-EKWyxCuG{T&wP;Bvn+>z!=g{m9w&TTgJE&kZY1;qD!?l?1&c@*Cp zxo4Y=3LVM*D0jR$QK2c>&*z?N&QfR%&_r{WLb1jBb0?YRE7F$gh97fV%eNjH2+aE<9*UHQ%p$A%3o``K9DHY-8KI?^HN5#X011` zU?gkSdh@m*)b&FOH(%6Nd-Kqz!3kw5s*l4n_ENjJAq-CL))O8?`>mP*Xi(v&vk}T^UMpQ$Z!CT3Q_IA%Kpi{>5 zZ)3>Cx#tyx`OsbcrW8b4f$>FKpK!R1I!Q)bd%xyzI!Si4Jl_zyQf%ruyCB}$rO@rY zW*2m}ioPYDte;7imyy(xWSyZ9X-Tp25BjyFTe41EDM(93kd`cKKTDF%xdmC)Ro`(q zom(8v=iXb8YqfnZb>7u)c|n1-P9ZD)^SB~w#}AU{iCAg9&_t#tR*ORD z>k2BZISQe#E2y$E4$E+{#c_qz)&Pa78(f8T*4vC^Ih-6+wkLDBJG<%*qTTpNZHVI0 zuKEi}el#?trtp-YaKn6(w2ME&hiDgnqz}<9ezWx<+pBY~(6>NmSc4R*EIO1r#%flm2f4OGZocv9gcYm7n*t40)_XU$OPyOPrjTdX@3s_lPL;RV){ zjOL50GL9s*S_c(+A&HP%r`Tl;X|?i$&|$<{uF#ui>! zc#&lq%nQ9K_lClYEw4h$fG)8nF`6%4%DuO6iggPkito|FY1Wg9H?qg-!Wq_fdbt3t z@kr9|DKo6CwnQ(cy#!uNs6?M*_i?6`tWXiNI>PcvrLd$vB6u(<|t+g^%qN>c# z3+Gz-aT3Lsjd0Dk1}k(%-LI(&tVIePDE+o@p*0q#Y&d=H5w1I|WeN?dAK|*wsz{K$ zR_rM*vhG!=CTWE0E^CKEL;L?)c(*mIvy|MPs2AO5HR4BK2R*8^4p&bboWhZq)H zbqc*!(KC68HC7?oM_*#?P-trJu%ac_6u%!%BpZn-USK2raoaUP-tEMBT1{ReVNSTb2_W7GqMQH7oVqgD_U(WQ0PePFEMMZ zLkfMG|9!+-t14ScUY-7J?6bJc)~{uqhT6@6({NdzrBllED27%ddz+}@)7);@*E zmV?%yK2j&ya>#mGA+qIXYj7p;=7~P;bBhkEQAYMCy4?r;AI%aj55woa?0yQxM-6GO z+j6cUB@O#b#rp>&4f|Y$u7IRrU#QTFXoqG{IMbf3cz+MunH0)_ zS?CN6(h_FxP`ssKSA>VzpDR=u6&W8EBpGfWQoL_MD)Cu4ty-pUVdRkZ;X#rScC_ME zBlZZpi$XgQdqj|AB<|~wTJ+FLBhoHc=waxL43cbT4^X^jNVc1}e?;xCEHW}aF-S7W?xc7mnPg`NNG1hICfgN?_fNFVWcy@=ZbVH^4wCF* zk5#uc-w%*<1xcpa`xS3%*yTlO_8$t3jhY1%s59N}gjpKp;3UMJZg*2C7O|%XNxJPu z#rp(3gWDdb(6wmA?jXqwd$Qv7LQT%FXDYNevP*nMkYuJkSMef4wuNQdcPX?wqDy>c zkYtvz6^cdd*+G&Xd#~aRfSn%uJB7Z3q$fx+ z#}<8ME+s-|j@?e7jfg!bNHW(>R=fsC=Gr+5{Q$|_Ajv%2t9X||GSBX-kQ=e*1xe=H z!xS$eG%qUO9;46;kyC&IOS8Z}U-6!YWPv?hp$YA#00l}G+H({y8$#QrQ`B@w!+1*Z1yaL4D-Og0#JxF#Bk}R=H6mK*nOYCZeY}i>6Bw1*taNjF=Fo# zB~K6UQa?fCQLiA$3OhydNV3At3y`b`lI(3)D&8`ry|+C`p&>|n?;y!O_Nf7q zeeCf8l6`_CEA2}ZZ#L3iY0px~g`BUn=PUF8W>!@`$!Rg$!m50d<2!VT_wz35xGk*O z$BXFHCBE8Tp|mXTgg4`YVz04l2grQ61+mxIgB2=3?0(+L=xt%OKHjx4UE*tf;V$a1 zEv(MRyP{*4_&WOxr6mFJ^$m)zul-NOyAFBX*EZ^9?A=i+!IJvKdxB>UN^3ROX} zUy#oJcA?^t&i;0<0G<7VBnQ|H0XhfRBLj2}2$HO~&sMx=F!pQ1iO(Y+AzEPZ=_{U*zUeDK-CgymtrR2=ehb3 zZvgY8&S611hue)R9O)cx?+ws7JV>XXM>>bw`vY_i57IfpJ{+KPggx{mznvq3bozOu zbA;W@lG4r*K{`j;lcW}n>>O!-5TJ8pkWN33bdIz?4bV9Z)glg8O26&liEXVL_Fj6$b%+?jNqJz1ecKo{7X z6}q|8&ZLX%cND6P-I;W$y(O@7hl&R18~o+8Y$AgDoG~ zuPKy+*!TF#s5fH&+@_o5?vA6|6jy?3Vo!T=e;9pycXJN;x349cpA*SFFQ44xqluU6 zj^>W@kPlIvC5;nGe(WNdA;t6-+__!o*2SD83VVEii?!K7+QxaJqcyR(E;?Grd+O2A z2Hr#`4OjOf&5L210e{jg{UZmG|Gowab$$a$wy_PhpvaRR#9abv;9XS;MYjFN|6k3A zIo&8fDOU~7Rg-ho`jcFZj<#^?!=L3jm5z?L=l`sX?&&VejxyM~8}c`X4J#I**kDtvFun6w5!98T`h z0ncMUO(RL^cCpUCPH)8gT*J+dM0>C${&||NEF>RY9N;Gc>AoVs{d<6$^46L4iRxfC z-6iSwkuzSYjoe5h&#nV~Xh!X<4@iHR1JW($#^iQllzAe#GB>3A(=@*fx#^BfzmLo- zDf$1ldr*---nI&I(=1U}^U^t%stslNH>jE#{USH>UJN@a-Gn!m<987LqiS2LHO5Ts;e> z)44tVl_w5q$rpGMF~l0*6NFr~bJp%E@D!|xo@nX1=*#JylP%q3PY138bCA!va`%Lf zE=a~u^0x%kljE)M(0C`GxTQVPesViyM>-vCQifubKBkIS`b$aTnksg`9;waI>93zU zuRsQJ@r4ZJ2G%*ThKU=wxE4tt(ndGhl732y#j91g7ZZ6N!fQ>TEFZ=z2H|2f@-{*} z-}x=kS%YJVEKNW6Ke7KO=l|zwU0}VX8K5arG4fg>2{qhVdGOc0|J2O?w95bVhyQ;V z3j$mE|8AX^`+axwNO})ekW7)yGZyNpG;w-0(asoKb=+@FqpkG$Paoyaf#CW{{(+_W zztw&NSCxO}_3e(ZL=&^H)}-T}axOcJIGPxV5y$Z%u8I50{}ss@yyqqL2fF`yT!Epa z`*u8C>Y@Vn&^_xkOP8xIr^9kx48mTUAr|wK(MaA+t43O6ikx(H<<)y>RY%@CAh#wg zc2DM=ni{U#0&&Uw2`s_?6J__;_vlZ-TvroBkGDs^iuX;9r6;PZnJ&^MsoZC8gO4t1 z+5h-ER>67okjzQcH0*Ps)&+CrN>O0!fzL{TbD^KGcWjCW_-XnuRzGCwq&6Mj#GrD& z!1ugQ{`Az-5A{S7fp(Il&SwJ*@hGPv52cLnW`ojqHYk=NJVROHmKu7}`3CzJA!4z5 z8kIWfSxN5cIF^(DxCAG4{=GS>pTUxjjI`Xb^RMj6h2e=6XBhgE2D0<$-O{6d9NS3V z!!1$zNcR|CX(S(A+{I@<&g)6;MO;JtJDb6~QNQzgRPfU!g>s%N$-=(8Hza*d^mO^x zpLsv#`X=|1;&`R#54QHd>n~GEp`6`eI+udoUhWNOM_BH|8hl1Y?($fCcE#E4m1|j& z$`z_W8#<$0OmVDj|MlsY6P=1Vu|Mh5*>b!MixM=27fUSMjvyhF>v$-SI2I zuN1#B{CeQ$#jhN{KH`vQ5M9MmaT0!?yCk}Sc z)$S7sOiLTOYb#iDXML@=zt&m*EvLVhrk5rR*Paw_XKSECvm>>2>|V$29KCAbHCi`) zWzIaUT)({L7HtnSe5k)9=zBW%!Tp226*Sz~&UBBstxKh`M_k*b7WDgW13|Z!4h4M# z-;|lBMWn2TdvMuM<1MkV*R!Cd4IAO}!N66ZyFhob=DoP1R1=RwCvJyfd-k(Ehxuzh zYqd+#lC8ry?}*z)SjOb^n%bs*ui|Een!-0g$0Y0qm#C?cw!MP5dj)YLAs=p-+Qt2o z>>+x5d9~e%eUh1GFwJM$q|;p!CG4(XTE}z{(|T?5z#Bt`v3nHLu}mj1-3i+~p_AD? zjp;0n@@7`}i*E#Od# z*u99|i&^IircW|m$MhwpTbY*YcMrTTqFf)E_o_wZ_#oV`)~|?|quq?l4fcqtf!{~$ z5hYAdN*Zd+fwjA>x5Q(`zedc|9_%tto2i|dB|%R%Y4la5{Tkg}bBIG7Vm);n_7I0U#FF>n zB-Se95bGbr@gCx^_lfr9tBm_ZMlR83AQQ*>0ie#4Wq?65^bV^YM%XiYr+9CSB#QJv094enf<#VVK4wcWL@;Oumhsx(r z6Z8Rf6WdMDht;)$mNr}pdayguVRcuv%V2H0xK{7t`n-$3U9|@-_rZ31&~k~EHq;s= zoHG@i1NkzgEP0r}X*EWBxiB-TN&9TUe9!P4N`C`<0S=a2e6-`ptmP zl}zV!C-+H7+rr)wLwZ~lMeXs1s1nw{j&pJy=VT|2eI4iII?l;twqzaWWChFDah}w1 zo($qVspCAU<2)J0c~ZxDQpfVMSpO{6KbiHvCCKJk9LrncJ@;F%XGo77QL{M4X&mD$ zj&Trc7{%H~alE7cpZ4B8JkIL67vAqXBh5$}U1lWt0(|D~dTKd7Lz~=_w?T*uga6 zH0cS=<%G8BIltf9`+a9d9`QZrd!F-r`QymmYp=cb+H2p}Ui&gLlGlF8Ju10dR(bC? z%Pgz5m%rEEF8CI~JJ*xGZ9VB9T}S*g>&n!ADQ7~;3HrvXYlrOnwhmN}NM58^>XelE zl$7~WDf1~Q?b~Ymwrf3atKHj%YTs7N28gd5Aim{F;@hqyzOtA2n%<$>Q&OX=q(*N; z{x9rPQm_4zS5|72mAc$2b;(NYvQol3q=Z?Unj|YN5S3IXrEDjqY$H;(S1^k1t34?t zd_^?yE23#nO78n5_mh(ED;R0_)xILy`xT6Vuh%9-=941xNs$>9nQubo-_$-SGT#)L zZ;H$}MSH)gu7jR`QsgH@{+m*}Cnc9Rk;~uIzA3r9iCq4rHY>TDmRwFtE_X?NPmBE1 zBIgrQ-_s)Duzk~ofx0^_>ajbm@2y@9JbpoQ-4lu{6!G`f-EULdZ?YS^rhrrb-)~d% z-*1n1mx2DwnsnV^yW@(Zb+h(=@3O2r?VW2rShorABY@AW`8Z^zw%%KJkG=cyd#rn{ z@~#K!?zOwueG!!RZ)3jk3;qm}xsKc_<-b$L#{D)&$OHB#2L7^+E8R~^fn`>ba% z(`T)}yC@cX61kVDC+#0z{;A+A_E#@F2})$yQ-ExZA$!-x0nsF9gJ;zv7rq@lWpfQW zg*pac6|j{~s_(77H+0tS-}naLz{URr`1mEi0Q?-_X&IBJWlWxy(Rf-$<7pXzFUd%F zNk+m;G7?^rk?;vAGgqAD_4{moPZRNr>NnYc(EYCZH|_ED>+5H&f4<<|^>3q>d+Q_k z&5Y~o*VvQS4I%c{@Or>Wf%mRlUw=|o@RPEFzl1igQ)}$i%ZBP-vby>*_0LEzyd}`` zj9>g@eTAoO<$S&6`QGX$>mNdE{}B1!bm7W|SB2+Q`|9-p{NDJ^D}GS+s2AgE(=7Gkb=f-U>)tyt{z77_J^!qs( zY3F35os+Tgs?dX;iq5X`peJ&5SNSWdz4yt+SJbxNX8?bG(Y)X2jbK=pF#KFq1* zu$_LeBxwI__*&0$>mM$CV@c5SUDO?^F2&jhnLj9Nu`cSl*3)8L(KA%rV*TTW+bUbE zf87vR+G1UPG3gsGCVe&ZA#mu!7Rw{_MxocPA^p-dq`%l5LaP7Ty%eychxnGBrAzl& zUu|Cj_^Pa5-^Tj2$?D%2Sh~rYx&B(uChPX=hiW%jPeHG4vc3tu+GV}bwQA{r@C;aO z8?OZZV0SCv$?gq+U+lRC@asL@fPdGs4e(sgPSRJB{_IN9Us_4}*_EU}ym1fUmp8t5 z>5vshE<@JaR}fx}yoRiDfoz{43%@&3yU!Z#U}^tjCD+#Ki}1|_9_j%<{(WqzUj@{s z0PEEKfDP&az$T%Gg>tF-Q&3i`#{jQVUs)Q$S9X64@E(Dm6wZePeo5qzn+0q`noGhnmT1=w!&18%gg2kf-iV!akyY@5Xv+itPN zMudK&(8mOi3O*@33E{~K{g}{i6?#tScUWxU4_j=XyM^Zy!t-h2c~0Q3tZyt0sJE?4 zF9@g#dktDOV6!CEHruVv{uE+^_BzlT?EBI3jdt4wHh#&x4V1Ou38)st+Nwk7$L&ji z|GvO`1wJhB5rNMLd_&UyL~{8l}32PFSSV*g!Ye=D)d!&uA1Sg(g; zpv=>TGW$Kdmf=$kz-_g{bIAoEb+Lz|=rTZCtpx?GEtD2Ow7G{Zyb;pyc?pT#3~3>C zjqnUfs%IcAq@EM}ZQ)VgUxVNBvUbb8%y)&i1NddYAxG$O!4C_Z1*}nbdH0}aANH~( z&v~=Jf8w28R)g>S{5_O;ZP_K@xx4J{<$m?)GM4TBGM4Q`8Eg7L8T;a)GLC_V%P8SX zWq%6#BV}yu$IICMUy)Q#N~))k3bR1?zb^dq!v7rjF(b;phVs84sa`DOOgUY~nev^o z#~|}1;rVVE=gZ$q+Lr+X>J_2CTJ~+EeNEDyDdPdjA0B!XViM?0SJ}3AK0*3;W851}wa4x|1 z|7?H~9ssn}*Fg8H=Yadww*a@Tg z3jAk*zZDp0W^5B+n`#AokGdAHN8t6U5BRXq->XJ|j|=^fz>GQ$$_LaJo5%5~`A;of zWi$8N1wJouyo{8dipRizdxgYSeH@er1wJqEb%CA$>8k|x2pku9yTAtpJ}>Zffu3se zhpQ=bmEfI%_Xs{F__*LX!EYD*gy0VfJ}>z5f}aumb-`5)WqN8vzTm3_?-aa8@G-&1 z1eu4+Yot;iRAmEfI%_Xs{F__*LX!EYD*gy0VfJ}>z5 zf}aumb-`7g$gdOmg0B+1Q}7Zffu4Hd7uX|kTwt!A zrMg}46M{b|_`KlH3w}oMvx1+kzfV2c{JP+(L2A?>H4=Q4;GKf^2tFqGxZu%-KSEwP zq1-N%6M{b|_`KlH3w}oMvx1*(kQ@b9jgn)d=!1m*;u5I8UJj6k(i_yu+f921xmctYU3 zz%v5XGT|54DR4|+PT&cF^8(KZRLg~5V5h(_fjNOE1kMXQBT!u+`~o`#jtR^OJRxvi z;2D7mzmSaj3hWd(CNL-Pgur=$X9TJy;TPB`a7#vP^}bxft>=!1m*;u5I8UJj6ijf@C)n|csBeXYGhqZc(K4Pff0do0v{0goWQdJ z$1b6qoWK(T=LMb-s8&fX0y_nc3CsyRA#h&c8G-6j;TPB`a7#vP_34{1a=A>6POctLg2i>GXm8b;TPB`a7#vP#u$e1&#^K2|OWiUZ9#4X#zV1^3{jJ zJ*0&lzfxa;kEbEnuUqOE{I9CZtoK;gTl=kBtoy9bTMt@KTi>$&#q!x<8#greA^Q&d z5qsYLH+!ik?YYf!+T-yyc~^N?d)Io~yuIE*Z`}KP-rKx)c|YU*y!VUV|Kxqv`(M0& z>pkObD7&m|ZCP8{rn1hmZDm7c`^rYkj+cF=?CbcB>~m#rmi@BqKg!C>-&NjUerx${ z<$qZIMENu2&y|0p{H5~Wlq=swzBRr!-!;BI-wxj%->tqod>{9n@IC5#()WGe8@`|U z{)aE@U*})%-{SB0@ATi`f1m%LKj}Z>|8xKA{{P{xs<@=$s*3iC%@w^BqZRRrOvUkv z4^`Y#abLy56<@A+rsA(F{=Onu*;=`~GF^E~<%cRiTKW0PFIIlJ^2N$mD}Pb>ZQ~OZuBej24`$Fx@wXfCwYi)hqhPtoSJze*Wx__uU zSNG3#Dp(s_9=s|z6a35I3&Fn$z8SPa%R^U%`a?sZy`gyMXz0VCkB2@V`isyDq0^zS zdj2(J)z{ZwRexjsSp7tOqW**Rchvt={iO{X8@d~IG{hTjZTN7*V-3G(__v0t#wCrH zG>dS^6e$xUGm?S{9=i3>4Bw_ zOAjwSvh;&XcgWcK))l*PzGSIoc!Tsse2V5vxQ%`U7V@L2T0N#}aX%fzNc;81Kg6ft zesA?h0p|t2(*AMapSzHhy&c47`#uHul)(S*xL;*$8>d_|fY|@weV3&|fVLX8aLa-d zoHF2hEFbV20P)VtssMf?psn^2CGJ>XY8jevjd zSqk{HXF1@ro(lp0!m|SKuRIq4p7LA__@ZYO;5R*&p?!Aw)&lPKT@5(mYXQ8$*9Lf_ zuLCW&AF*Fj??ddD)EHvFqz)kVODc-kN7N)@A5rf|>?10H*hf?nv5%-}#6GIBh<#KY zLF}XI7-An)w;=XWbt_^YQ#r&wrfx&*W9kmXKBoQvv5%<_Ble`a3$Z8FA0zgpx*M@4 z)yEKfQhfrk7prx6LC~uP)y?VZ zJiqc><_g-_5?5?^)j|pXIOc|Dpe5{zv>bR@7B3 zts1PlscNDsTQyhpCso~nU4gm4oq=BlYO0r4hpU^b-&5UPy}SD6>S*=Jnx|_1qQ+Od zqV`?2soGm==W73>wybWVE*U%={G;HB;I*Oh`U@MH8$Q=qu_UmhcFC3{*DX1?#9I2x zyKMEx)>R*|)km#fz`Lzy0q?QAIjtcvM9tri<$GhCkWzOp{ZC66^58|C^LHnHnbg7a z{vo^?Rea9Ow+xFc{!;f}%0!rcP*0k~V?j>G*P+y~)uaC30C!QBpb2i)(& z{Q=yE;64m@C)^*x{Sn+d!C&zpVCQ z4cm|PYd_Ym{b*Smr`qq5{@J5$ui{#_N9FM9bQ$~`u4UV2g>Jzoo&F8idW8N9XdA^5 zjdWZO8PD)9uBOg7X42nkpE2}j4E-5H|Dj2D z*7%p(x*ltcf2Hx)8vknJw-~?8_#MXIVEj$Se~$7le~e{ASoUS0k!uP%R=m*uZhJ>Fkj&GFlVc#gv!#CtG~dn8_|*S>ykXM6 zVbZ^0;(u)DKQ{Cq8~R&@{+6M?1^UzKE7sHM1-QS3`ySkn;Qkxj|Abp&Kdr8Y+Xfeb zy9Ms!aG!;H%Kk_1SFC^Z?)Ci0d%*Lw+6x!*{@nYN{j&WOEXKp$5&J{lZE&mMnh|cc zzfj(6zX^B1(`--qn(h1GPQwNL&Gu*fBkG&*zYAAi@gwhN{Ob{a46YsSI^q40cRgh7 zw*RVPH~bOx>xyREsyyet#Xje~8ZH92*VBnIoI@G@5w6?&FV!#FTWjvK@2op(e>K?R znXTXC`Bwda=dUV$U|+iA4BU_4z6bXzoELBMylMxmm8ao$KodO;w?i$3zZCv5Xzk^2 z7r;;I`})_6Yhe) z3;r z@H|J`A{?MEom>W^fy-LctJGTOGD*^Q5m_Qo^QiO6hEB9h6pG>?{`ww9!}m87

q}Bg6I)9btR%IqB(=RHwWB0;eMxFb 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 G;Qs-k(?nYU diff --git a/_DOTween.Assembly/bin/DOTween.dll.mdb b/_DOTween.Assembly/bin/DOTween.dll.mdb index 7e60f1b9f934f5f856c20fe1285379e01de60328..25287c6d18156cd7d3458536a9c89cd20d3ab64e 100644 GIT binary patch literal 66083 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 literal 56396 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 v!8~^3U>DOTweenEditor - +

Checks that the given editor texture use the correct import settings, and applies them if they're incorrect. - + - Returns TRUE if addons setup is required. + Returns TRUE if setup is required - + Returns TRUE if the file/directory at the given path exists. Path, relative to Unity's project folder - + Converts the given project-relative path to a full path, with backward (\) slashes). - + Converts the given full path to a path usable with AssetDatabase methods (relative to Unity's project folder, and with the correct Unity forward (/) slashes). - + Connects to a asset. If the asset already exists at the given path, loads it and returns it. @@ -45,21 +45,33 @@ File path (relative to Unity's project folder) If TRUE and the requested asset doesn't exist, forces its creation - + Full path for the given loaded assembly, assembly file included - + + + Adds the given global define if it's not already present + + + + + Removes the given global define if it's present + + + + + Returns TRUE if the given global define is present in all the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them. + + Not used as menu item anymore, but as a utiity function - - - Setups DOTween - - If TRUE, no warning window appears in case there is no need for setup - diff --git a/_DOTween.Assembly/bin/Editor/DOTweenEditor.dll b/_DOTween.Assembly/bin/Editor/DOTweenEditor.dll index abd34df37ba4d4866517726edbc2ee850f4bb3fc..84a3ac5f860fdb3883dc2643df09baba35db57b1 100644 GIT binary patch literal 37888 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 L|6c$9v%voW5zn~j literal 34816 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 M`2TJGZ??ey07y2RegFUf diff --git a/_DOTween.Assembly/bin/Editor/DOTweenEditor.dll.mdb b/_DOTween.Assembly/bin/Editor/DOTweenEditor.dll.mdb index e0918e30d3d30dcce186f16fba29922e13da9f75..30eb36c189b4c418856c0335d9c1387c465811e3 100644 GIT binary patch literal 7454 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 literal 5426 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 + + + DOTweenUpgradeManager + + + + + This class and its whole library are deleted the first time DOTween's setup is run after an upgrade (or after a new install). + NOTE: DidReloadScripts doesn't work on first install so it's useless, InitializeOnLoad is the only way + + + + diff --git a/_DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll b/_DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll new file mode 100644 index 0000000000000000000000000000000000000000..b11387bafe17a5f6dcc9d0a5da1e6ba7a4fec479 GIT binary patch literal 6144 zcmeHLTWnlM8UE+^nhn`xyw^6 z=j5ETakhfU5~@Vsng=8BQQi|7b^jSvY% z{otT4*+JjJG|Z2A0PY$_6@dL7fd=><9n`d<|Moq}b-l%#@_ z3cjr9H|R^CXBB)6ln9-oMNs~vy)6)KV)(9jTSV!fLWks6fk)`~+9Ei$jzu=M5jT$C z8Vu{#hP5%^f`+J%Y?{@X=gz^)+6~Zl&?QY!46qyCU4oPofP28p@T`Jk3Qj6`S;4Cc z8i4!ARQL@A>ww+#Rr-~90{iVPt)E_`ceEtELVwpz0e)MY17(1o2Hc@d&>dRUW`TcQ zC-A71NfK_v*8T=S!Ld(KIacd6~7R9HTrIVDlDhfuxC=xuKVq z#ag9e6fL>VG450sOy6vyjrqQ;7Oi^T3^ua1$evM_Rl|F3T}pH4f@#SG>G`H(Zyg+W z>}9i3^Ne8I;k5Kip6Rv^!aUcs)QmZ48MhSXZ%h3<);+Vbvh7gSHSGHO zoVl7EAjqr}dWxonSg()fo$ySc2^lo7TnkH^zH1rvG?u}sP(=oXvJn`wMzBKZY<^Wr zd)`IHEX!%bHY(Cflr4*Lbw7|*;)Tt@5*l+|%Pc7u$#Dz0S~2j95(lKgnwXQzmJBIl zwZK8rrSwE%TMd*bfdNo8;l3%GObXQ|U~9#8{J<>v%HX^c7*u^LVo)1bh&MI9r{7bUl z;GGXt^odTUaen1#l_Wl!=E`zPK+WT%ioU8Pf5S&Oq2a z%>thTei`_r!qRjOG#i3e(cV-7eH=#)Xgb;|6gyB7V5E%0A%ZUl+(IpZs?$-`4{+4D z=(U@Yz>EYqSQ5)?AAJ%>iVjNxj9RDx)zP0-&anm^6bI0UF4n{xdP5Hfpo|^|q)Z=& zg%Y+p$^#t%azL#qEB%Jm=iq7h>F|9Tda{T>p2iTNJR~(o&%wh&gfMXeB4)n4eo4wl_O$YYy@_FD5Xhr#{BS|D^7&WQBrdA#6!BOETu>TUR1zmxP znWOAuNvz)kjaOy}X-CIV&U`$FtqP;W(Q&Xoyp=-TJnE|1*Fgzl~nI&<|d8Nvb$vcNFbf7x|KiGn7OVbBk?{#}?ZI<$mYwoacPZ-K(6YFhYgl%BU zZeYDkh4J2K-vy#8i$sPpa_1|n-@p1^>gS)oUH$SOo}HmiU5MTeokSOqSd6<-2HMV^ zZY`FHWwh9&hFeOsi?nDoimP-i(@8=DCZf?E(zNKFSf-c2#@vv!3zfMs+)W)ksrR+# zmlhr!ee*@FI|@;vS2V8wkMpG>ukF9$8Sac@XKt0G$_4oq&sp`EuSc-ehXn20{=g$$ z&|{5bRWeNS4ujpyRHl-!?3DfY( zrfm-BEpB}{Idq2TgrMVRlBZ?z6K6_;!$wjLj+V|04H_fKk-^d8=yG}F?C|KRp&{JW zVfGNNoA_`sR_fV_)?0}03x`3zi?_#Jyc6bf>DT;hjoKm3(>h!N*A7 z{L< zf9M!v{mmN)Cqhm`n^Pb`Zlop8RdecykfCI=y=myE!paINOXU9>tKtU`-pqIJ9zyb_LjOHhbgtbvydHL z()jYxz9$}5Chsp^*LGQ(S9kN;o>6ng;4NR0s@VCKy3YK&c`7g;g8!Zf=;8ki596O> KAC~{W2>c8F#CnPV literal 0 HcmV?d00001 diff --git a/_DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll.mdb b/_DOTween.Assembly/bin/Editor/DOTweenUpgradeManager.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..fafa3a302242527723e24e3d6fb77fadf462bc19 GIT binary patch literal 385 zcmWexR{vL7?S-om0|XdPoKe0a^1H+Sn!4PnH{$#n85tM~fKp$97|3L(1QHxjb|Dfw z70BiRio*a%9|-&h0+4!6AZ7yMbQh}_7x$QWm(;SZOY2~Em=XHVP;@2N=++D zEzV$KWX{VkXJX>WNh~f2$;?e