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