using System; using System.Collections.Generic; namespace Net.Project.B.Craft { // 合成配方 public interface ICraftRecipe { int Id { get; } public int CraftItemId { get; } IReadOnlyDictionary RequiredItems { get; } IReadOnlyDictionary RequiredTags { get; } IReadOnlyCollection RequiredEnvironments { get; } } public class CraftRecipe : ICraftRecipe { public int Id { get; set; } public int CraftItemId { get; set; } public readonly Dictionary RequiredItems = new(); public readonly Dictionary RequiredTag = new(); public readonly HashSet RequiredEnvironments = new(); IReadOnlyDictionary ICraftRecipe.RequiredItems => RequiredItems; IReadOnlyDictionary ICraftRecipe.RequiredTags => RequiredTag; IReadOnlyCollection ICraftRecipe.RequiredEnvironments => RequiredEnvironments; } // 合成服务 public interface ICraftingService { /// /// 获取可合成配方(无 GC 分配),写入调用方传入的缓冲区 /// /// 结果缓冲区 /// 写入的个数 int GetCraftableRecipesNonGc( ICraftRecipe[] buffer); /// /// 判断是否可以合成(无 GC) /// bool CanCraftNonGc(ICraftRecipe recipe,out ICraftRecipe missing); /// /// 执行合成(不会分配新对象) /// bool TryCraftNonGc(ICraftRecipe recipe); /// /// 获取合成环境 /// /// /// int QueryCraftEnvironments(ICraftEnvironment[] buffer); } }