NLDClient-yudde/ProjectNLD/Assets/Editor/SkillEditor/SkillEditorWindow.cs

163 lines
5.5 KiB
C#

#if UNITY_EDITOR
namespace SkillEditor
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using Sirenix.OdinInspector.Editor;
using Sirenix.OdinInspector;
using Sirenix.Utilities.Editor;
using Sirenix.Utilities;
using System.Linq;
using DG.DOTweenEditor;
public class SkillEditorWindow : OdinMenuEditorWindow
{
[MenuItem("Tools/SkillEditor _F12")]
private static void OpenWindow()
{
var window = GetWindow<SkillEditorWindow>();
window.titleContent = new GUIContent("技能编辑器");
// Nifty little trick to quickly position the window in the middle of the editor.
window.position = GUIHelper.GetEditorWindowRect().AlignCenter(700, 700);
}
protected override OdinMenuTree BuildMenuTree()
{
SkillEditorDataManager.instance.LoadDatas();
SkillEditorDataManager.instance.isInEdit = false;
SkillEditorDataManager.instance.editorWindow = this;
Debug.Log("执行一次BuildMenuTree");
var innerUISkill = ScriptableObject.CreateInstance<EditorSkillInnerUI>();
SkillEditorDataManager.instance.innerUISkill = innerUISkill;
var tree = new OdinMenuTree(true);
tree.DefaultMenuStyle.IconSize = 28.00f;
tree.Config.DrawSearchToolbar = true;
tree.Add(SkillEditorDefine.TITLE_SKILL, innerUISkill);
var skillList = SkillEditorDataManager.instance.skillList;
Debug.Log("总共:" + skillList.Count + "个");
for (var i = 0; i < skillList.Count; ++i)
{
var skillData = skillList[i];
var combieName = "ID:" + skillData.skillId + "|" + skillData.skillName;
tree.AddMenuItemAtPath(SkillEditorDefine.TITLE_SKILL, new OdinMenuItem(tree,
combieName, skillData));
}
// tree.Add(SkillEditorDefine.TITLE_BULLET, null);
// tree.Add(SkillEditorDefine.TITLE_BUFF, null);
return tree;
}
private OdinMenuItem _lastSelectItem;
protected override void OnBeginDrawEditors()
{
var selected = this.MenuTree.Selection.FirstOrDefault();
if (selected != _lastSelectItem)
{
_lastSelectItem = selected;
_OnSelectChanged();
}
var toolbarHeight = this.MenuTree.Config.SearchToolbarHeight;
SirenixEditorGUI.BeginHorizontalToolbar(toolbarHeight);
{
if (selected != null)
{
var rawValue = selected.Value;
if (rawValue == null)
{
// 未选中
}
else if (rawValue is EditorSkillInnerUI)
{
// 选中的title
GUILayout.Label(selected.Name);
//if (SirenixEditorGUI.ToolbarButton("创建技能"))
//{
//}
}
else if (rawValue is EditorSkillData)
{
// 选中的对象
GUILayout.Label("技能: " + selected.Name);
//if (SkillEditorDataManager.instance.isChanged)
//{
// if (SirenixEditorGUI.ToolbarButton("保存"))
// {
// // 保存
// _OnClickSave();
// }
//}
//if (SirenixEditorGUI.ToolbarButton("删除"))
//{
// // 弹窗提示
// _OnClickDelete();
//}
}
}
}
SirenixEditorGUI.EndHorizontalToolbar();
}
private void _OnClickDelete()
{
// 删除数据
var skillData = SkillEditorDataManager.instance.clickSkillData;
SkillEditorDataManager.instance.RemoveSkillData(skillData);
// 删除menuItem
_lastSelectItem.Remove();
}
private void _OnClickSave()
{
// 保存数据
var skillData = SkillEditorDataManager.instance.clickSkillData;
SkillEditorDataManager.instance.EditSkillData(skillData);
SkillEditorDataManager.instance.isChanged = false;
// 更新menuItem
_lastSelectItem.Name = "ID:" + skillData.skillId + "|" + skillData.skillName;
}
private void _OnSelectChanged()
{
if (_lastSelectItem == null)
{
return;
}
var rawValue = _lastSelectItem.Value;
if (rawValue == null || rawValue is EditorSkillInnerUI)
{
// 选中的title
SkillEditorDataManager.instance.isInEdit = false;
}
else if (rawValue is EditorSkillData)
{
// 选中的对象
SkillEditorDataManager.instance.isInEdit = true;
SkillEditorDataManager.instance.isChanged = false;
SkillEditorDataManager.instance.clickSkillData = rawValue as EditorSkillData;
}
}
}
}
#endif