private static void InitObjects()
        {
            // Modded Levels label.
            GameObject moddedScenesLabel = GameObject.Instantiate(labelBase, labelBase.transform.parent);

            moddedScenesLabel.transform.position         = new Vector3(0f, 8.3f, -17.1f);
            moddedScenesLabel.transform.localEulerAngles = new Vector3(-180f, 0f, 180f);
            moddedScenesLabel.GetComponent <Text>().text = "Modded Scenes:";

            // Scene screens.
            for (int ii = 0; ii < screenPositions.Count; ii++)
            {
                // Create and position properly. Rename so patch can handle it properly.
                GameObject screen = GameObject.Instantiate(sceneScreenBase, sceneScreenBase.transform.parent);
                screen.transform.position = screenPositions[ii];
                //screen.transform.LookAt(Vector3.zero, Vector3.up);
                screen.transform.localEulerAngles = new Vector3(0, 180 - (Mathf.Rad2Deg * Mathf.Atan(-screen.transform.position.x / screen.transform.position.z)), 0);
                screen.transform.localScale       = 0.5f * screen.transform.localScale;
                screen.name = "MODDEDSCREEN";

                // Make sure scaling is set correctly.
                MainMenuScenePointable screenComponent = screen.GetComponent <MainMenuScenePointable>();
                screenComponent.ReflectSet("m_startScale", screen.transform.localScale);

                // Add to list and disable until needed.
                screens.Add(screenComponent);
                screen.SetActive(false);
            }
        }
Пример #2
0
        static bool Prefix(MainMenuScenePointable __instance, FVRViveHand hand)
        {
            if (hand.Input.TriggerDown)
            {
                if (__instance.name == "MODDEDSCREEN")
                {
                    var levelId = __instance.Def.Name.Split('\n')[1];
                    var level   = CustomLevelFinder.EnumerateLevelInfos().FirstOrDefault(x => x.Identifier == levelId);
                    Loader.LevelToLoad = level;
                }
                else
                {
                    Loader.LevelToLoad = null;
                }
            }


            return(true);
        }
        private static void SetupLevelDefs()
        {
            var levels = CustomLevelFinder.EnumerateLevelInfos().Where(x => x.Gamemode != Constants.GamemodeTakeAndHold).ToArray();

            for (int ii = 0; ii < levels.Length; ii++)
            {
                var level = levels[ii];

                var       imageT = level.Thumbnail;
                Texture2D image  = null;
                if (imageT)
                {
                    image = imageT;
                }

                if (level.existingSprite == null && level.Thumbnail != null)
                {
                    level.existingSprite = SpriteLoader.ConvertTextureToSprite(image);
                }

                // Create and apply scene def.
                MainMenuSceneDef moddedDef = ScriptableObject.CreateInstance <MainMenuSceneDef>();
                moddedDef.Name       = level.SceneName + "\n" + level.Identifier;
                moddedDef.Type       = level.Author;
                moddedDef.SceneName  = "ProvingGround";
                moddedDef.Desciption = level.Description;
                moddedDef.Image      = level.existingSprite;

                MainMenuScenePointable screen = screens.First(x => !x.gameObject.activeSelf);
                screen.Def = moddedDef;
                screen.GetComponent <MeshRenderer>().material.SetTexture("_MainTex", imageT);

                // Enable the screen now that it has been set up.
                screen.gameObject.SetActive(true);
            }
        }