#if HAVE_NODECANVAS
using System;
using UnityEngine.UI;
using UnityEngine.Events;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
namespace Framework.Dialogue {
///
/// Allows a transition only if the player clicked on a specific UGUI button
///
[Category("UGUI")]
public class ButtonCondition : ConditionTask {
/// Button that will satisfy this condition when clicked
public BBParameter RequiredButton;
/// Generates a string describing the condition
protected override string info {
get {
return "Button " + this.RequiredButton.ToString() + " clicked";
}
}
/// Called once time when the condition is added to a graph
protected override string OnInit() {
string error = base.OnInit();
if(error == null) {
this.buttonClickedDelegate = new UnityAction(buttonClicked);
this.buttonWasClicked = false;
}
return error;
}
///
/// Called when the state that is the origin of the condition becomes
/// active and before the condition is checked for the first time
///
protected override void OnEnable() {
base.OnEnable();
// Let's be a bit paranoid
this.buttonWasClicked = false;
Button button = this.RequiredButton.value;
button.onClick.AddListener(this.buttonClickedDelegate);
}
///
/// Called when the state that is the origin of the condition is no
/// longer active and before the condition is checked for the last time
///
protected override void OnDisable() {
Button button = this.RequiredButton.value;
button.onClick.RemoveListener(this.buttonClickedDelegate);
this.buttonWasClicked = false;
base.OnDisable();
}
/// Checks whether the condition is fulfilled
/// True if the user made the required dialogue choice
protected override bool OnCheck() {
return this.buttonWasClicked;
}
///
/// Called when the user clicks on the button this condition is watching
///
private void buttonClicked() {
this.buttonWasClicked = true;
}
/// Delegate for the buttonClicked() method
private UnityAction buttonClickedDelegate;
/// Whether the user has clicked on the button
private bool buttonWasClicked;
}
} // namespace Framework.Dialogue
#endif // HAVE_NODECANVAS