using UnityEngine; using UnityEngine.EventSystems; using System; using System.Collections; using System.Collections.Generic; namespace Fungus { [CommandInfo("Dialog", "Menu", "Displays a multiple choice menu")] [AddComponentMenu("")] public class Menu : Command { // Menu displays a menu button which will execute the target sequence when clicked // Menu Timeout executes a sequence if the timeout expires // The 'Hide If Visited' option checks the execution count of the target sequence // Hide Say dialog when finished? Let Say command handle that // Can wrap in an If statement if you need a conditional option public string text = "Option"; public Sequence targetSequence; public bool hideIfVisited; protected static bool eventSystemPresent; public override void OnEnter() { CheckEventSystem(); MenuDialog menuDialog = SetMenuDialog.GetActiveMenuDialog(); if (menuDialog != null) { menuDialog.gameObject.SetActive(true); if (hideIfVisited && targetSequence != null && targetSequence.GetExecutionCount() > 0) { // Don't show this option } else { menuDialog.AddOption(text, targetSequence); } } Continue(); } // There must be an Event System in the scene for Menu input to work. // This function will automatically instantiate one if none exists. protected virtual void CheckEventSystem() { if (eventSystemPresent) { return; } EventSystem eventSystem = GameObject.FindObjectOfType(); if (eventSystem == null) { // Auto spawn an Event System from the prefab GameObject go = Resources.Load("FungusEventSystem"); if (go != null) { GameObject spawnedGO = Instantiate(go) as GameObject; spawnedGO.name = "EventSystem"; } } eventSystemPresent = true; } public override void GetConnectedSequences(ref List connectedSequences) { if (targetSequence != null) { connectedSequences.Add(targetSequence); } } public override string GetSummary() { if (targetSequence == null) { return "Error: No target sequence selected"; } if (text == "") { return "Error: No button text selected"; } return text + " : " + targetSequence.sequenceName; } public override Color GetButtonColor() { return new Color32(184, 210, 235, 255); } public override bool RunSlowInEditor() { return false; } } }