You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.9 KiB
155 lines
5.9 KiB
// 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 |
|
} |
|
} |
|
}
|
|
|