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); } }
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); } }