提交示例代码
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user