Example #1
0
        private static void MenuScene_BuildScene(On.Menu.MenuScene.orig_BuildScene orig, Menu.MenuScene self)
        {
            orig(self);

            if (self.sceneID != MenuScene.SceneID.Empty && (int)self.sceneID > 69)
            {
                CustomWorldMod.Log($"Custom Regions: Building custom scene [{self.sceneID}]");
                string regionID = string.Empty;
                try
                {
                    regionID = Regex.Split(self.sceneID.ToString(), "Landscape_")[1];
                }
                catch (Exception e) { CustomWorldMod.Log($"Error trimming regionID [{self.sceneID}] {e}", true); return; }

                string regionPackFolder = string.Empty;
                try
                {
                    // This might be slow
                    regionPackFolder = CustomWorldMod.installedPacks.FirstOrDefault(x => (x.Value.activated && x.Value.regions.Contains(regionID))).Value.folderName;
                }
                catch (Exception e) { CustomWorldMod.Log($"Error finding regionName [{self.sceneID}] {e}", true); return; }

                string sceneFolder = CRExtras.BuildPath(regionPackFolder, CRExtras.CustomFolder.Scenes, folder: $"Landscape - {regionID}", includeRoot: false);
                CustomWorldMod.Log($"Custom Regions: Searching assets at {sceneFolder}", false, CustomWorldMod.DebugLevel.MEDIUM);
                if (Directory.Exists(sceneFolder))
                {
                    CustomWorldMod.Log($"Custom Regions: Found custom scene [{sceneFolder}]");
                    self.sceneFolder = sceneFolder;
                    BuildCustomRegionScene(self, regionID, sceneFolder);
                }
            }
        }
 private static void MenuScene_BuildScene(On.Menu.MenuScene.orig_BuildScene orig, Menu.MenuScene self)
 {
     if (self.sceneID == Menu.MenuScene.SceneID.SleepScreen)
     {
         BuildCustomSleepScene(self);
     }
     else
     {
         orig.Invoke(self);
     }
 }
Example #3
0
 // Image positions are loaded from positions.txt at the end of BuildScene
 // This gets around that by moving them after
 private static void MenuScene_BuildScene(On.Menu.MenuScene.orig_BuildScene orig, MenuScene self)
 {
     orig(self);
     if (moveImages.Count > 0)
     {
         foreach (var pair in moveImages)
         {
             pair.Key.lastPos = pair.Value;
             pair.Key.pos     = pair.Value;
         }
         moveImages.Clear();
     }
 }
Example #4
0
        private static void MenuScene_BuildScene(On.Menu.MenuScene.orig_BuildScene orig, Menu.MenuScene self)
        {
            /* if(self.sceneID == EnumExt_extendedSceneID.CustomSceneID)
             * {
             *   self.sceneID = MenuScene.SceneID.MainMenu;
             * }*/
            orig(self);

            //ID = (MenuScene.SceneID)Enum.Parse(typeof(MenuScene.SceneID), regionName);

            if (self.sceneID != MenuScene.SceneID.Empty && (int)self.sceneID > 69)
            {
                CustomWorldMod.Log($"Custom Regions: Building custom scene [{self.sceneID}]");
                //bool notFound = true;

                /*
                 * foreach (KeyValuePair<string, string> keyValues in CustomWorldMod.loadedRegions)
                 * {
                 * }
                 */
                string regionID = string.Empty;
                try
                {
                    regionID = Regex.Split(self.sceneID.ToString(), "Landscape_")[1];
                }
                catch (Exception e) { CustomWorldMod.Log($"Error trimming regionID [{self.sceneID}] {e}", true); return; }

                string regionName = string.Empty;
                try
                {
                    // This might be slow
                    regionName = CustomWorldMod.installedPacks.FirstOrDefault(x => x.Value.regions.Contains(regionID)).Key;
                }
                catch (Exception e) { CustomWorldMod.Log($"Error finding regionName [{self.sceneID}] {e}", true); return; }

                string path        = CustomWorldMod.resourcePath + regionName + Path.DirectorySeparatorChar;
                string sceneFolder = path + "Assets" + Path.DirectorySeparatorChar + "Futile" + Path.DirectorySeparatorChar +
                                     "Resources" + Path.DirectorySeparatorChar + "Scenes" + Path.DirectorySeparatorChar + $"Landscape - {regionID}" + Path.DirectorySeparatorChar;

                CustomWorldMod.Log($"Custom Regions: Searching assets at {sceneFolder}");
                if (Directory.Exists(sceneFolder))
                {
                    CustomWorldMod.Log($"Custom Regions: Found custom scene [{sceneFolder}]");
                    //notFound = false;
                    self.sceneFolder = sceneFolder;
                    BuildCustomRegionScene(self, regionID, sceneFolder);
                    //break;
                }
            }
        }
        private static void MenuScene_BuildScene(On.Menu.MenuScene.orig_BuildScene orig, MenuScene self)
        {
            // Automatically override scenes if the current character has a scene by the same name
            SlugBaseCharacter currentPlayer;

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

            if (currentPlayer != null)
            {
                string sceneName = self.sceneID.ToString();
                if (sceneOverride == null && currentPlayer.HasScene(sceneName))
                {
                    OverrideNextScene(currentPlayer, sceneName);
                }
            }

            if (sceneOverride != null)
            {
                try
                {
                    self.sceneFolder = resourceFolderName;

                    // Check for flatmode support
                    bool hasFlatmode = false;
                    foreach (var img in sceneOverride.Images)
                    {
                        if (img.HasTag("FLATMODE"))
                        {
                            hasFlatmode = true;
                            break;
                        }
                    }

                    // Load all images into the scene
                    for (int imgIndex = 0; imgIndex < sceneOverride.Images.Count; imgIndex++)
                    {
                        var img = sceneOverride.Images[imgIndex];

                        // Hide disabled images
                        if (!img.Enabled)
                        {
                            continue;
                        }

                        // Allow images to use their own sprites
                        if (!img.OnBuild(self))
                        {
                            continue;
                        }

                        // Skip this image if it is flatmode only and flatmode is disabled, and vice versa
                        bool flat         = img.depth < 0f;
                        bool flatmodeOnly = hasFlatmode && img.HasTag("flatmode");
                        if (hasFlatmode && (self.flatMode != flatmodeOnly))
                        {
                            continue;
                        }

                        // Parse alpha
                        float alpha = img.GetProperty <float?>("alpha") ?? 1f;

                        string  assetPath  = $"{sceneOverride.Owner.Name}\\Scenes\\{sceneOverride.Name}\\{img.assetName}";
                        Vector2 pos        = img.Pos;
                        bool    crisp      = img.HasTag("CRISP");
                        string  shaderName = img.GetProperty <string>("shader");
                        FShader shader     = null;

                        MenuIllustration illust;
                        if (flat)
                        {
                            // It's Friday

                            // Parse shader
                            if (shaderName != null)
                            {
                                if (!self.menu.manager.rainWorld.Shaders.TryGetValue(shaderName, out shader))
                                {
                                    shader = null;
                                }
                            }

                            // Add a flat illustration
                            illust = new MenuIllustration(self.menu, self, self.sceneFolder, assetPath, pos, crisp, false);
                            if (shader != null)
                            {
                                illust.sprite.shader = shader;
                            }
                        }
                        else
                        {
                            // Parse shader
                            MenuDepthIllustration.MenuShader menuShader = MenuDepthIllustration.MenuShader.Normal;
                            if (shaderName != null)
                            {
                                try
                                {
                                    menuShader = Custom.ParseEnum <MenuDepthIllustration.MenuShader>(shaderName);
                                    shader     = null;
                                }
                                catch
                                {
                                    if (!self.menu.manager.rainWorld.Shaders.TryGetValue(shaderName, out shader))
                                    {
                                        shader = null;
                                    }
                                    menuShader = MenuDepthIllustration.MenuShader.Normal;
                                }
                            }

                            // Add an illustration with depth
                            illust = new MenuDepthIllustration(self.menu, self, self.sceneFolder, assetPath, pos, img.Depth, menuShader);

                            // Apply crisp pixels
                            if (crisp)
                            {
                                illust.sprite.element.atlas.texture.filterMode = FilterMode.Point;
                            }
                        }

                        // Add idle depths
                        if (self is InteractiveMenuScene ims)
                        {
                            ims.idleDepths = new List <float>();
                            List <object> depths = sceneOverride.GetProperty <List <object> >("idledepths");
                            if (depths != null)
                            {
                                for (int i = 0; i < depths.Count; i++)
                                {
                                    if (depths[i] is double depth)
                                    {
                                        ims.idleDepths.Add((float)depth);
                                    }
                                }
                            }
                        }

                        // Apply tags
                        if (shader != null)
                        {
                            illust.sprite.shader = shader;
                        }
                        illust.setAlpha = alpha;
                        self.AddIllustration(illust);

                        // Link back to the custom scene image
                        customRep[illust] = img;
                    }
                }
                finally { ClearSceneOverride(); }
            }
            else
            {
                orig(self);
            }
        }