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 | |||
|  |         } | |||
|  |     } | |||
|  | } |