// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). // 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 { /// /// Axis to apply the tween on. /// public enum iTweenAxis { /// Don't specify an axis. None, /// Apply the tween on the X axis only. X, /// Apply the tween on the Y axis only. Y, /// Apply the tween on the Z axis only. Z } /// /// Abstract base class for iTween commands. /// [ExecuteInEditMode] public abstract class iTweenCommand : Command { [Tooltip("Target game object to apply the Tween to")] [SerializeField] protected GameObjectData _targetObject; [Tooltip("An individual name useful for stopping iTweens by name")] [SerializeField] protected StringData _tweenName; [Tooltip("The time in seconds the animation will take to complete")] [SerializeField] protected FloatData _duration = new FloatData(1f); [Tooltip("The shape of the easing curve applied to the animation")] [SerializeField] protected iTween.EaseType easeType = iTween.EaseType.easeInOutQuad; [Tooltip("The type of loop to apply once the animation has completed")] [SerializeField] protected iTween.LoopType loopType = iTween.LoopType.none; [Tooltip("Stop any previously added iTweens on this object before adding this iTween")] [SerializeField] protected bool stopPreviousTweens = false; [Tooltip("Wait until the tween has finished before executing the next command")] [SerializeField] protected bool waitUntilFinished = true; protected virtual void OniTweenComplete(object param) { Command command = param as Command; if (command != null && command.Equals(this)) { if (waitUntilFinished) { Continue(); } } } #region Public members public override void OnEnter() { if (_targetObject.Value == null) { Continue(); return; } if (stopPreviousTweens) { // Force any existing iTweens on this target object to complete immediately var tweens = _targetObject.Value.GetComponents(); for (int i = 0; i < tweens.Length; i++) { var tween = tweens[i]; tween.time = 0; tween.SendMessage("Update"); } } DoTween(); if (!waitUntilFinished) { Continue(); } } public virtual void DoTween() {} 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 _targetObject.gameObjectRef == variable || _tweenName.stringRef == variable || base.HasReference(variable); } #endregion #region Backwards compatibility [HideInInspector] [FormerlySerializedAs("target")] [FormerlySerializedAs("targetObject")] public GameObject targetObjectOLD; [HideInInspector] [FormerlySerializedAs("tweenName")] public string tweenNameOLD = ""; [HideInInspector] [FormerlySerializedAs("duration")] public float durationOLD; protected virtual void OnEnable() { if (targetObjectOLD != null) { _targetObject.Value = targetObjectOLD; targetObjectOLD = null; } if (tweenNameOLD != "") { _tweenName.Value = tweenNameOLD; tweenNameOLD = ""; } if (durationOLD != default(float)) { _duration.Value = durationOLD; durationOLD = default(float); } } #endregion } }