using System.Collections.Generic; using System.Linq; using Easter2025.Utilies; using Kitchen; using Kitchen.ShopBuilder; using KitchenData; using KitchenMods; using Unity.Collections; using Unity.Entities; namespace Easter2025.Systems { public class DishLockedAppliances : StartOfDaySystem, IModSystem { private EntityQuery _CurrentMenuItems; private EntityQuery _ShopBuilderOptions; protected override void Initialise() { base.Initialise(); _CurrentMenuItems = base.GetEntityQuery(typeof(CMenuItem), typeof(CAvailableIngredient)); _ShopBuilderOptions = base.GetEntityQuery(typeof(CShopBuilderOption)); } private static Dictionary> Appliances = new Dictionary> { { GDOReferences.DishDyedEggs.ID, new List { GDOReferences.GrassBunny, GDOReferences.MountedCarrots, } } }; private readonly Dictionary BuilderOptions = new Dictionary(); protected override void OnUpdate() { BuilderOptions.Clear(); foreach (Appliance appliance in Appliances.Keys.SelectMany(id => Appliances[id])) { appliance.IsPurchasable = false; } using (NativeArray CurrentMenuItems = _CurrentMenuItems.ToEntityArray(Allocator.Temp)) { using (NativeArray ShopBuilderOptions = _ShopBuilderOptions.ToEntityArray(Allocator.Temp)) { foreach (Entity ShopBuilderOption in ShopBuilderOptions) { if (!Require(ShopBuilderOption, out CShopBuilderOption cShopBuilderOption)) continue; if (BuilderOptions.ContainsKey(cShopBuilderOption.Appliance)) continue; BuilderOptions.Add(cShopBuilderOption.Appliance, ShopBuilderOption); } foreach (Appliance appliance in Appliances.Keys.SelectMany(id => Appliances[id])) { if (!BuilderOptions.ContainsKey(appliance.ID)) continue; EntityManager.DestroyEntity(BuilderOptions[appliance.ID]); BuilderOptions.Remove(appliance.ID); } } foreach (Entity CurrentMenuItem in CurrentMenuItems) { if (!Require(CurrentMenuItem, out CMenuItem cMenuItem)) continue; if (!Appliances.ContainsKey(cMenuItem.SourceDish)) continue; foreach (Appliance appliance in Appliances[cMenuItem.SourceDish]) { AddOption(appliance); } } } } private void AddOption(Appliance app) { Entity entity = EntityManager.CreateEntity(typeof(CShopBuilderOption)); EntityManager.SetComponentData(entity, new CShopBuilderOption(app)); } } }