| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | // Author: Daniele Giardini - http://www.demigiant.com// Created: 2018/07/13using System;using System.Reflection;using UnityEngine;using DG.Tweening.Core;using DG.Tweening.Plugins.Core.PathCore;using DG.Tweening.Plugins.Options;#pragma warning disable 1591namespace 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 = null;                bool rBodyFoundAndTweened = false;#if true // PHYSICS_MARKER                if (tweenRigidbody) {                    Rigidbody rBody = target.GetComponent<Rigidbody>();                    if (rBody != null) {                        rBodyFoundAndTweened = true;                        t = isLocal                            ? rBody.DOLocalPath(path, duration, pathMode)                            : rBody.DOPath(path, duration, pathMode);                    }                }#endif#if true // PHYSICS2D_MARKER                if (!rBodyFoundAndTweened && tweenRigidbody) {                    Rigidbody2D rBody2D = target.GetComponent<Rigidbody2D>();                    if (rBody2D != null) {                        rBodyFoundAndTweened = true;                        t = isLocal                            ? rBody2D.DOLocalPath(path, duration, pathMode)                            : rBody2D.DOPath(path, duration, pathMode);                    }                }#endif                if (!rBodyFoundAndTweened) {                    t = isLocal                        ? target.transform.DOLocalPath(path, duration, pathMode)                        : target.transform.DOPath(path, duration, pathMode);                }                return t;            }            #endregion        }    }}
 |