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.
87 lines
2.8 KiB
87 lines
2.8 KiB
// 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 |
|
{ |
|
/// <summary> |
|
/// Attribute class for Fungus event handlers. |
|
/// </summary> |
|
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; } |
|
} |
|
|
|
/// <summary> |
|
/// 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. |
|
/// </summary> |
|
[RequireComponent(typeof(Block))] |
|
[RequireComponent(typeof(Flowchart))] |
|
[AddComponentMenu("")] |
|
public class EventHandler : MonoBehaviour |
|
{ |
|
[HideInInspector] |
|
[FormerlySerializedAs("parentSequence")] |
|
[SerializeField] protected Block parentBlock; |
|
|
|
#region Public members |
|
|
|
/// <summary> |
|
/// The parent Block which owns this Event Handler. |
|
/// </summary> |
|
public virtual Block ParentBlock { get { return parentBlock; } set { parentBlock = value; } } |
|
|
|
/// <summary> |
|
/// The Event Handler should call this method when the event is detected to start executing the Block. |
|
/// </summary> |
|
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); |
|
} |
|
|
|
/// <summary> |
|
/// Returns custom summary text for the event handler. |
|
/// </summary> |
|
public virtual string GetSummary() |
|
{ |
|
return ""; |
|
} |
|
|
|
#endregion |
|
} |
|
}
|
|
|