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.
124 lines
3.7 KiB
124 lines
3.7 KiB
// This code is part of the Fungus library (https://github.com/snozbot/fungus) |
|
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) |
|
|
|
using UnityEngine; |
|
using UnityEngine.Serialization; |
|
|
|
namespace Fungus |
|
{ |
|
/// <summary> |
|
/// Abstract base class for LeanTween commands. |
|
/// </summary> |
|
[ExecuteInEditMode] |
|
public abstract class BaseLeanTweenCommand : Command |
|
{ |
|
[Tooltip("Target game object to apply the Tween to")] |
|
[SerializeField] |
|
protected GameObjectData _targetObject; |
|
|
|
[Tooltip("The time in seconds the animation will take to complete")] |
|
[SerializeField] |
|
protected FloatData _duration = new FloatData(1f); |
|
|
|
public enum ToFrom { To, From } |
|
[Tooltip("Does the tween act from current TO destination or is it reversed and act FROM destination to its current")] |
|
[SerializeField] |
|
protected ToFrom _toFrom; |
|
public bool IsInFromMode { get { return _toFrom == ToFrom.From; } } |
|
|
|
public enum AbsAdd { Absolute, Additive } |
|
[Tooltip("Does the tween use the value as a target or as a delta to be added to current.")] |
|
[SerializeField] |
|
protected AbsAdd _absAdd; |
|
public bool IsInAddativeMode { get { return _absAdd == AbsAdd.Additive; } } |
|
|
|
|
|
[Tooltip("The shape of the easing curve applied to the animation")] |
|
[SerializeField] |
|
protected LeanTweenType easeType = LeanTweenType.easeInOutQuad; |
|
|
|
[Tooltip("The type of loop to apply once the animation has completed")] |
|
[SerializeField] |
|
protected LeanTweenType loopType = LeanTweenType.once; |
|
|
|
[Tooltip("Number of times to repeat the tween, -1 is infinite.")] |
|
[SerializeField] |
|
protected int repeats = 0; |
|
|
|
[Tooltip("Stop any previously LeanTweens on this object before adding this one. Warning; expensive.")] |
|
[SerializeField] |
|
protected bool stopPreviousTweens = false; |
|
|
|
[Tooltip("Wait until the tween has finished before executing the next command")] |
|
[SerializeField] |
|
protected bool waitUntilFinished = true; |
|
|
|
|
|
[HideInInspector] protected LTDescr ourTween; |
|
|
|
|
|
protected virtual void OnTweenComplete() |
|
{ |
|
Continue(); |
|
} |
|
|
|
#region Public members |
|
|
|
public override void OnEnter() |
|
{ |
|
if (_targetObject.Value == null) |
|
{ |
|
Continue(); |
|
return; |
|
} |
|
|
|
if (stopPreviousTweens) |
|
{ |
|
LeanTween.cancel(_targetObject.Value); |
|
} |
|
|
|
ourTween = ExecuteTween(); |
|
|
|
ourTween.setEase(easeType) |
|
.setRepeat(repeats) |
|
.setLoopType(loopType); |
|
|
|
if (waitUntilFinished) |
|
{ |
|
if(ourTween != null) |
|
{ |
|
ourTween.setOnComplete(OnTweenComplete); |
|
} |
|
} |
|
else |
|
{ |
|
Continue(); |
|
} |
|
} |
|
|
|
public abstract LTDescr ExecuteTween(); |
|
|
|
public override string GetSummary() |
|
{ |
|
if (_targetObject.Value == null) |
|
{ |
|
return "Error: No target object selected"; |
|
} |
|
|
|
return _targetObject.Value.name + " over " + _duration.Value + " seconds"; |
|
} |
|
|
|
public override Color GetButtonColor() |
|
{ |
|
return new Color32(233, 163, 180, 255); |
|
} |
|
|
|
public override bool HasReference(Variable variable) |
|
{ |
|
return variable == _targetObject.gameObjectRef || variable == _duration.floatRef; |
|
} |
|
|
|
#endregion |
|
|
|
} |
|
} |