using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace MyFrameworkPure
{
///
/// 流程图窗口
///
public class FlowchartDesignerWindow : EditorWindow
{
private Vector2 mActionScrollPosition;
private Vector2 mActionViewSize = new Vector2(300, 800);
private Vector2 mActionScrollSize = new Vector2(300, 1600);
private Vector2 mChartScrollPosition;
private Vector2 mChartAreaOffset;
private Rect mChartViewRect = new Rect(300, 20, 0, 0);
private Rect mChartScrollRect = new Rect(0, 0, 30000, 30000);
private float mSearchFieldWidth = 300;
private float mWindowWidth;//窗体宽度
private float mWindowHeight;//窗体高度
private int mLogicZoom = 1;//逻辑面板缩放
private const int ScrollbarWidth = 20;//滚动条宽度
private string mSearchString;
private Material mGridMaterial;
[MenuItem("Tools/流程图 编辑器 %F1")]
static void OpenLogicDesignerWindow()
{
FlowchartDesignerWindow window = EditorWindow.GetWindow();
window.titleContent = new GUIContent("流程图 编辑器");
window.Show();
}
void OnEnable()
{
mGridMaterial = new Material(Shader.Find("Hidden/Behavior Designer/Grid"))
{
hideFlags = HideFlags.HideAndDontSave,
shader = { hideFlags = HideFlags.HideAndDontSave }
};
}
private void OnGUI()
{
mWindowWidth = position.width;
mWindowHeight = position.height;
//行为面板
GUILayout.BeginVertical();
mSearchString = GUILayout.TextField(mSearchString, GUI.skin.FindStyle("ToolbarSeachTextField"), GUILayout.Width(mSearchFieldWidth));
GUILayout.Space(4f);
mActionScrollPosition = GUILayout.BeginScrollView(mActionScrollPosition, false, true, GUILayout.Width(mActionViewSize.x));
GUILayout.Button("xxx");
GUILayout.EndScrollView();
GUILayout.EndVertical();
//流程图面板
mChartViewRect.width = mWindowWidth - mActionViewSize.x;
mChartViewRect.height = mWindowHeight - mChartViewRect.y;
mChartScrollPosition = GUI.BeginScrollView(mChartViewRect, mChartScrollPosition, mChartScrollRect, true, true);
GUI.EndScrollView();
mChartAreaOffset = mChartScrollPosition - mChartViewRect.size * 0.5f;
DrawGrid();
}
//绘制流程图网格
private void DrawGrid()
{
//绘制黑色网格线
mGridMaterial.SetPass((!EditorGUIUtility.isProSkin) ? 1 : 0);
GL.PushMatrix();
GL.Begin(1);
DrawGridLines(10f * this.mLogicZoom, new Vector2(this.mChartAreaOffset.x % 10f * this.mLogicZoom, this.mChartAreaOffset.y % 10f * this.mLogicZoom));
GL.End();
GL.PopMatrix();
//绘制白色网格线
mGridMaterial.SetPass((!EditorGUIUtility.isProSkin) ? 3 : 2);
GL.PushMatrix();
GL.Begin(1);
DrawGridLines(50f * this.mLogicZoom, new Vector2(this.mChartAreaOffset.x % 50f * this.mLogicZoom, this.mChartAreaOffset.y % 50f * this.mLogicZoom));
GL.End();
GL.PopMatrix();
}
//绘制线条
private void DrawGridLines(float gridSize, Vector2 offset)
{
float num = mChartViewRect.x + offset.x;
if (offset.x < 0f)
{
num += gridSize;
}
for (float num2 = num; num2 < mChartViewRect.x + mChartViewRect.width - ScrollbarWidth; num2 += gridSize)
{
this.DrawLine(new Vector2(num2, mChartViewRect.y), new Vector2(num2, mChartViewRect.y + mChartViewRect.height - ScrollbarWidth));
}
float num3 = mChartViewRect.y + offset.y;
if (offset.y < 0f)
{
num3 += gridSize;
}
for (float num4 = num3; num4 < mChartViewRect.y + mChartViewRect.height - ScrollbarWidth; num4 += gridSize)
{
this.DrawLine(new Vector2(mChartViewRect.x, num4), new Vector2(mChartViewRect.x + mChartViewRect.width - ScrollbarWidth, num4));
}
}
private void DrawLine(Vector2 p1, Vector2 p2)
{
GL.Vertex(p1);
GL.Vertex(p2);
}
}
}