コード例 #1
0
        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();
            }
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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;
                        }));
                    }));
                }
            }
        }
コード例 #8
0
        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;
        }