Files
Cielonos/Assets/Scripts/MainGame/Items/Data/ContentData.cs
SoulliesOfficial 649b7a5ddc 更新
2026-05-23 08:27:50 -04:00

130 lines
4.2 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.
using System;
using System.Collections.Generic;
using NUnit.Framework;
using Sirenix.OdinInspector;
using UnityEngine;
namespace Cielonos.MainGame.Inventory
{
public enum ItemType
{
MainWeapon,
Support,
Passive,
Consumable
}
public enum ItemRarity
{
None,
Tera,
Moser,
Graham,
Epsilon,
Aleph
}
[CreateAssetMenu(fileName = "ContentData", menuName = "Cielonos/Items/ContentData")]
public partial class ContentData : SerializedScriptableObject
{
[InlineButton("CreateID", "Create")]
[ValueDropdown("GetAllItemTypes", IsUniqueList = true, DropdownHeight = 400)]
public Type itemClass;
public ItemType itemType;
public ItemRarity itemRarity;
[ValueDropdown("GetAllTags", IsUniqueList = true, DropdownHeight = 400)]
public List<string> tags;
[ValueDropdown("GetAllInstitutions", IsUniqueList = true, DropdownHeight = 400)]
public List<string> institutions;
[ReadOnly]
public string displayNameKey;
[ReadOnly]
public string descriptionKey;
[ShowIf("isMainWeapon")]
public Sprite rectIcon;
[HideIf("isMainWeapon")]
public Sprite squareIcon;
[TitleGroup("Drop Settings")]
[Tooltip("掉落权重,越大越容易被随机选中。设为 0 则不会出现在随机池中。")]
public float dropWeight = 1f;
[Tooltip("额外的掉落设置,可以在 Roll 时传入 filter 进行更复杂的筛选逻辑。")]
public Dictionary<string, float> dropSettings = new Dictionary<string, float>();
}
public partial class ContentData
{
private bool isMainWeapon => itemType == ItemType.MainWeapon;
private void CreateID()
{
if(string.IsNullOrEmpty(itemClass?.Name))
{
Debug.LogWarning("Class Name is empty. Cannot create Item ID.");
return;
}
string itemType = this.itemType.ToString();
string className = this.itemClass.Name;
displayNameKey = $"{itemType}_{className}_Name";
descriptionKey = $"{itemType}_{className}_Desc";
}
}
public partial class ContentData
{
#if UNITY_EDITOR
private List<string> GetAllTags()
{
return new List<string>
{
"Melee", "Ranged",
"Burn", "Freeze", "Fusion", "Decay",
"Shield", "Heal", "Crit", "Overload", "DoT"
};
}
/// <summary>
/// 获取项目中所有继承自ItemBase的类的名称列表用于编辑器下拉选择。可以根据需要添加命名空间过滤等逻辑。
/// </summary>
/// <returns></returns>
private List<Type> GetAllItemTypes()
{
List<Type> itemTypes = new List<Type>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes())
{
if (type.IsClass && !type.IsAbstract && typeof(ItemBase).IsAssignableFrom(type))
{
itemTypes.Add(type);
}
}
}
return itemTypes;
}
private List<string> GetAllInstitutions()
{
return new List<string>
{
"MilitaryIndustrialComplex", //Gun san fuku gō tai 軍産複合体 - 通用
"ShinshuManufacturing", //Shin shu sei zō 新州制造 - 机械扈从
"SkodaDynamics", //斯柯达 - 动能,爆炸
"WardenclyffeResonanceHub", //沃登克里夫 - 能量
"EuropeanOrganizationForNuclearResearch", //欧洲核子研究组织 - 核能
"DopplerLumierePhotonics", //多普勒-卢米埃尔 - 光子
"VitalisBiomass", //维塔利斯 - 生物
"Area6", //大陆技术领 第六区 - 尖端科技
"AcademyOfMagicalSciences", //魔法科学院 - 魔法
};
}
#endif
}
}