using System.IO; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; namespace IngameReveries { // ModBehaviour will be instantiated and attached as a component in a container game object named // Multiple ModBehaviours in your mod will share the same container. public class IngameReveries : ModBehaviour { private GameObject _ingameReveriesUI; private AssetBundle _reveriesBundle; private GameObject _reveriesPrefab; private void Awake() { // Metadata of your mod is stored in this.about Debug.Log("Hola! I'm loaded! " + mod.metadata.id); // If you need to patch with Harmony, you can use this.harmony to access the Harmony instance for your mod. // It will be created with your mod's id automatically, the first time you access the property. harmony.PatchAll(); } private void Start() { InitializeAssets(); SceneManager.sceneLoaded += (scene, mode) => { // Check if UI already instantiated if (_ingameReveriesUI != null) { return; } string gameSceneDir = "Assets/Dew/Zones/"; string relativeToScene = Path.GetRelativePath(gameSceneDir, scene.path); if (!relativeToScene.StartsWith("..")) { Debug.Log($"[IngameReveries] Switched to scene inside {gameSceneDir}"); GameObject menuViewGO = GameObject.Find("GameLogicPackage/UI/InGame/UI_Common_MenuView"); if (menuViewGO == null) { Debug.Log("Couldn't find menu view"); return; } _ingameReveriesUI = new GameObject("IngameReveriesUI"); _ingameReveriesUI.transform.parent = menuViewGO.transform; Instantiate(DewGUI.widgetWindow, _ingameReveriesUI.transform); } }; } private void OnDestroy() { // Make sure you clean up properly to support Live Reload. Debug.Log("Good bye! " + mod.metadata.id); harmony.UnpatchAll(); } private void InitializeAssets() { string bundlePath = Path.Combine(mod.path, "assets", "bundle"); if (!File.Exists(bundlePath)) { Debug.LogError($"[IngameReveries] Bundle not found at: {bundlePath}"); return; } _reveriesBundle = AssetBundle.GetAllLoadedAssetBundles() .FirstOrDefault(b => b.name == "logosteal" || b.mainAsset != null); if (_reveriesBundle == null) { // If it isn't loaded yet, load it from disk Debug.Log("[IngameReveries] Loading Bundle"); _reveriesBundle = AssetBundle.LoadFromFile(bundlePath); } else { Debug.Log("[IngameReveries] Bundle already loaded"); } if (_reveriesBundle == null) { Debug.LogError("[IngameReveries] Failed to load AssetBundle!"); return; } // Load the prefab from the bundle string assetName = _reveriesBundle.GetAllAssetNames().First(); _reveriesPrefab = _reveriesBundle.LoadAsset(assetName); if (_reveriesPrefab == null) { Debug.LogError("[IngameReveries] Failed to load prefab!"); // List what's in the bundle for debugging string[] assetNames = _reveriesBundle.GetAllAssetNames(); Debug.Log("[IngameReveries] Assets in bundle:"); foreach (string name in assetNames) { Debug.Log($" - {name}"); } return; } Debug.Log("[IngameReveries] Successfully loaded prefab!"); } } }