public override void Load() { Logger.SetLogLevel("CollabUtils2", LogLevel.Info); InGameOverworldHelper.Load(); ReturnToLobbyHelper.Load(); StrawberryHooks.Load(); MiniHeartDoor.Load(); LobbyHelper.Load(); SpeedBerryTimerDisplay.Load(); SpeedBerryPBInChapterPanel.Load(); JournalTrigger.Load(); CustomCrystalHeartHelper.Load(); GoldenBerryPlayerRespawnPoint.Load(); SpeedBerry.Load(); AreaCompleteInfoInLevel.Load(); SilverBlock.Load(); MiniHeartDoorUnlockCutsceneTrigger.Load(); LazyLoadingHandler.Load(); SilverBerryCollectTrigger.Load(); Everest.Content.OnUpdate += onModAssetUpdate; hookOrigSessionCtor = new Hook(typeof(Session).GetMethod("orig_ctor"), typeof(CollabModule).GetMethod(nameof(onNewSession), BindingFlags.NonPublic | BindingFlags.Static)); }
public override void Awake(Scene scene) { base.Awake(scene); MiniHeartDoor gate = findHeartGate(); if (gate == null || gate.Opened) { // the door was already opened or doesn't exist so we have no purpose here! RemoveSelf(); } }
// if "force" is true, the cutscene will trigger even if the player doesn't have enough hearts. private void openHeartGate(Player player) { MiniHeartDoor door = findHeartGate(); if (door != null && !door.Opened && door.Requires <= door.HeartGems && player != null) { // we got all hearts! trigger the cutscene. Scene.Add(new MiniHeartDoorUnlockCutscene(door, player)); // and save this progress. CollabModule.Instance.SaveData.OpenedMiniHeartDoors.Add(door.GetDoorSaveDataID(Scene as Level)); // remove this trigger once that it was used. RemoveSelf(); } }
public override void OnEnter(Player player) { base.OnEnter(player); MiniHeartDoor door = Scene.Entities.OfType <MiniHeartDoor>().Where(d => d.DoorID == doorID).FirstOrDefault(); if (door != null && !door.Opened && door.Requires <= door.HeartGems && player != null) { // we got all hearts! trigger the cutscene. Scene.Add(new MiniHeartDoorUnlockCutscene(door, player)); // and save this progress. CollabModule.Instance.SaveData.OpenedMiniHeartDoors.Add(door.GetDoorSaveDataID(Scene as Level)); } // this trigger is one-use. RemoveSelf(); }
public override void Unload() { InGameOverworldHelper.Unload(); ReturnToLobbyHelper.Unload(); StrawberryHooks.Unload(); MiniHeartDoor.Unload(); LobbyHelper.Unload(); SpeedBerryTimerDisplay.Unload(); SpeedBerryPBInChapterPanel.Unload(); JournalTrigger.Unload(); CustomCrystalHeartHelper.Unload(); GoldenBerryPlayerRespawnPoint.Unload(); SpeedBerry.Unload(); AreaCompleteInfoInLevel.Unload(); SilverBlock.Unload(); Everest.Content.OnUpdate -= onModAssetUpdate; }
public override void Load() { Logger.SetLogLevel("CollabUtils2", LogLevel.Info); InGameOverworldHelper.Load(); ReturnToLobbyHelper.Load(); StrawberryHooks.Load(); MiniHeartDoor.Load(); LobbyHelper.Load(); SpeedBerryTimerDisplay.Load(); SpeedBerryPBInChapterPanel.Load(); JournalTrigger.Load(); CustomCrystalHeartHelper.Load(); GoldenBerryPlayerRespawnPoint.Load(); SpeedBerry.Load(); AreaCompleteInfoInLevel.Load(); SilverBlock.Load(); Everest.Content.OnUpdate += onModAssetUpdate; }
private static void addOpenHeartGateToMenu(Level self) { // check if the player is inside an unlock cutscene trigger. Player player = self.Tracker.GetEntity <Player>(); MiniHeartDoorUnlockCutsceneTrigger trigger = player?.CollideFirst <MiniHeartDoorUnlockCutsceneTrigger>(); if (trigger != null) { MiniHeartDoor gate = trigger.findHeartGate(); TextMenu menu = self.Entities.GetToAdd().OfType <TextMenu>().FirstOrDefault(); // check that we have what we need, and that the gate can't open yet. if (menu != null && gate != null && !gate.Opened && gate.HeartGems < gate.Requires) { // add an assist option to allow opening the door. menu.Add(new TextMenu.Button(Dialog.Clean("collabutils2_assist_skip")) { ConfirmSfx = "event:/ui/main/message_confirm" }.Pressed(() => { // show a confirm dialog, and focus this one instead of the assist menu. menu.Focused = false; self.Add(new AssistSkipConfirmUI( onConfirm: () => { // open the gate! gate.ForceAllHearts = true; trigger.openHeartGate(player); // usual "close pause menu" stuff (minus the sound). self.Paused = false; new DynData <Level>(self)["unpauseTimer"] = 0.15f; menu.Close(); }, onCancel: () => { // give focus back to the menu. menu.Focused = true; })); })); } } }
public override void Unload() { InGameOverworldHelper.Unload(); ReturnToLobbyHelper.Unload(); StrawberryHooks.Unload(); MiniHeartDoor.Unload(); LobbyHelper.Unload(); SpeedBerryTimerDisplay.Unload(); SpeedBerryPBInChapterPanel.Unload(); JournalTrigger.Unload(); CustomCrystalHeartHelper.Unload(); GoldenBerryPlayerRespawnPoint.Unload(); SpeedBerry.Unload(); AreaCompleteInfoInLevel.Unload(); SilverBlock.Unload(); MiniHeartDoorUnlockCutsceneTrigger.Unload(); LazyLoadingHandler.Unload(); SilverBerryCollectTrigger.Unload(); Everest.Content.OnUpdate -= onModAssetUpdate; hookOrigSessionCtor?.Dispose(); hookOrigSessionCtor = null; }