Files
2026-03-05 11:39:06 +08:00

82 lines
3.0 KiB
C#
Raw Permalink 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 Fantasy.Entitas.Interface;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
namespace Fantasy;
public sealed class ContainerComponentDestroySystem : DestroySystem<ContainerComponent>
{
protected override void Destroy(ContainerComponent self)
{
foreach (var (_, container) in self.Containers)
{
container.Dispose();
}
self.Containers.Clear();
}
}
public sealed class ContainerComponentDeserializeSystem : DeserializeSystem<ContainerComponent>
{
protected override void Deserialize(ContainerComponent self)
{
var account = self.GetParent<Account>();
foreach (var (key, container) in self.Containers)
{
container.Deserialize(self.Scene);
container.Account = account;
}
}
}
public sealed class ContainerComponentAwakeSystem : AwakeSystem<ContainerComponent>
{
protected override void Awake(ContainerComponent self)
{
var account = self.GetParent<Account>();
var unitConfig = account.UnitConfig;
// 根据角色的配置文件创建容器。
foreach (var containerConfigId in unitConfig.MountContainer)
{
if (!ContainerConfigData.Instance.TryGet(containerConfigId, out var containerConfig))
{
Log.Error($"containerConfigId : {containerConfigId} not found");
return;
}
ContainerHelper.Create(account, (ContainerType)containerConfig.Type);
}
// 创建初始化物品到容器中。
var unitConfigItems = unitConfig.Items;
for (var itemArgs = 0; itemArgs < unitConfigItems.Length; itemArgs += 3)
{
try
{
var containerType = unitConfigItems[itemArgs];
var itemConfigId = unitConfigItems[itemArgs + 1];
var itemCount = (int)unitConfigItems[itemArgs + 2];
var item = ItemFactory.Create(self.Scene, itemConfigId, itemCount, true);
if (item == null)
{
// 这里创建物品失败,可以选择跳过这个物品,继续下一个创建。
// 也可以直接停止全部的物品创建。
continue;
}
// 添加物品到容器中。
var addItemErrorCode = ContainerHelper.AddItem(account, (ContainerType)containerType, item, ItemReason.ContainerAdd, false);
if (addItemErrorCode != 0)
{
Log.Error($"cant add item to container errorCode:{addItemErrorCode}");
continue;
}
}
catch
{
Log.Error($"unitConfig :{unitConfig.Id} items参数不正确要求是3个一组。");
// 你可以选择如果有一个出错了,跳过、继续下一个创建。
// 你还可以选择如果出错了,直接终止跳出。
break;
}
}
}
}