DataEditor & StorySystem Graph

This commit is contained in:
SoulliesOfficial
2025-11-10 11:18:19 -05:00
parent 1bca620966
commit ea75bd5225
76 changed files with 2340 additions and 90 deletions

View File

@@ -28,7 +28,9 @@ namespace Continentis.MainGame.Card
[CreateAssetMenu(menuName = "Continentis/MainGame/Card/CardData", fileName = "CardData")]
public partial class CardData : ScriptableObject
{
[Header("Fundamental")] public string modName;
[Header("Fundamental")]
public string modName;
public string categoryName;
public string className;
public string displayName;
public Rarity cardRarity;

View File

@@ -15,6 +15,7 @@ namespace Continentis.MainGame.Card
{
// 存储我们需要自定义绘制的属性的引用
private SerializedProperty modNameProp;
private SerializedProperty categoryNameProp;
private SerializedProperty classNameProp;
private SerializedProperty displayNameProp;
private SerializedProperty cardRarityProp;
@@ -47,6 +48,7 @@ namespace Continentis.MainGame.Card
// 在启用时根据我们修改后的字段名找到对应的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");
@@ -73,20 +75,41 @@ namespace Continentis.MainGame.Card
// 我们把它从所有自动绘制的属性中分离出来,放在最前面或最后面,让布局更清晰
EditorGUILayout.Space(); // 增加一点间距
EditorGUILayout.LabelField("Fundamental", EditorStyles.boldLabel);
if (DrawTypeSelectorGUI(classNameProp, "Card Logic Class", typeof(CardLogicBase), out Type outType, "Continentis.Mods", "Cards"))
{
string className = classNameProp.stringValue;
string modName = outType.Namespace!.Replace("Continentis.Mods.", "").Split('.')[0];
string displayName = "Card_" + modName + "_" + className + "_DisplayName";
string functionTextName = "Card_" + modName + "_" + className + "_FunctionText";
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";
modNameProp.stringValue = modName;
displayNameProp.stringValue = displayName;
functionTextProp.stringValue = functionTextName;
}
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();

View File

@@ -77,7 +77,7 @@ namespace Continentis.MainGame.Character
if (_haveCustomClassProp.boolValue)
{
// 如果勾选则显示class选择器
DrawTypeSelectorGUI(_classFullNameProp, "Character Class", typeof(CharacterBase), out _, "Continentis.Mods", ".Characters");
DrawSearchableTypeSelector(_classFullNameProp, "Character Class", typeof(CharacterBase), null, "Continentis.Mods", "Characters");
}
else
{

View File

@@ -74,15 +74,22 @@ namespace Continentis.MainGame.Equipment
if (_haveCustomClassProp.boolValue)
{
// 如果勾选则显示class选择器 (假设基类为EquipmentBase, 命名空间为.Equipments)
if (DrawTypeSelectorGUI(_classNameProp, "Equipment Class", typeof(EquipmentBase), out Type outType, "Continentis.Mods", ".Equipments"))
{
string className = _classNameProp.stringValue;
string modName = outType.Namespace!.Replace("Continentis.Mods.", "").Split('.')[0];
string displayName = "Card_" + modName + "_" + className + "_DisplayName";
_modNameProp.stringValue = modName;
_displayNameProp.stringValue = displayName;
}
DrawSearchableTypeSelector(
_classNameProp,
"Equipment Class",
typeof(EquipmentBase),
(outType) =>
{
string className = outType.Name;
string modName = outType.Namespace!.Replace("Continentis.Mods.", "").Split('.')[0];
string displayName = "Card_" + modName + "_" + className + "_DisplayName";
_classNameProp.stringValue = className;
_modNameProp.stringValue = modName;
_displayNameProp.stringValue = displayName;
},
"Continentis.Mods",
"Equipments");
EditorGUI.BeginDisabledGroup(true);
}