Files
Continentis/Assets/Scripts/MainGame/Card/Editor/CardDataEditor.cs
SoulliesOfficial 27af2b7eb2 小修
2025-11-30 21:22:39 -05:00

159 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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