Files

184 lines
9.0 KiB
C#
Raw Permalink Normal View History

2026-04-05 18:57:16 +10:00
using System.IO;
using System.Linq;
using System.Reflection;
using Easter2025.Components;
using Easter2025.Customs.RestaurantSettings;
using Easter2025.Utilies;
using Easter2025.Views;
using Kitchen;
using KitchenData;
using KitchenLib;
using KitchenLib.Achievements;
using KitchenLib.Event;
using KitchenLib.Interfaces;
using KitchenLib.Logging.Exceptions;
using KitchenLib.References;
using KitchenLib.Utils;
using KitchenMods;
using TMPro;
using UnityEngine;
using KitchenLogger = KitchenLib.Logging.KitchenLogger;
namespace Easter2025
{
public class Mod : BaseMod, IModSystem, IAutoRegisterAll
{
public const string MOD_GUID = "com.starfluxgames.easter2025";
public const string MOD_NAME = "The Great Eggscape";
2026-04-12 12:47:52 +10:00
public const string MOD_VERSION = "0.1.4";
2026-04-05 18:57:16 +10:00
public const string MOD_AUTHOR = "StarFluxGames";
public const string MOD_GAMEVERSION = ">=1.2.1";
internal static AssetBundle Bundle;
internal static KitchenLogger Logger;
internal static AchievementsManager achievementsManager;
internal static readonly ViewType RED_BUNNY_VIEW = (ViewType)VariousUtils.GetID("RED_BUNNY_VIEW");
internal static readonly ViewType GREEN_BUNNY_VIEW = (ViewType)VariousUtils.GetID("GREEN_BUNNY_VIEW");
internal static readonly ViewType BLUE_BUNNY_VIEW = (ViewType)VariousUtils.GetID("BLUE_BUNNY_VIEW");
internal static readonly ViewType ROAMING_RED_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_RED_BUNNY_VIEW");
internal static readonly ViewType ROAMING_GREEN_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_GREEN_BUNNY_VIEW");
internal static readonly ViewType ROAMING_BLUE_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_BLUE_BUNNY_VIEW");
internal static readonly string ACHIEVEMENT_SERVE_THREE_COURSE_EGGS = "ACHIEVEMENT_SERVE_THREE_COURSE_EGGS";
internal static readonly string ACHIEVEMENT_TRIGGER_BUNNIES = "ACHIEVEMENT_TRIGGER_BUNNIES";
public static readonly bool ENABLE_ADDITIONAL_LOBBY_DISHES = false;
public Mod() : base(MOD_GUID, MOD_NAME, MOD_AUTHOR, MOD_VERSION, MOD_GAMEVERSION, Assembly.GetExecutingAssembly())
{
}
protected override void OnInitialise()
{
Logger.LogWarning($"{MOD_GUID} v{MOD_VERSION} in use!");
}
protected override void OnUpdate()
{
}
protected override void OnPostActivate(KitchenMods.Mod mod)
{
Bundle = mod.GetPacks<AssetBundleModPack>().SelectMany(e => e.AssetBundles).FirstOrDefault() ?? throw new MissingAssetBundleException(MOD_GUID);
Logger = InitLogger();
achievementsManager = new AchievementsManager(MOD_GUID, MOD_NAME);
achievementsManager.RegisterAchievement(new Achievement(ACHIEVEMENT_SERVE_THREE_COURSE_EGGS, "An Eggcellent Meal", "Serve 3 different egg courses to a single customer", Bundle.LoadAsset<Texture2D>("EggBasketIcon")).SetHiddenState(AchievementHiddenState.NotHidden));
achievementsManager.RegisterAchievement(new Achievement(ACHIEVEMENT_TRIGGER_BUNNIES, "Bunnies?", "Complete the hidden Easter Egg for some fancy bunnies!", Bundle.LoadAsset<Texture2D>("BunnyIcon")).SetHiddenState(AchievementHiddenState.HiddenUntilCompleted));
achievementsManager.Load();
achievementsManager.Save();
var spriteAsset = Bundle.LoadAsset<TMP_SpriteAsset>("SearchingIcon");
TMP_Settings.defaultSpriteAsset.fallbackSpriteAssets.Add(spriteAsset);
spriteAsset.material = Object.Instantiate(TMP_Settings.defaultSpriteAsset.material);
spriteAsset.material.mainTexture = Bundle.LoadAsset<Texture2D>("SearchingIcon_Tex");
// RefGenerator.GenerateGDOReferences(Assembly.GetExecutingAssembly(), Path.Combine(Application.persistentDataPath, "GeneratedReferences.cs"));
Events.BuildGameDataEvent += (sender, args) =>
{
if (args.firstBuild)
{
// Adding Carrot Checker
if (args.gamedata.TryGet(ItemReferences.Carrot, out Item carrot) && args.gamedata.TryGet(ItemReferences.CarrotChopped, out Item carrotChopped))
{
carrot.Properties.Add(new CCanTriggerOrangeOrbs());
carrotChopped.Properties.Add(new CCanTriggerOrangeOrbs());
}
// Adding Bunny Ears
if (args.gamedata.TryGet(PlayerCosmeticReferences.BunnyEarHat, out PlayerCosmetic BunnyEarHat))
{
BunnyEarHat.CustomerSettings.Add((RestaurantSetting)GDOUtils.GetCustomGameDataObject<Easter2025GardenSetting>().GameDataObject);
BunnyEarHat.CustomerSettings.Add((RestaurantSetting)GDOUtils.GetCustomGameDataObject<Easter2025Setting>().GameDataObject);
}
// Adding Orbs to Bin
if (args.gamedata.TryGet(ApplianceReferences.Bin, out Appliance Bin))
{
GameObject Orbs = GameObject.Instantiate(Bundle.LoadAsset<GameObject>("Orb Container"));
Orbs.transform.SetParent(Bin.Prefab.transform);
Orbs.transform.localPosition = Vector3.zero;
Orbs.SetActive(true);
BinOrbView view = Bin.Prefab.AddComponent<BinOrbView>();
view.GreenOrbs = Orbs.GetChild("GreenOrbs");
view.OrangeOrbs = Orbs.GetChild("OrangeOrbs");
view.GreenOrbs.SetActive(false);
view.OrangeOrbs.SetActive(false);
}
if (args.gamedata.TryGet(ApplianceReferences.Countertop, out Appliance Countertop))
{
// Adding Processes to Egg Mould Provider
if (args.gamedata.TryGet(GDOReferences.EggMouldProvider.ID, out Appliance EggMouldProvider))
{
foreach (Appliance.ApplianceProcesses process in Countertop.Processes)
{
bool found = false;
foreach (Appliance.ApplianceProcesses process2 in EggMouldProvider.Processes)
{
if (process.Process == process2.Process)
{
found = true;
break;
}
}
if (!found)
{
EggMouldProvider.Processes.Add(process);
}
}
}
// Adding Processes to Wrapper Provider
if (args.gamedata.TryGet(GDOReferences.WrapperProvider.ID, out Appliance WrapperProvider))
{
foreach (Appliance.ApplianceProcesses process in Countertop.Processes)
{
bool found = false;
foreach (Appliance.ApplianceProcesses process2 in WrapperProvider.Processes)
{
if (process.Process == process2.Process)
{
found = true;
break;
}
}
if (!found)
{
WrapperProvider.Processes.Add(process);
}
}
}
// Adding Processes to EggBasket Provider
if (args.gamedata.TryGet(GDOReferences.EggBasketProvider.ID, out Appliance EggBasketProvider))
{
foreach (Appliance.ApplianceProcesses process in Countertop.Processes)
{
bool found = false;
foreach (Appliance.ApplianceProcesses process2 in WrapperProvider.Processes)
{
if (process.Process == process2.Process)
{
found = true;
break;
}
}
if (!found)
{
EggBasketProvider.Processes.Add(process);
}
}
}
}
}
};
}
}
}