// 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 System.Collections; namespace Fungus { /// /// The block will execute when the user clicks or taps on the clickable object. /// [EventHandlerInfo("Sprite", "Object Clicked", "The block will execute when the user clicks or taps on the clickable object.")] [AddComponentMenu("")] public class ObjectClicked : EventHandler { [Tooltip("Object that the user can click or tap on")] [SerializeField] protected Clickable2D clickableObject; [Tooltip("Wait for a number of frames before executing the block.")] [SerializeField] protected int waitFrames = 1; /// /// Executing a block on the same frame that the object is clicked can cause /// input problems (e.g. auto completing Say Dialog text). A single frame delay /// fixes the problem. /// protected virtual IEnumerator DoExecuteBlock(int numFrames) { if (numFrames == 0) { ExecuteBlock(); yield break; } int count = Mathf.Max(waitFrames, 1); while (count > 0) { count--; yield return new WaitForEndOfFrame(); } ExecuteBlock(); } #region Public members /// /// Called by the Clickable2D object when it is clicked. /// public virtual void OnObjectClicked(Clickable2D clickableObject) { if (clickableObject == this.clickableObject) { StartCoroutine(DoExecuteBlock(waitFrames)); } } public override string GetSummary() { if (clickableObject != null) { return clickableObject.name; } return "None"; } #endregion } }