MOD!
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Continentis.MainGame.Card;
|
||||
using Continentis.MainGame.UI;
|
||||
using Sirenix.OdinInspector;
|
||||
using SoulliesFramework.General;
|
||||
using NaughtyAttributes;
|
||||
using SLSFramework.General;
|
||||
using SLSFramework.UModAssistance;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
@@ -15,50 +17,72 @@ using UnityEditor;
|
||||
namespace Continentis.MainGame.Character
|
||||
{
|
||||
[CreateAssetMenu(menuName = "Continentis/MainGame/Character/CharacterData", fileName = "CharacterData")]
|
||||
public partial class CharacterData : SerializedScriptableObject
|
||||
public partial class CharacterData : ScriptableObject
|
||||
{
|
||||
[Title("Fundamental")]
|
||||
public string characterName;
|
||||
|
||||
[TextArea(1,10)]
|
||||
public string characterDescription;
|
||||
|
||||
[Searchable]
|
||||
[Header("Fundamental")]
|
||||
public bool haveCustomClass;
|
||||
public string classFullName;
|
||||
public string modName;
|
||||
public string className;
|
||||
public string displayName;
|
||||
public List<string> tags;
|
||||
|
||||
[Title("Attributes")]
|
||||
[Searchable]
|
||||
[DictionaryDrawerSettings(KeyColumnWidth = 400)]
|
||||
public Dictionary<string, float> coreAttributes;
|
||||
public Sprite avatar;
|
||||
public Sprite portrait;
|
||||
|
||||
[Searchable]
|
||||
[DictionaryDrawerSettings(KeyColumnWidth = 400)]
|
||||
public Dictionary<string, float> generalAttributes;
|
||||
public string characterDescription;
|
||||
public string characterStory;
|
||||
|
||||
[Header("Attributes")]
|
||||
[Tooltip("角色的核心属性:第一栏是属性名,第二栏是属性值")]
|
||||
public SerializableDictionary<string, float> coreAttributes;
|
||||
|
||||
[Tooltip("角色的通常属性:第一栏是属性名,第二栏是属性值")]
|
||||
public SerializableDictionary<string, float> generalAttributes;
|
||||
|
||||
[Searchable]
|
||||
[DictionaryDrawerSettings(KeyColumnWidth = 400)]
|
||||
[Tooltip("初始化时赋予给CurrentGeneralAttributes的属性:第一栏是属性名,第二栏是初始化时使用对应名称的GeneralAttributes的数据,留空则默认为0,如果是float数字则直接使用该数字")]
|
||||
public Dictionary<string, string> endowingGeneralAttributes;
|
||||
public SerializableDictionary<string, string> runtimeGeneralAttributes;
|
||||
|
||||
[Title("Deck")]
|
||||
[Searchable]
|
||||
[Tooltip("初始卡组:第一栏是卡牌数据,第二栏是数量")]
|
||||
public Dictionary<CardData, int> initialDeck;
|
||||
[Header("View")]
|
||||
public int combatPositionOrder;
|
||||
public GameObject combatCharacterView;
|
||||
|
||||
[Title("HUD")]
|
||||
public HUDData hudData;
|
||||
[Header("References")]
|
||||
public List<string> prefabRefs = new List<string>();
|
||||
public List<string> derivativeCardDataRefs = new List<string>();
|
||||
public List<string> derivativeCharacterDataRefs = new List<string>();
|
||||
[Tooltip("初始卡组引用列表")]
|
||||
public List<string> initialDeckRef;
|
||||
[Tooltip("HUD信息引用列表")]
|
||||
public List<string> hudDataRefs;
|
||||
}
|
||||
|
||||
public partial class CharacterData
|
||||
{
|
||||
public string ModName => haveCustomClass ? classFullName.Split('_').First() : modName;
|
||||
public string ClassName => haveCustomClass ? classFullName.Split('_').Last() : className;
|
||||
}
|
||||
|
||||
public partial class CharacterData
|
||||
{
|
||||
public static CharacterData Get(string dataID)
|
||||
{
|
||||
return ModManager.GetData<CharacterData>(dataID);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public partial class CharacterData
|
||||
{
|
||||
private const string ModsRootPath = "Assets/CoreMods";
|
||||
|
||||
[Button("从所有的DefaultCollection中粘贴默认属性")]
|
||||
public void PasteDefaultAttributes()
|
||||
{
|
||||
List<CharacterAttributesDefaultCollection> targetCollections = new List<CharacterAttributesDefaultCollection>();
|
||||
string[] guids = AssetDatabase.FindAssets("t:CharacterAttributesDefaultCollection");
|
||||
|
||||
if (guids.Length > 1)
|
||||
{
|
||||
Debug.Log("找到了多个CharacterAttributesDefaultCollection,它们将被合并后导入CharacterData");
|
||||
}
|
||||
|
||||
foreach (string guid in guids)
|
||||
{
|
||||
@@ -76,10 +100,10 @@ namespace Continentis.MainGame.Character
|
||||
Type assetType = collection.GetType();
|
||||
string assetNamespace = assetType.Namespace;
|
||||
|
||||
// 检查目录是否有效,是否在"Assets/CoreMods/"下,并且是否以"/Characters/DefaultCollections"结尾
|
||||
// 检查目录是否有效,是否在"Assets/Mods/"下,并且是否以"/Characters/DefaultCollections"结尾
|
||||
if (!string.IsNullOrEmpty(directory) &&
|
||||
assetNamespace == typeof(CharacterAttributesDefaultCollection).Namespace &&
|
||||
directory.StartsWith("Assets/CoreMods/") &&
|
||||
directory.StartsWith("Assets/Mods/") &&
|
||||
directory.EndsWith("/Characters/DefaultCollections"))
|
||||
{
|
||||
// 3. 如果路径和命名空间都符合要求,则将该资产添加到目标列表中
|
||||
@@ -91,18 +115,18 @@ namespace Continentis.MainGame.Character
|
||||
|
||||
Dictionary<string, float> coreAttributes = new Dictionary<string, float>();
|
||||
Dictionary<string, float> generalAttributes = new Dictionary<string, float>();
|
||||
Dictionary<string, string> endowingGeneralAttributes = new Dictionary<string, string>();
|
||||
Dictionary<string, string> runtimeGeneralAttributes = new Dictionary<string, string>();
|
||||
|
||||
foreach (CharacterAttributesDefaultCollection collection in targetCollections)
|
||||
{
|
||||
collection.coreAttributes.PasteDictionary(coreAttributes);
|
||||
collection.generalAttributes.PasteDictionary(generalAttributes);
|
||||
collection.endowingGeneralAttributes.PasteDictionary(endowingGeneralAttributes);
|
||||
collection.runtimeGeneralAttributes.PasteDictionary(runtimeGeneralAttributes);
|
||||
}
|
||||
|
||||
coreAttributes.PasteDictionary(this.coreAttributes);
|
||||
generalAttributes.PasteDictionary(this.generalAttributes);
|
||||
endowingGeneralAttributes.PasteDictionary(this.endowingGeneralAttributes);
|
||||
runtimeGeneralAttributes.PasteDictionary(this.runtimeGeneralAttributes);
|
||||
Debug.Log($"Pasted default attributes to file {this.name}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user