提交示例代码

This commit is contained in:
Bob.Song
2026-03-05 11:39:06 +08:00
commit 25958f58c3
2534 changed files with 209593 additions and 0 deletions

View File

@@ -0,0 +1,162 @@
using Fantasy.Entitas;
using Fantasy.Entitas.Interface;
using Fantasy.Helper;
namespace Fantasy.Equip;
public class EquipComponentAwakeSystem : AwakeSystem<EquipComponent>
{
protected override void Awake(EquipComponent self)
{
self.Awake();
}
}
public sealed class EquipComponentDestroySystem : DestroySystem<EquipComponent>
{
protected override void Destroy(EquipComponent self)
{
foreach (var (_, value) in self.MainAttrs)
{
value.Dispose();
}
foreach (var (_, value) in self.EntryAttrs)
{
value.Dispose();
}
self.Affixs.Clear();
self.MainAttrs.Clear();
self.EntryAttrs.Clear();
self.Durable = 0;
self.DurableMax = 0;
}
}
public sealed class EquipAttrDestroySystem : DestroySystem<EquipAttr>
{
protected override void Destroy(EquipAttr self)
{
self.Key = 0;
self.Value = 0;
self.SValue = 0;
}
}
public static class EquipComponentSystem
{
public static void Awake(this EquipComponent self)
{
var item = self.GetParent<Item>();
var itemConfig = item.Config;
// 设置装备的耐久
self.Durable = itemConfig.Durable;
self.DurableMax = self.Durable;
// 获取装备品质主属性方案
if (!EquipValueConfigData.Instance.TryGetValue(itemConfig.Id, itemConfig.Quality, out var equipValueConfig))
{
// 没有找到主属性方案,需要检查代码或配置表是否正确。
// 到这里的话就不需要继续执行了。
return;
}
// 设置主属性
self.InitMainAttrs(itemConfig, equipValueConfig);
// 设置附加(副)属性
self.InitEntryAttrs(itemConfig, equipValueConfig);
// 设置词缀
self.InitAffix(itemConfig, equipValueConfig);
}
private static void InitMainAttrs(this EquipComponent self, ItemConfig itemConfig, EquipValueConfig equipValueConfig)
{
self.MainAttrs.Clear();
// 循环遍历主属性。
foreach (var (key, value) in equipValueConfig.MainAttrs.Dic)
{
var equipAttr = Entity.Create<EquipAttr>(self.Scene, true, true);
equipAttr.Key = key;
equipAttr.Value = value;
self.MainAttrs.Add(key, equipAttr);
}
// 这里还可以加一些其他的需求。
}
private static void InitEntryAttrs(this EquipComponent self, ItemConfig itemConfig, EquipValueConfig equipValueConfig)
{
var equipEntryConfigId = equipValueConfig.EquipEntryConfigId;
// 很有可能当前的装备没有附加(副)属性,所以如果为默认值的情况下就不进行下面的逻辑。
if (equipEntryConfigId == 0)
{
return;
}
// 还有一种可能是设置的副(附加)属性不存在,一般这样的情况下都是策划配置的错误,这里的话也不进行下面的逻辑了。
if (!EquipEntryConfigData.Instance.TryGet(equipEntryConfigId, out var equipEntryConfig))
{
// 也可以在这里打印出一个错误,方便排查,找到这个错误告诉策划,让策划修改下。
// 推荐做法也可以一个单独的Scene在这里Scene里把这些所有配置加载出来按个的排查如果有错误就打印出来。
return;
}
self.EntryAttrs.Clear();
// 这里可以用权重来控制随机的数量和属性,但是这里就不演示的。
// 这里就是用直接的随机来做来了。
var entryCount = RandomHelper.RandomNumber(equipEntryConfig.Min, equipEntryConfig.Max);
// 获得当前随机附加属性的列表
var configAttrs = equipEntryConfig.Attrs;
var entryIndex = 0;
for (var i = 0; i < entryCount; i++)
{
var equipAttr = Entity.Create<EquipAttr>(self.Scene, true, true);
equipAttr.Key = configAttrs[entryIndex];
equipAttr.Value = RandomHelper.RandomNumber(configAttrs[entryIndex + 1], configAttrs[entryIndex + 2]);
self.EntryAttrs.Add(equipAttr.Key, equipAttr);
}
}
private static void InitAffix(this EquipComponent self, ItemConfig itemConfig, EquipValueConfig equipValueConfig)
{
var equipEntryConfigId = equipValueConfig.EquipEntryConfigId;
if (equipEntryConfigId == 0)
{
return;
}
if (!EquipEntryConfigData.Instance.TryGet(equipEntryConfigId, out var equipEntryConfig))
{
// 也可以在这里打印出一个错误,方便排查,找到这个错误告诉策划,让策划修改下。
// 推荐做法也可以一个单独的Scene在这里Scene里把这些所有配置加载出来按个的排查如果有错误就打印出来。
return;
}
if (equipEntryConfig.Affix.Length == 0)
{
// 有可能没有词缀,所以这里就不进行下面的逻辑了。
return;
}
// 随机词缀的数量
// 这里还是只做最简单的随机,如果想加权重的随机,可以自己实现下。
var configAffix = equipEntryConfig.Affix;
var affixCount = RandomHelper.RandomNumber(equipEntryConfig.AffixMin, equipEntryConfig.AffixMax);
for (var i = 0; i < affixCount; i++)
{
self.Affixs.Add(configAffix[i]);
}
}
public static EquipInfo ToEquipInfo(this EquipComponent self)
{
var equipInfo = new EquipInfo();
equipInfo.Durable = self.Durable;
equipInfo.DurableMax = self.DurableMax;
foreach (var (key,equipAttr) in self.MainAttrs)
{
equipInfo.MainKeys.Add(key);
equipInfo.EquipAttrKeys.Add(key);
equipInfo.EquipAttrValues.Add(equipAttr.Value);
equipInfo.EquipAttrSValues.Add(equipAttr.SValue);
}
return equipInfo;
}
}