// メンバ関数の定義 ===================================================== #region 初期化処理 //----------------------------------------------------------------- //! @summary 初期化処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void Initialize() { // コンポーネントの取得 m_transform = GetComponent <RectTransform>(); m_glowImage = GetComponent <GlowImage>(); m_musicalScoreTransform = m_transform.parent.GetComponent <RectTransform>(); m_audioSource = GetComponent <AudioSource>(); // データの初期化 m_notesData = ScriptableObject.CreateInstance <PiarhythmDatas.NoteData>(); // 色の初期化 PiarhythmDatas.Color colorData = new PiarhythmDatas.Color(); colorData.r = Color.green.r; colorData.g = Color.green.g; colorData.b = Color.green.b; colorData.a = Color.green.a; m_notesData.m_color = colorData; m_glowImage.color = m_glowImage.glowColor = Color.green; // スケールの初期化 m_transform.localScale = Vector3.one; // 音階の設定 SetNotesScale("C4"); // 手前に持ってくる Vector3 position = m_transform.localPosition; position.z = 0.0f; m_transform.localPosition = position; // 開始時間と長さの初期化 PiarhythmDatas.PositionData positionData = new PiarhythmDatas.PositionData(); positionData.m_position = m_transform.offsetMin.y; positionData.m_lenght = m_transform.sizeDelta.y; PiarhythmDatas.NoteData notesData = m_optionSheetController.ConvertToNotesData(positionData); m_notesData.m_startBeat = notesData.m_startBeat; m_notesData.m_noteLength = 2; positionData = m_optionSheetController.ConvertToPositionData(m_notesData.m_startBeat, m_notesData.m_noteLength); m_transform.offsetMin = new Vector2(m_transform.offsetMin.x, positionData.m_position); m_transform.offsetMax = new Vector2(m_transform.offsetMax.x, m_transform.offsetMin.y + positionData.m_lenght); // 光彩を切る m_glowImage.glowSize = 0.0f; }
// メンバ関数の定義 ===================================================== #region 初期化処理 //----------------------------------------------------------------- //! @summary 初期化処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void Initialize() { // コンポーネントの取得 m_transform = GetComponent <RectTransform>(); m_glowImage = GetComponent <GlowImage>(); m_musicalScoreTransform = m_transform.parent.GetComponent <RectTransform>(); m_audioSource = GetComponent <AudioSource>(); // 色の初期化 UnityEngine.Color color = new UnityEngine.Color(m_noteList[0].m_color.r, m_noteList[0].m_color.g, m_noteList[0].m_color.b, m_noteList[0].m_color.a); m_glowImage.color = m_glowImage.glowColor = color; // スケールの初期化 m_transform.localScale = Vector3.one; // 音階の設定 SetNotesScale(m_noteList[0].m_scale); // 手前に持ってくる Vector3 position = m_transform.localPosition; position.z = 0.0f; m_transform.localPosition = position; // 開始時間と長さの初期化 PiarhythmDatas.PositionData positionData = m_optionSheetController.ConvertToPositionData(m_noteList[0].m_startBeat, m_noteList[0].m_noteLength); m_transform.offsetMin = new Vector2(m_transform.offsetMin.x, positionData.m_position); m_transform.offsetMax = new Vector2(m_transform.offsetMax.x, m_transform.offsetMin.y + positionData.m_lenght); for (int i = 1; i < m_noteList.Count; ++i) { positionData = m_optionSheetController.ConvertToPositionData(m_noteList[i].m_startBeat, m_noteList[i].m_noteLength); Vector2 offsetMax = m_transform.offsetMax; offsetMax.y += positionData.m_lenght; m_transform.offsetMax = offsetMax; } // 光彩を切る m_glowImage.glowSize = 0.0f; }
// Override select scenes for SlugBase characters private static void SlugcatPage_AddImage(On.Menu.SlugcatSelectMenu.SlugcatPage.orig_AddImage orig, SlugcatSelectMenu.SlugcatPage self, bool ascended) { SlugBaseCharacter ply = PlayerManager.GetCustomPlayer(self.slugcatNumber); // Do not modify scenes for any non-SlugBase slugcats if (ply == null) { orig(self, ascended); return; } // Use Survivor's default scenes on the select menu string sceneName = ascended ? "SelectMenuAscended" : "SelectMenu"; if (!ply.HasScene(sceneName)) { orig(self, ascended); // Fix the scene position being off if (self.sceneOffset == default(Vector2)) { self.sceneOffset = new Vector2(-10f, 100f); } // Fix the wrong scene loading in when ascended if (ascended && self.slugcatImage.sceneID == MenuScene.SceneID.Slugcat_White) { self.slugcatImage.RemoveSprites(); self.RemoveSubObject(self.slugcatImage); self.slugcatImage = new InteractiveMenuScene(self.menu, self, MenuScene.SceneID.Ghost_White); self.subObjects.Add(self.slugcatImage); } return; } // Make sure it doesn't crash if the mark or glow is missing self.markSquare = new FSprite("pixel") { isVisible = false }; self.markGlow = new FSprite("pixel") { isVisible = false }; self.glowSpriteA = new FSprite("pixel") { isVisible = false }; self.glowSpriteB = new FSprite("pixel") { isVisible = false }; // This function intentionally does not call the original // If this mod has claimed a slot, it seems best to not let other mods try to change this screen // Taken from SlugcatPage.AddImage self.imagePos = new Vector2(683f, 484f); self.sceneOffset = new Vector2(0f, 0f); // Load a custom character's select screen from resources CustomScene scene = OverrideNextScene(ply, sceneName, img => { if (img.HasTag("MARK") && !self.HasMark) { return(false); } if (img.HasTag("GLOW") && !self.HasGlow) { return(false); } return(true); }); // Parse selectmenux and selectmenuy self.sceneOffset.x = scene.GetProperty <float?>("selectmenux") ?? 0f; self.sceneOffset.y = scene.GetProperty <float?>("selectmenuy") ?? 0f; Debug.Log($"Scene offset for {ply.Name}: {self.sceneOffset}"); // Slugcat depth, used for positioning the glow and mark self.slugcatDepth = scene.GetProperty <float?>("slugcatdepth") ?? 3f; // Add mark MarkImage mark = new MarkImage(scene, self.slugcatDepth + 0.1f); scene.InsertImage(mark); // Add glow GlowImage glow = new GlowImage(scene, self.slugcatDepth + 0.1f); scene.InsertImage(glow); try { self.slugcatImage = new InteractiveMenuScene(self.menu, self, MenuScene.SceneID.Slugcat_White); // This scene will be immediately overwritten } finally { ClearSceneOverride(); } self.subObjects.Add(self.slugcatImage); // Find the relative mark and glow positions self.markOffset = mark.Pos - new Vector2(self.MidXpos, self.imagePos.y + 150f) + self.sceneOffset; self.glowOffset = glow.Pos - new Vector2(self.MidXpos, self.imagePos.y) + self.sceneOffset; }