using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Core.Library.Common.Addon
{
///
/// 模组的依赖集合
/// (地图名称()的数组)
/// (角色模组名称()的数组)
/// (技能模组名称()的数组)
/// (物品模组名称()的数组)
///
public readonly struct GameModuleDepend(string[] maps, string[] characters, string[] skills, string[] items)
{
///
/// 模组所使用的地图组
///
public string[] MapsDepend { get; } = maps;
///
/// 模组所使用的角色组
///
public string[] CharactersDepend { get; } = characters;
///
/// 模组所使用的技能组
///
public string[] SkillsDepend { get; } = skills;
///
/// 模组所使用的物品组
///
public string[] ItemsDepend { get; } = items;
///
/// 实际使用的地图组对象
/// 请使用 自动填充,不要自己添加
///
public List Maps { get; } = [];
///
/// 实际使用的角色组对象
/// 请使用 自动填充,不要自己添加
///
public Dictionary Characters { get; } = [];
///
/// 实际使用的技能组对象
/// 请使用 自动填充,不要自己添加
///
public Dictionary Skills { get; } = [];
///
/// 实际使用的物品组对象
/// 请使用 自动填充,不要自己添加
///
public Dictionary Items { get; } = [];
///
/// 获得所有的依赖项
/// 此方法会自动填充
///
public void GetDependencies(GameModuleLoader loader)
{
Maps.Clear();
Characters.Clear();
Skills.Clear();
Items.Clear();
Maps.AddRange(loader.Maps.Keys.Where(MapsDepend.Contains).Select(str => loader.Maps[str]));
foreach (CharacterModule modules in loader.Characters.Keys.Where(CharactersDepend.Contains).Select(str => loader.Characters[str]))
{
foreach (string key in modules.Characters.Keys)
{
Characters[key] = modules.Characters[key];
}
}
foreach (SkillModule modules in loader.Skills.Keys.Where(SkillsDepend.Contains).Select(str => loader.Skills[str]))
{
foreach (string key in modules.Skills.Keys)
{
Skills[key] = modules.Skills[key];
}
}
foreach (ItemModule modules in loader.Items.Keys.Where(ItemsDepend.Contains).Select(str => loader.Items[str]))
{
foreach (string key in modules.Items.Keys)
{
Items[key] = modules.Items[key];
}
}
}
}
}