82 lines
3.0 KiB
C#
82 lines
3.0 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
} |