163 lines
5.5 KiB
C#
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 |