DataEditor & StorySystem Graph
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user