// 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; using System; namespace Fungus { /// /// Attribute class for Fungus event handlers. /// public class EventHandlerInfoAttribute : Attribute { public EventHandlerInfoAttribute(string category, string eventHandlerName, string helpText) { this.Category = category; this.EventHandlerName = eventHandlerName; this.HelpText = helpText; } public string Category { get; set; } public string EventHandlerName { get; set; } public string HelpText { get; set; } } /// /// A Block may have an associated Event Handler which starts executing commands when /// a specific event occurs. /// To create a custom Event Handler, simply subclass EventHandler and call the ExecuteBlock() method /// when the event occurs. /// Add an EventHandlerInfo attibute and your new EventHandler class will automatically appear in the /// 'Execute On Event' dropdown menu when a block is selected. /// [RequireComponent(typeof(Block))] [RequireComponent(typeof(Flowchart))] [AddComponentMenu("")] public class EventHandler : MonoBehaviour { [HideInInspector] [FormerlySerializedAs("parentSequence")] [SerializeField] protected Block parentBlock; #region Public members /// /// The parent Block which owns this Event Handler. /// public virtual Block ParentBlock { get { return parentBlock; } set { parentBlock = value; } } /// /// The Event Handler should call this method when the event is detected to start executing the Block. /// public virtual bool ExecuteBlock() { if (ParentBlock == null) { return false; } if (ParentBlock._EventHandler != this) { return false; } var flowchart = ParentBlock.GetFlowchart(); // Auto-follow the executing block if none is currently selected if (flowchart.SelectedBlock == null) { flowchart.SelectedBlock = ParentBlock; } return flowchart.ExecuteBlock(ParentBlock); } /// /// Returns custom summary text for the event handler. /// public virtual string GetSummary() { return ""; } #endregion } }