Exemplo n.º 1
0
    public void ctor(ProcessManager manager, SlideShow.SlideShowID slideShowID)
    {
        Type[] constructorSignature = new Type[2];
        constructorSignature[0] = typeof(ProcessManager);
        constructorSignature[1] = typeof(ProcessManager.ProcessID);
        RuntimeMethodHandle handle = typeof(Menu.Menu).GetConstructor(constructorSignature).MethodHandle;

        RuntimeHelpers.PrepareMethod(handle);
        IntPtr ptr = handle.GetFunctionPointer();
        Action <ProcessManager, ProcessManager.ProcessID> funct = (Action <ProcessManager, ProcessManager.ProcessID>)Activator.CreateInstance(typeof(Action <ProcessManager, ProcessManager.ProcessID>), this, ptr);

        if (slideShowID != (SlideShow.SlideShowID)SlideShowID.WhiteOutro)
        {
            orig_ctor(manager, slideShowID);
        }
        else
        {
            this.current = -1;
            //Delegate to call the base constructor
            funct(manager, ProcessManager.ProcessID.SlideShow);//Menu Constructor

            this.slideShowID = (SlideShow.SlideShowID)slideShowID;
            this.pages.Add(new Page(this, null, "main", 0));
            this.playList = new List <SlideShow.Scene>();
            if (manager.musicPlayer != null)
            {
                this.waitForMusic = "RW_Outro_Theme";
                this.stall        = true;
                manager.musicPlayer.MenuRequestsSong(this.waitForMusic, 1.5f, 10f);
            }
            this.playList.Add(new SlideShow.Scene(MenuScene.SceneID.Empty, 0f, 0f, 0f));
            this.playList.Add(new SlideShow.Scene(MenuScene.SceneID.Outro_1_Left_Swim, this.ConvertTime(0, 1, 20), this.ConvertTime(0, 5, 0), this.ConvertTime(0, 17, 0)));
            this.playList.Add(new SlideShow.Scene(MenuScene.SceneID.Outro_2_Up_Swim, this.ConvertTime(0, 21, 0), this.ConvertTime(0, 25, 0), this.ConvertTime(0, 37, 0)));
            this.playList.Add(new SlideShow.Scene(MenuScene.SceneID.Empty, this.ConvertTime(1, 1, 0), this.ConvertTime(1, 1, 0), this.ConvertTime(1, 6, 0)));
            for (int j = 1; j < this.playList.Count; j++)
            {
                this.playList[j].startAt        -= 1.1f;
                this.playList[j].fadeInDoneAt   -= 1.1f;
                this.playList[j].fadeOutStartAt -= 1.1f;
            }
            this.nextProcess     = ProcessManager.ProcessID.Credits;
            this.preloadedScenes = new SlideShowMenuScene[this.playList.Count];
            for (int k = 0; k < this.preloadedScenes.Length; k++)
            {
                this.preloadedScenes[k] = new SlideShowMenuScene(this, this.pages[0], this.playList[k].sceneID);
                this.preloadedScenes[k].Hide();
            }
            manager.RemoveLoadingLabel();
            this.NextScene();
        }
    }
Exemplo n.º 2
0
        // Same as below, but for slideshows
        private static void SlideShow_ctor(On.Menu.SlideShow.orig_ctor orig, SlideShow self, ProcessManager manager, SlideShow.SlideShowID slideShowID)
        {
            // Automatically override slideshows if the current character has a slideshow by the same name
            SlugBaseCharacter currentPlayer;

            if (PlayerManager.UsingCustomCharacter)
            {
                currentPlayer = PlayerManager.CurrentCharacter;
            }
            else
            {
                int index;
                if (manager.currentMainLoop is RainWorldGame rwg)
                {
                    index = rwg.StoryCharacter;
                }
                else
                {
                    index = manager.rainWorld.progression.PlayingAsSlugcat;
                }
                currentPlayer = PlayerManager.GetCustomPlayer(index);
            }

            if (currentPlayer != null)
            {
                string slideshowName = self.slideShowID.ToString();
                if (slideshowOverride == null && currentPlayer.HasSlideshow(slideshowName))
                {
                    OverrideNextSlideshow(currentPlayer, slideshowName);
                }
            }

            if (slideshowOverride == null)
            {
                orig(self, manager, slideShowID);
                return;
            }

            try
            {
                // Call the original constructor, save a reference to the loading label
                // This will always be empty, due to the ID of -1
                FLabel loadingLabel = manager.loadingLabel;
                orig(self, manager, (SlideShow.SlideShowID)(-1));

                // Undo RemoveLoadingLabel and NextScene
                manager.loadingLabel = loadingLabel;
                Futile.stage.AddChild(loadingLabel);
                self.current = -1;

                // Load a custom scene

                SlugBaseCharacter     owner  = slideshowOverride.Owner;
                List <SlideshowSlide> slides = slideshowOverride.Slides;

                // Chose a destination process
                if (slideshowOverride.NextProcess == null)
                {
                    switch (slideShowID)
                    {
                    case SlideShow.SlideShowID.WhiteIntro:
                    case SlideShow.SlideShowID.YellowIntro:
                        self.nextProcess = ProcessManager.ProcessID.Game;
                        break;

                    case SlideShow.SlideShowID.WhiteOutro:
                    case SlideShow.SlideShowID.YellowOutro:
                    case SlideShow.SlideShowID.RedOutro:
                        self.nextProcess = ProcessManager.ProcessID.Credits;
                        break;

                    default:
                        // Take a best guess
                        // Accidentally going to the game is better than accidentally going to the credits
                        self.nextProcess = ProcessManager.ProcessID.Game;
                        break;
                    }
                }
                else
                {
                    self.nextProcess = slideshowOverride.NextProcess.Value;
                }

                // Custom music
                if (manager.musicPlayer != null)
                {
                    self.waitForMusic = slideshowOverride.Music;
                    self.stall        = true;
                    manager.musicPlayer.MenuRequestsSong(self.waitForMusic, 1.5f, 40f);
                }

                // Custom playlist
                float time = 0f;
                float endTime;
                self.playList.Clear();
                foreach (SlideshowSlide slide in slides)
                {
                    if (!slide.Enabled)
                    {
                        continue;
                    }
                    endTime = time + slide.Duration;
                    self.playList.Add(new SlideShow.Scene(MenuScene.SceneID.Empty, time, time + slide.FadeIn, endTime - slide.FadeOut));
                    time = endTime;
                }

                // Preload the scenes
                self.preloadedScenes = new SlideShowMenuScene[self.playList.Count];
                try
                {
                    for (int i = 0; i < self.preloadedScenes.Length; i++)
                    {
                        MenuScene.SceneID id = MenuScene.SceneID.Empty;
                        if (slideshowOverride.Owner.HasScene(slides[i].SceneName))
                        {
                            // Prioritize this character's scenes
                            OverrideNextScene(slideshowOverride.Owner, slideshowOverride.Slides[i].SceneName);
                        }
                        else
                        {
                            ClearSceneOverride();
                            try
                            {
                                // ... then try existing scenes
                                id = Custom.ParseEnum <MenuScene.SceneID>(slides[i].SceneName);
                            }
                            catch (Exception)
                            {
                                // ... and default to Empty
                                id = MenuScene.SceneID.Empty;
                            }
                        }
                        self.preloadedScenes[i] = new SlideShowMenuScene(self, self.pages[0], id);
                        self.preloadedScenes[i].Hide();

                        List <Vector3> camPath = self.preloadedScenes[i].cameraMovementPoints;
                        camPath.Clear();
                        camPath.AddRange(slides[i].CameraPath);
                    }
                }
                finally
                {
                    ClearSceneOverride();
                }
            }
            finally
            {
                ClearSlideshowOverride();
            }
            manager.RemoveLoadingLabel();
            self.NextScene();
        }
Exemplo n.º 3
0
 public extern void orig_ctor(ProcessManager manager, SlideShow.SlideShowID slideShowID);
Exemplo n.º 4
0
 public patch_SlideShow(ProcessManager manager, SlideShow.SlideShowID slideShowID) : base(manager, slideShowID)
 {
 }