159 lines
8.1 KiB
C#
159 lines
8.1 KiB
C#
#if UNITY_EDITOR
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
using SLSFramework.UModAssistance;
|
||
using Continentis.MainGame.Character;
|
||
using Continentis.Mods;
|
||
|
||
namespace Continentis.MainGame.Card
|
||
{
|
||
[CustomEditor(typeof(CardData))]
|
||
public partial class CardDataEditor : DataEditor
|
||
{
|
||
// 存储我们需要自定义绘制的属性的引用
|
||
private SerializedProperty modNameProp;
|
||
private SerializedProperty categoryNameProp;
|
||
private SerializedProperty classNameProp;
|
||
private SerializedProperty displayNameProp;
|
||
private SerializedProperty cardRarityProp;
|
||
private SerializedProperty cardTypeProp;
|
||
private SerializedProperty keywordsProp;
|
||
|
||
private SerializedProperty cardSpriteProp;
|
||
private SerializedProperty cardLayoutTagsProp;
|
||
private SerializedProperty functionTextProp;
|
||
private SerializedProperty cardDescriptionProp;
|
||
|
||
private SerializedProperty intentionIconKeysProp;
|
||
private SerializedProperty intentionValueNamesProp;
|
||
private SerializedProperty intentionTextOverrideProp;
|
||
private SerializedProperty baseWeightProp;
|
||
|
||
|
||
private SerializedProperty variableAttributesProp;
|
||
private SerializedProperty originalAttributesProp;
|
||
private SerializedProperty runtimeCurrentAttributesProp;
|
||
|
||
private SerializedProperty upgradeNodeProp;
|
||
|
||
private SerializedProperty prefabsProp;
|
||
private SerializedProperty derivativeCardsProp;
|
||
private SerializedProperty derivativeCharactersProp;
|
||
|
||
protected override void OnEnable()
|
||
{
|
||
base.OnEnable();
|
||
// 在启用时,根据我们修改后的字段名找到对应的SerializedProperty
|
||
modNameProp = serializedObject.FindProperty("modName");
|
||
classNameProp = serializedObject.FindProperty("className");
|
||
categoryNameProp = serializedObject.FindProperty("categoryName");
|
||
displayNameProp = serializedObject.FindProperty("displayName");
|
||
cardRarityProp = serializedObject.FindProperty("cardRarity");
|
||
cardTypeProp = serializedObject.FindProperty("cardType");
|
||
keywordsProp = serializedObject.FindProperty("keywords");
|
||
cardSpriteProp = serializedObject.FindProperty("cardSprite");
|
||
cardLayoutTagsProp = serializedObject.FindProperty("cardLayoutTags");
|
||
functionTextProp = serializedObject.FindProperty("functionText");
|
||
cardDescriptionProp = serializedObject.FindProperty("cardDescription");
|
||
|
||
intentionIconKeysProp = serializedObject.FindProperty("intentionIconKeys");
|
||
intentionValueNamesProp = serializedObject.FindProperty("intentionValueNames");
|
||
intentionTextOverrideProp = serializedObject.FindProperty("intentionTextOverride");
|
||
baseWeightProp = serializedObject.FindProperty("baseWeight");
|
||
|
||
variableAttributesProp = serializedObject.FindProperty("variableAttributes");
|
||
originalAttributesProp = serializedObject.FindProperty("originalAttributes");
|
||
runtimeCurrentAttributesProp = serializedObject.FindProperty("runtimeCurrentAttributes");
|
||
upgradeNodeProp = serializedObject.FindProperty("upgradeNode");
|
||
prefabsProp = serializedObject.FindProperty("prefabRefs");
|
||
derivativeCardsProp = serializedObject.FindProperty("derivativeCardDataRefs");
|
||
derivativeCharactersProp = serializedObject.FindProperty("derivativeCharacterDataRefs");
|
||
}
|
||
|
||
public override void OnInspectorGUI()
|
||
{
|
||
serializedObject.Update();
|
||
|
||
// --- 绘制自定义的Type选择器 ---
|
||
// 我们把它从所有自动绘制的属性中分离出来,放在最前面或最后面,让布局更清晰
|
||
EditorGUILayout.Space(); // 增加一点间距
|
||
EditorGUILayout.LabelField("Fundamental", EditorStyles.boldLabel);
|
||
|
||
DrawSearchableTypeSelector(
|
||
classNameProp, // 1. 存储类名的字符串属性
|
||
"Card Logic Class", // 2. 显示的标签
|
||
typeof(CardLogicBase), // 3. 要搜索的基类
|
||
(outType) => // 4. 【关键】当用户选择后执行的回调
|
||
{
|
||
string className = outType.Name;
|
||
string modName = outType.Namespace!.Replace("Continentis.Mods.", "").Split('.')[0];
|
||
string categoryName = outType.Namespace!.Replace("Continentis.Mods." + modName + ".Cards", "");
|
||
if (!string.IsNullOrEmpty(categoryName))
|
||
{
|
||
categoryName = outType.Namespace!.Replace("Continentis.Mods." + modName + ".Cards", "").Substring(1); // 去掉开头的点
|
||
}
|
||
string displayName = "Card_" + modName + "_" + className + "_DisplayName";
|
||
string functionTextName = "Card_" + modName + "_" + className + "_FunctionText";
|
||
|
||
classNameProp.stringValue = className;
|
||
modNameProp.stringValue = modName;
|
||
categoryNameProp.stringValue = categoryName;
|
||
displayNameProp.stringValue = displayName;
|
||
functionTextProp.stringValue = functionTextName;
|
||
|
||
Debug.Log(outType.FullName);
|
||
Debug.Log($"modName: {modName}, categoryName: {categoryName}, className: {className}, displayName: {displayName}, functionText: {functionTextName}");
|
||
|
||
serializedObject.ApplyModifiedProperties();
|
||
},
|
||
"Continentis.Mods", // 5. 你的 namespacePrefix
|
||
"Cards" // 6. 你的 namespaceToRemove (注意:根据你的代码,这里不应包含".")
|
||
);
|
||
|
||
EditorGUI.BeginDisabledGroup(true);
|
||
EditorGUILayout.PropertyField(modNameProp);
|
||
EditorGUILayout.PropertyField(categoryNameProp);
|
||
EditorGUILayout.PropertyField(classNameProp);
|
||
EditorGUILayout.PropertyField(displayNameProp);
|
||
EditorGUI.EndDisabledGroup();
|
||
|
||
EditorGUILayout.PropertyField(cardRarityProp);
|
||
EditorGUILayout.PropertyField(cardTypeProp);
|
||
DrawListWithEditRefSelector(keywordsProp, "CardKeywords");
|
||
|
||
EditorGUILayout.PropertyField(cardSpriteProp);
|
||
EditorGUILayout.PropertyField(cardLayoutTagsProp, true);
|
||
EditorGUILayout.PropertyField(functionTextProp);
|
||
EditorGUILayout.PropertyField(cardDescriptionProp);
|
||
|
||
EditorGUILayout.Space();
|
||
EditorGUILayout.LabelField("Attributes", EditorStyles.boldLabel);
|
||
DrawListWithEditRefSelector(intentionIconKeysProp, "IntentionIconKeys");
|
||
DrawListWithLocalSelector(intentionValueNamesProp, "variableAttributes");
|
||
EditorGUILayout.PropertyField(intentionTextOverrideProp);
|
||
EditorGUILayout.PropertyField(baseWeightProp);
|
||
EditorGUILayout.PropertyField(variableAttributesProp, true);
|
||
EditorGUILayout.PropertyField(originalAttributesProp, true);
|
||
EditorGUILayout.PropertyField(runtimeCurrentAttributesProp, true);
|
||
|
||
EditorGUILayout.Space();
|
||
EditorGUILayout.LabelField("Upgrade", EditorStyles.boldLabel);
|
||
EditorGUILayout.PropertyField(upgradeNodeProp);
|
||
|
||
// --- 绘制自定义的引用列表 ---
|
||
EditorGUILayout.Space();
|
||
EditorGUILayout.LabelField("References", EditorStyles.boldLabel);
|
||
DrawCharacterListGUI<GameObject>(prefabsProp);
|
||
DrawCharacterListGUI<CardData>(derivativeCardsProp);
|
||
DrawCharacterListGUI<CharacterData>(derivativeCharactersProp);
|
||
|
||
HandleObjectPicker();
|
||
|
||
serializedObject.ApplyModifiedProperties();
|
||
}
|
||
}
|
||
}
|
||
#endif |