Files
TheGreatEggscape-Public/Systems/DishLockedAppliances.cs
T

83 lines
3.1 KiB
C#
Raw Normal View History

2026-04-05 18:57:16 +10:00
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<int, List<Appliance>> Appliances = new Dictionary<int, List<Appliance>>
{
{
GDOReferences.DishDyedEggs.ID, new List<Appliance>
{
GDOReferences.GrassBunny,
GDOReferences.MountedCarrots,
}
}
};
private readonly Dictionary<int, Entity> BuilderOptions = new Dictionary<int, Entity>();
protected override void OnUpdate()
{
BuilderOptions.Clear();
foreach (Appliance appliance in Appliances.Keys.SelectMany(id => Appliances[id]))
{
appliance.IsPurchasable = false;
}
using (NativeArray<Entity> CurrentMenuItems = _CurrentMenuItems.ToEntityArray(Allocator.Temp))
{
using (NativeArray<Entity> 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));
}
}
}