123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- // 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 false // 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 false // 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 false // 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 false // 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 false // 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
- }
- }
- }
|