74 lines
2.3 KiB
C#
74 lines
2.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using NodeCanvas.Framework;
|
|
using ParadoxNotion.Design;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace NodeCanvas.BehaviourTrees
|
|
{
|
|
|
|
[System.Obsolete]
|
|
[Category("Mutators (beta)")]
|
|
[Name("Node Toggler")]
|
|
[Description("Enable, Disable or Toggle one or more nodes with provided tag. In practise their incomming connections are disabled\nBeta Feature!")]
|
|
public class NodeToggler : BTNode
|
|
{
|
|
|
|
public enum ToggleMode
|
|
{
|
|
Enable,
|
|
Disable,
|
|
Toggle
|
|
}
|
|
|
|
public ToggleMode toggleMode = ToggleMode.Toggle;
|
|
public string targetNodeTag;
|
|
|
|
private List<Node> targetNodes;
|
|
|
|
public override void OnGraphStarted() {
|
|
targetNodes = graph.GetNodesWithTag<Node>(targetNodeTag).ToList();
|
|
}
|
|
|
|
protected override Status OnExecute(Component agent, IBlackboard blackboard) {
|
|
|
|
if ( string.IsNullOrEmpty(targetNodeTag) )
|
|
return Status.Failure;
|
|
|
|
if ( targetNodes.Count == 0 ) return Status.Failure;
|
|
|
|
if ( toggleMode == ToggleMode.Enable ) {
|
|
foreach ( var node in targetNodes )
|
|
node.inConnections[0].isActive = true;
|
|
}
|
|
|
|
if ( toggleMode == ToggleMode.Disable ) {
|
|
foreach ( var node in targetNodes )
|
|
node.inConnections[0].isActive = false;
|
|
}
|
|
|
|
if ( toggleMode == ToggleMode.Toggle ) {
|
|
foreach ( var node in targetNodes )
|
|
node.inConnections[0].isActive = !node.inConnections[0].isActive;
|
|
}
|
|
|
|
return Status.Success;
|
|
}
|
|
|
|
///----------------------------------------------------------------------------------------------
|
|
///---------------------------------------UNITY EDITOR-------------------------------------------
|
|
#if UNITY_EDITOR
|
|
|
|
protected override void OnNodeGUI() {
|
|
GUILayout.Label(string.Format("{0} '{1}'", toggleMode.ToString(), targetNodeTag));
|
|
}
|
|
|
|
protected override void OnNodeInspectorGUI() {
|
|
targetNodeTag = EditorUtils.Popup<string>("Node Tag", targetNodeTag, graph.GetAllTagedNodes<Node>().Select(n => n.tag));
|
|
toggleMode = (ToggleMode)UnityEditor.EditorGUILayout.EnumPopup("Toggle Mode", toggleMode);
|
|
}
|
|
|
|
#endif
|
|
}
|
|
} |