151 lines
4.1 KiB
C#
151 lines
4.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Gameplay;
|
|
using Sirenix.OdinInspector.Editor;
|
|
using UnityEditor;
|
|
using UnityEditor.UI;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
[CustomEditor(typeof(ShowComponent), true)]
|
|
public class ShowComponentInspector : OdinEditor
|
|
{
|
|
private ShowComponent Target => target as ShowComponent;
|
|
/// <summary>
|
|
/// 角色演出点列表
|
|
/// </summary>
|
|
private readonly List<Transform> listCharacterShowPoint = new();
|
|
/// <summary>
|
|
/// 道具演出点列表
|
|
/// </summary>
|
|
private readonly List<Transform> listItemShowPointRoot = new();
|
|
/// <summary>
|
|
/// 记录上一次角色演出点根节点
|
|
/// </summary>
|
|
private Transform lastCharacterShowPointRoot;
|
|
/// <summary>
|
|
/// 记录上一次道具演出点根节点
|
|
/// </summary>
|
|
private Transform lastItemShowPointRoot;
|
|
/// <summary>
|
|
/// 角色演出点是否展开
|
|
/// </summary>
|
|
private bool isCharacterFoldOut;
|
|
/// <summary>
|
|
/// 道具演出点是否展开
|
|
/// </summary>
|
|
private bool isItemFoldOut;
|
|
private GUIStyle style;
|
|
|
|
private void InitGuiStyle()
|
|
{
|
|
if (style == null)
|
|
{
|
|
style = new(GUI.skin.label)
|
|
{
|
|
fontSize = 30,
|
|
};
|
|
style.normal.textColor = Color.black;
|
|
}
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
base.OnInspectorGUI();
|
|
|
|
RefreshShowPoint();
|
|
|
|
if (CommonUtils.IsInGame())
|
|
{
|
|
GUI.enabled = false;
|
|
EditorGUILayout.IntField("抽取目标数", Target.CharacterMaxCount);
|
|
GUI.enabled = true;
|
|
}
|
|
|
|
isCharacterFoldOut = EditorGUILayout.Foldout(isCharacterFoldOut, $"角色演出点: ({listCharacterShowPoint.Count}个)");
|
|
if (isCharacterFoldOut)
|
|
{
|
|
foreach (Transform tsShowPoint in listCharacterShowPoint)
|
|
{
|
|
EditorGUILayout.LabelField(tsShowPoint.name);
|
|
}
|
|
}
|
|
|
|
isItemFoldOut = EditorGUILayout.Foldout(isItemFoldOut, $"道具演出点:({listItemShowPointRoot.Count}个)");
|
|
if (isItemFoldOut)
|
|
{
|
|
foreach (Transform tsShowPoint in listItemShowPointRoot)
|
|
{
|
|
EditorGUILayout.LabelField(tsShowPoint.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnSceneGUI()
|
|
{
|
|
InitGuiStyle();
|
|
|
|
int pointID = 1;
|
|
Color oldColor = Handles.color;
|
|
Handles.color = Color.red;
|
|
foreach (Transform tsShowPoint in listCharacterShowPoint)
|
|
{
|
|
if (tsShowPoint)
|
|
{
|
|
Handles.DrawSolidDisc(tsShowPoint.position, Vector3.up, 0.2f);
|
|
Handles.Label(tsShowPoint.position, $"{pointID}", style);
|
|
}
|
|
|
|
pointID++;
|
|
}
|
|
|
|
pointID = 1;
|
|
Handles.color = Color.blue;
|
|
foreach (Transform tsShowPoint in listItemShowPointRoot)
|
|
{
|
|
if (tsShowPoint)
|
|
{
|
|
Handles.DrawSolidDisc(tsShowPoint.position, Vector3.up, 0.2f);
|
|
Handles.Label(tsShowPoint.position, $"{pointID}", style);
|
|
}
|
|
|
|
pointID++;
|
|
}
|
|
|
|
Handles.color = oldColor;
|
|
}
|
|
|
|
private void RefreshShowPoint()
|
|
{
|
|
if (lastCharacterShowPointRoot != Target.TsShowPointRoot)
|
|
{
|
|
lastCharacterShowPointRoot = Target.TsShowPointRoot;
|
|
|
|
listCharacterShowPoint.Clear();
|
|
|
|
if (Target.TsShowPointRoot == null)
|
|
return;
|
|
|
|
for (int i = 0; i < Target.TsShowPointRoot.childCount; ++i)
|
|
{
|
|
listCharacterShowPoint.Add(Target.TsShowPointRoot.GetChild(i));
|
|
}
|
|
}
|
|
|
|
if (lastItemShowPointRoot != Target.TsItemShowPointRoot)
|
|
{
|
|
lastItemShowPointRoot = Target.TsItemShowPointRoot;
|
|
|
|
listItemShowPointRoot.Clear();
|
|
|
|
if (Target.TsItemShowPointRoot == null)
|
|
return;
|
|
|
|
for (int i = 0; i < Target.TsItemShowPointRoot.childCount; ++i)
|
|
{
|
|
listItemShowPointRoot.Add(Target.TsItemShowPointRoot.GetChild(i));
|
|
}
|
|
}
|
|
}
|
|
} |