NLDClient-yudde/ProjectNLD/Assets/ThirdParty/Behavior Designer/Runtime/BehaviorGameGUI.cs

56 lines
2.2 KiB
C#
Executable File

using UnityEngine;
using BehaviorDesigner.Runtime.Tasks;
namespace BehaviorDesigner.Runtime
{
[AddComponentMenu("Behavior Designer/Behavior Game GUI")]
public class BehaviorGameGUI : MonoBehaviour
{
private BehaviorManager behaviorManager;
private Camera mainCamera;
public void Start()
{
mainCamera = Camera.main;
}
public void OnGUI()
{
if (behaviorManager == null) {
behaviorManager = BehaviorManager.instance;
}
if (behaviorManager == null || mainCamera == null) {
return;
}
var behaviorTrees = behaviorManager.BehaviorTrees;
for (int i = 0; i < behaviorTrees.Count; ++i) {
var behaviorTree = behaviorTrees[i];
string activeTasks = "";
for (int j = 0; j < behaviorTree.activeStack.Count; ++j) {
var stack = behaviorTree.activeStack[j];
if (stack.Count == 0) {
continue;
}
// ignore the task if it isn't a action task
var task = behaviorTree.taskList[stack.Peek()];
if (!(task is Action)) {
continue;
}
activeTasks += behaviorTree.taskList[behaviorTree.activeStack[j].Peek()].FriendlyName + (j < behaviorTree.activeStack.Count - 1 ? "\n" : "");
}
var ownerTransform = behaviorTree.behavior.transform;
var screenPos = Camera.main.WorldToScreenPoint(ownerTransform.position);
var guiPoint = GUIUtility.ScreenToGUIPoint(screenPos);
var label = new GUIContent(activeTasks);
var dimensions = GUI.skin.label.CalcSize(label);
// add some padding
dimensions.x += 14;
dimensions.y += 5;
GUI.Box(new Rect(guiPoint.x - dimensions.x / 2, Screen.height - guiPoint.y + dimensions.y / 2, dimensions.x, dimensions.y), label);
}
}
}
}