156 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								// Author: Daniele Giardini - http://www.demigiant.com
							 | 
						|||
| 
								 | 
							
								// Created: 2018/07/13
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Reflection;
							 | 
						|||
| 
								 | 
							
								using UnityEngine;
							 | 
						|||
| 
								 | 
							
								using DG.Tweening.Core;
							 | 
						|||
| 
								 | 
							
								using DG.Tweening.Plugins.Core.PathCore;
							 | 
						|||
| 
								 | 
							
								using DG.Tweening.Plugins.Options;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#pragma warning disable 1591
							 | 
						|||
| 
								 | 
							
								namespace DG.Tweening
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 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
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
									public static class DOTweenModuleUtils
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        static bool _initialized;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region Reflection
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Called via Reflection by DOTweenComponent on Awake
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								#if UNITY_2018_1_OR_NEWER
							 | 
						|||
| 
								 | 
							
								        [UnityEngine.Scripting.Preserve]
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								        public static void Init()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (_initialized) return;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            _initialized = true;
							 | 
						|||
| 
								 | 
							
								            DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if UNITY_EDITOR
							 | 
						|||
| 
								 | 
							
								#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1
							 | 
						|||
| 
								 | 
							
								            UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged;
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								            UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged;
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if UNITY_2018_1_OR_NEWER
							 | 
						|||
| 
								 | 
							
								#pragma warning disable
							 | 
						|||
| 
								 | 
							
								        [UnityEngine.Scripting.Preserve]
							 | 
						|||
| 
								 | 
							
								        // Just used to preserve methods when building, never called
							 | 
						|||
| 
								 | 
							
								        static void Preserver()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
							 | 
						|||
| 
								 | 
							
								            MethodInfo mi = typeof(MonoBehaviour).GetMethod("Stub");
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								#pragma warning restore
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if UNITY_EDITOR
							 | 
						|||
| 
								 | 
							
								        // Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime)
							 | 
						|||
| 
								 | 
							
								#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1
							 | 
						|||
| 
								 | 
							
								        static void PlaymodeStateChanged()
							 | 
						|||
| 
								 | 
							
								        #else
							 | 
						|||
| 
								 | 
							
								        static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state)
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (DOTween.instance == null) return;
							 | 
						|||
| 
								 | 
							
								            DOTween.instance.OnApplicationPause(UnityEditor.EditorApplication.isPaused);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
							 | 
						|||
| 
								 | 
							
								        // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████
							 | 
						|||
| 
								 | 
							
								        // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static class Physics
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // Called via DOTweenExternalCommand callback
							 | 
						|||
| 
								 | 
							
								            public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								#if true // PHYSICS_MARKER
							 | 
						|||
| 
								 | 
							
								                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 true // PHYSICS2D_MARKER
							 | 
						|||
| 
								 | 
							
								                return target.GetComponent<Rigidbody2D>() != 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
							 | 
						|||
| 
								 | 
							
								#if UNITY_2018_1_OR_NEWER
							 | 
						|||
| 
								 | 
							
								            [UnityEngine.Scripting.Preserve]
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								            public static bool HasRigidbody(Component target)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								#if true // PHYSICS_MARKER
							 | 
						|||
| 
								 | 
							
								                return target.GetComponent<Rigidbody>() != null;
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // Called via Reflection by DOTweenPath
							 | 
						|||
| 
								 | 
							
								#if UNITY_2018_1_OR_NEWER
							 | 
						|||
| 
								 | 
							
								            [UnityEngine.Scripting.Preserve]
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								            public static TweenerCore<Vector3, Path, PathOptions> CreateDOTweenPathTween(
							 | 
						|||
| 
								 | 
							
								                MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode
							 | 
						|||
| 
								 | 
							
								            ){
							 | 
						|||
| 
								 | 
							
								                TweenerCore<Vector3, Path, PathOptions> t;
							 | 
						|||
| 
								 | 
							
								#if true // PHYSICS_MARKER
							 | 
						|||
| 
								 | 
							
								                Rigidbody rBody = tweenRigidbody ? target.GetComponent<Rigidbody>() : 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
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |