From cd8e916e705844b214c4d28dc15f176fbb30cac7 Mon Sep 17 00:00:00 2001 From: 0auBSQ <58159635+0auBSQ@users.noreply.github.com> Date: Fri, 18 Oct 2024 23:08:55 +0900 Subject: [PATCH] ow the edge --- FDK/src/04.Graphics/CTexture.cs | 3 +- .../Modules/NamePlate/Textures/Title/32/0.png | Bin 0 -> 21625 bytes .../Modules/NamePlate/Textures/list.txt | 64 +++-- OpenTaiko/src/Common/TitleTextureKey.cs | 269 +++++++++--------- .../05.SongSelect/CActSelect曲リスト.cs | 105 ++++--- 5 files changed, 239 insertions(+), 202 deletions(-) create mode 100644 OpenTaiko/System/Open-World Memories/Modules/NamePlate/Textures/Title/32/0.png diff --git a/FDK/src/04.Graphics/CTexture.cs b/FDK/src/04.Graphics/CTexture.cs index e201c023..24a8b379 100644 --- a/FDK/src/04.Graphics/CTexture.cs +++ b/FDK/src/04.Graphics/CTexture.cs @@ -107,7 +107,7 @@ namespace FDK { varying vec2 texcoord; float randomGrayscale(vec2 uv) { - return fract(sin(dot(uv.xy * 10.0, vec2(12.9898, 78.233))) * (43758.5453 * time * 0.02)); + return fract(sin(dot(uv.xy * 10.0, vec2(12.9898, 78.233))) * (43758.5453 * (time + 1.0) * 0.02)); } @@ -130,6 +130,7 @@ namespace FDK { if (useNoiseEffect == 1) { float n = randomGrayscale(rect); texColor.rgb = vec3(n); + texColor.a = 1.0; } gl_FragColor = texColor; diff --git a/OpenTaiko/System/Open-World Memories/Modules/NamePlate/Textures/Title/32/0.png b/OpenTaiko/System/Open-World Memories/Modules/NamePlate/Textures/Title/32/0.png new file mode 100644 index 0000000000000000000000000000000000000000..9776f0a2fc59e30b2e4b0e40b8593a4cd0441632 GIT binary patch literal 21625 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 _titledictionary - = new Dictionary(); - - public static CTexture ResolveTitleTexture(TitleTextureKey titleTextureKey) { - if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { - texture = GenerateTitleTexture(titleTextureKey); - _titledictionary.Add(titleTextureKey, texture); - } - - return texture; - } - - public static CTexture ResolveTitleTexture(TitleTextureKey titleTextureKey, bool bVertical, bool keepCenter = false) { - if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { - if (bVertical) - texture = GenerateTitleTextureTate(titleTextureKey, keepCenter); - else - texture = GenerateTitleTexture(titleTextureKey, keepCenter); - _titledictionary.Add(titleTextureKey, texture); - } - - return texture; - } - - public static CTexture ResolveTitleTextureTate(TitleTextureKey titleTextureKey) { - if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { - texture = GenerateTitleTextureTate(titleTextureKey); - _titledictionary.Add(titleTextureKey, texture); - } - - return texture; - } - - private static CTexture GenerateTitleTextureTate(TitleTextureKey titleTextureKey, bool keepCenter = false) { - using (var bmp = titleTextureKey.cPrivateFastFont.DrawText_V( - titleTextureKey.str, titleTextureKey.forecolor, titleTextureKey.backcolor, titleTextureKey.secondEdge, 30, keepCenter)) { - CTexture tx文字テクスチャ = OpenTaiko.tテクスチャの生成(bmp, false); - if (tx文字テクスチャ.szTextureSize.Height > titleTextureKey.maxWidth) { - //tx文字テクスチャ.vc拡大縮小倍率.X = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szテクスチャサイズ.Height); - tx文字テクスチャ.vcScaleRatio.X = 1.0f; - tx文字テクスチャ.vcScaleRatio.Y = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szTextureSize.Height); - } - - return tx文字テクスチャ; - } - } - - private static CTexture GenerateTitleTexture(TitleTextureKey titleTextureKey, bool keepCenter = false) { - using (var bmp = titleTextureKey.cPrivateFastFont.DrawText( - titleTextureKey.str, titleTextureKey.forecolor, titleTextureKey.backcolor, titleTextureKey.secondEdge, 30, keepCenter)) { - CTexture tx文字テクスチャ = OpenTaiko.tテクスチャの生成(bmp, false); - if (tx文字テクスチャ.szTextureSize.Width > titleTextureKey.maxWidth) { - tx文字テクスチャ.vcScaleRatio.X = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szTextureSize.Width); - tx文字テクスチャ.vcScaleRatio.Y = 1.0f;// (float) (((double) titleTextureKey.maxWidth) / tx文字テクスチャ.szテクスチャサイズ.Width); - - } - - return tx文字テクスチャ; - } - } - - private static void ClearTitleTextureCache() { - // Was initially used when disposing the song select screen (at the end of the program), probably unused - foreach (var titleTexture in _titledictionary.Values) { - titleTexture.Dispose(); - } - - _titledictionary.Clear(); - } - - // Non-static - public readonly string str; - public readonly CCachedFontRenderer cPrivateFastFont; - public readonly Color forecolor; - public readonly Color backcolor; - public readonly int maxWidth; - public readonly Color? secondEdge; - - public TitleTextureKey(string str文字, CCachedFontRenderer cPrivateFastFont, Color forecolor, Color backcolor, int maxHeight, Color? secondEdge = null) { - this.str = str文字; - this.cPrivateFastFont = cPrivateFastFont; - this.forecolor = forecolor; - this.backcolor = backcolor; - this.maxWidth = maxHeight; - this.secondEdge = secondEdge; - } - - private bool Equals(TitleTextureKey other) { - return string.Equals(str, other.str) && - cPrivateFastFont.Equals(other.cPrivateFastFont) && - forecolor.Equals(other.forecolor) && - backcolor.Equals(other.backcolor) && - secondEdge.Equals(other.secondEdge) && - maxWidth == other.maxWidth; - } - - public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - return obj is TitleTextureKey other && Equals(other); - } - - public override int GetHashCode() { - unchecked { - var hashCode = str.GetHashCode(); - hashCode = (hashCode * 397) ^ cPrivateFastFont.GetHashCode(); - hashCode = (hashCode * 397) ^ forecolor.GetHashCode(); - hashCode = (hashCode * 397) ^ backcolor.GetHashCode(); - hashCode = (hashCode * 397) ^ maxWidth; - if (secondEdge != null) - hashCode = (hashCode * 397) ^ secondEdge.GetHashCode(); - return hashCode; - } - } - - public static bool operator ==(TitleTextureKey left, TitleTextureKey right) { - return Equals(left, right); - } - - public static bool operator !=(TitleTextureKey left, TitleTextureKey right) { - return !Equals(left, right); - } - } -} +using FDK; +using Color = System.Drawing.Color; + +namespace OpenTaiko { + + public sealed class TitleTextureKey { + + // Static + private static readonly Dictionary _titledictionary + = new Dictionary(); + + public static CTexture ResolveTitleTexture(TitleTextureKey titleTextureKey) { + if (titleTextureKey == null) return null; + if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { + texture = GenerateTitleTexture(titleTextureKey); + _titledictionary.Add(titleTextureKey, texture); + } + + return texture; + } + + public static CTexture ResolveTitleTexture(TitleTextureKey titleTextureKey, bool bVertical, bool keepCenter = false) { + if (titleTextureKey == null) return null; + if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { + if (bVertical) + texture = GenerateTitleTextureTate(titleTextureKey, keepCenter); + else + texture = GenerateTitleTexture(titleTextureKey, keepCenter); + _titledictionary.Add(titleTextureKey, texture); + } + + return texture; + } + + public static CTexture ResolveTitleTextureTate(TitleTextureKey titleTextureKey) { + if (titleTextureKey == null) return null; + if (!_titledictionary.TryGetValue(titleTextureKey, out var texture)) { + texture = GenerateTitleTextureTate(titleTextureKey); + _titledictionary.Add(titleTextureKey, texture); + } + + return texture; + } + + private static CTexture GenerateTitleTextureTate(TitleTextureKey titleTextureKey, bool keepCenter = false) { + if (titleTextureKey == null) return null; + using (var bmp = titleTextureKey.cPrivateFastFont.DrawText_V( + titleTextureKey.str, titleTextureKey.forecolor, titleTextureKey.backcolor, titleTextureKey.secondEdge, 30, keepCenter)) { + CTexture tx文字テクスチャ = OpenTaiko.tテクスチャの生成(bmp, false); + if (tx文字テクスチャ.szTextureSize.Height > titleTextureKey.maxWidth) { + //tx文字テクスチャ.vc拡大縮小倍率.X = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szテクスチャサイズ.Height); + tx文字テクスチャ.vcScaleRatio.X = 1.0f; + tx文字テクスチャ.vcScaleRatio.Y = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szTextureSize.Height); + } + + return tx文字テクスチャ; + } + } + + private static CTexture GenerateTitleTexture(TitleTextureKey titleTextureKey, bool keepCenter = false) { + if (titleTextureKey == null) return null; + using (var bmp = titleTextureKey.cPrivateFastFont.DrawText( + titleTextureKey.str, titleTextureKey.forecolor, titleTextureKey.backcolor, titleTextureKey.secondEdge, 30, keepCenter)) { + CTexture tx文字テクスチャ = OpenTaiko.tテクスチャの生成(bmp, false); + if (tx文字テクスチャ.szTextureSize.Width > titleTextureKey.maxWidth) { + tx文字テクスチャ.vcScaleRatio.X = (float)(((double)titleTextureKey.maxWidth) / tx文字テクスチャ.szTextureSize.Width); + tx文字テクスチャ.vcScaleRatio.Y = 1.0f;// (float) (((double) titleTextureKey.maxWidth) / tx文字テクスチャ.szテクスチャサイズ.Width); + + } + + return tx文字テクスチャ; + } + } + + private static void ClearTitleTextureCache() { + // Was initially used when disposing the song select screen (at the end of the program), probably unused + foreach (var titleTexture in _titledictionary.Values) { + titleTexture.Dispose(); + } + + _titledictionary.Clear(); + } + + // Non-static + public readonly string str; + public readonly CCachedFontRenderer cPrivateFastFont; + public readonly Color forecolor; + public readonly Color backcolor; + public readonly int maxWidth; + public readonly Color? secondEdge; + + public TitleTextureKey(string str文字, CCachedFontRenderer cPrivateFastFont, Color forecolor, Color backcolor, int maxHeight, Color? secondEdge = null) { + this.str = str文字; + this.cPrivateFastFont = cPrivateFastFont; + this.forecolor = forecolor; + this.backcolor = backcolor; + this.maxWidth = maxHeight; + this.secondEdge = secondEdge; + } + + private bool Equals(TitleTextureKey other) { + return string.Equals(str, other.str) && + cPrivateFastFont.Equals(other.cPrivateFastFont) && + forecolor.Equals(other.forecolor) && + backcolor.Equals(other.backcolor) && + secondEdge.Equals(other.secondEdge) && + maxWidth == other.maxWidth; + } + + public override bool Equals(object obj) { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj is TitleTextureKey other && Equals(other); + } + + public override int GetHashCode() { + unchecked { + var hashCode = str.GetHashCode(); + hashCode = (hashCode * 397) ^ cPrivateFastFont.GetHashCode(); + hashCode = (hashCode * 397) ^ forecolor.GetHashCode(); + hashCode = (hashCode * 397) ^ backcolor.GetHashCode(); + hashCode = (hashCode * 397) ^ maxWidth; + if (secondEdge != null) + hashCode = (hashCode * 397) ^ secondEdge.GetHashCode(); + return hashCode; + } + } + + public static bool operator ==(TitleTextureKey left, TitleTextureKey right) { + return Equals(left, right); + } + + public static bool operator !=(TitleTextureKey left, TitleTextureKey right) { + return !Equals(left, right); + } + } +} diff --git a/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs b/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs index fa301068..d545f166 100644 --- a/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs +++ b/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs @@ -193,8 +193,8 @@ namespace OpenTaiko { } public void tResetTitleKey() { - this.ttk選択している曲の曲名 = null; - this.ttk選択している曲のサブタイトル = null; + this.ttkSelectedSongTitle = null; + this.ttkSelectedSongSubtitle = null; this.ttkSelectedSongMaker = null; this.ttkSelectedSongBPM = null; } @@ -553,8 +553,8 @@ namespace OpenTaiko { this.t選択曲が変更された(false); // スクロールバー用に今何番目を選択しているかを更新 - this.ttk選択している曲の曲名 = null; - this.ttk選択している曲のサブタイトル = null; + this.ttkSelectedSongTitle = null; + this.ttkSelectedSongSubtitle = null; OpenTaiko.stageSongSelect.tNotifySelectedSongChange(); // スクロール完了=選択曲変更! ctBarOpen.Start(0, 260, 2, OpenTaiko.Timer); @@ -1326,22 +1326,31 @@ namespace OpenTaiko { //----------------- #endregion + var IsSongLocked = OpenTaiko.Databases.DBSongUnlockables.tIsSongLocked(stバー情報[nパネル番号].reference); + var HiddenIndex = OpenTaiko.Databases.DBSongUnlockables.tGetSongHiddenIndex(stバー情報[nパネル番号].reference); + + var _title = TitleTextureKey.ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, OpenTaiko.Skin.SongSelect_VerticalText); + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.BLURED) { + _title.bUseNoiseEffect = true; + } + #region [ タイトル名テクスチャを描画。] if (ctDifficultyIn.CurrentValue >= 1000 && OpenTaiko.stageSongSelect.actDifficultySelectionScreen.bIsDifficltSelect) - TitleTextureKey.ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, OpenTaiko.Skin.SongSelect_VerticalText).Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); + _title.Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); else - TitleTextureKey.ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, OpenTaiko.Skin.SongSelect_VerticalText).Opacity = 255; + _title.Opacity = 255; if (ctScrollCounter.CurrentValue != ctScrollCounter.EndValue) - TitleTextureKey.ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, OpenTaiko.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画( + _title.t2D拡大率考慮中央基準描画( xAnime - Box_X + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別), y - Box_Y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別)); else if (n見た目の行番号 != barCenterNum) - TitleTextureKey.ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, OpenTaiko.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画( + _title.t2D拡大率考慮中央基準描画( xAnime - Box_X + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別), y - Box_Y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別)); #endregion - var IsSongLocked = OpenTaiko.Databases.DBSongUnlockables.tIsSongLocked(stバー情報[nパネル番号].reference); - var HiddenIndex = OpenTaiko.Databases.DBSongUnlockables.tGetSongHiddenIndex(stバー情報[nパネル番号].reference); + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.BLURED) { + _title.bUseNoiseEffect = false; + } if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED) { OpenTaiko.Tx.SongSelect_Bar_Genre_Locked_Top?.t2D描画(xAnime - (int)Box_X, y - ((int)Box_Y)); @@ -1889,59 +1898,76 @@ namespace OpenTaiko { fNowScrollAnime)); if ((i == barCenterNum) && ctScrollCounter.CurrentValue == ctScrollCounter.EndValue) { - CTexture tx選択している曲のサブタイトル = null; + CTexture txSelectedSongSubtitle = null; // (A) スクロールが停止しているときの選択曲バーの描画。 + var IsSongLocked = OpenTaiko.Databases.DBSongUnlockables.tIsSongLocked(rCurrentlySelectedSong); + var HiddenIndex = OpenTaiko.Databases.DBSongUnlockables.tGetSongHiddenIndex(rCurrentlySelectedSong); + #region [ Nastiest Song Title display method I ever saw] // Fonts here //----------------- - if (rCurrentlySelectedSong.ldTitle.GetString("") != "" && this.ttk選択している曲の曲名 == null) - this.ttk選択している曲の曲名 = this.ttkGenerateSongNameTexture(rCurrentlySelectedSong.ldTitle.GetString(""), rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor, rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? this.pfBoxName : this.pfMusicName); - if (rCurrentlySelectedSong.ldSubtitle.GetString("") != "" && this.ttk選択している曲のサブタイトル == null) - this.ttk選択している曲のサブタイトル = this.ttkGenerateSubtitleTexture(rCurrentlySelectedSong.ldSubtitle.GetString(""), rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor); + if (rCurrentlySelectedSong.ldTitle.GetString("") != "" && this.ttkSelectedSongTitle == null) + this.ttkSelectedSongTitle = this.ttkGenerateSongNameTexture(rCurrentlySelectedSong.ldTitle.GetString(""), rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor, rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? this.pfBoxName : this.pfMusicName); + if (rCurrentlySelectedSong.ldSubtitle.GetString("") != "" && this.ttkSelectedSongSubtitle == null) + this.ttkSelectedSongSubtitle = this.ttkGenerateSubtitleTexture(rCurrentlySelectedSong.ldSubtitle.GetString(""), rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor); if (rCurrentlySelectedSong.strMaker != "" && this.ttkSelectedSongMaker == null) this.ttkSelectedSongMaker = this.ttkGenerateMakerTexture(rCurrentlySelectedSong.strMaker, rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor); if (this.ttkSelectedSongBPM == null) this.ttkSelectedSongBPM = this.ttkGenerateBPMTexture(rCurrentlySelectedSong, rCurrentlySelectedSong.ForeColor, rCurrentlySelectedSong.BackColor); ; - if (this.ttk選択している曲のサブタイトル != null) - tx選択している曲のサブタイトル = TitleTextureKey.ResolveTitleTexture(ttk選択している曲のサブタイトル, OpenTaiko.Skin.SongSelect_VerticalText); + if (this.ttkSelectedSongSubtitle != null) + txSelectedSongSubtitle = TitleTextureKey.ResolveTitleTexture(ttkSelectedSongSubtitle, OpenTaiko.Skin.SongSelect_VerticalText); + + var _title = TitleTextureKey.ResolveTitleTexture(this.ttkSelectedSongTitle, OpenTaiko.Skin.SongSelect_VerticalText); + + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED && _title != null) { + _title.bUseNoiseEffect = true; + } //サブタイトルがあったら700 - if (ttk選択している曲の曲名 != null) { + if (ttkSelectedSongTitle != null) { if (!ctBoxOpen.IsEnded) - TitleTextureKey.ResolveTitleTexture(this.ttk選択している曲の曲名, OpenTaiko.Skin.SongSelect_VerticalText).Opacity = (int)(ctBoxOpen.CurrentValue >= 1200 && ctBoxOpen.CurrentValue <= 1620 ? 255 - (ctBoxOpen.CurrentValue - 1200) * 2.55f : + _title.Opacity = (int)(ctBoxOpen.CurrentValue >= 1200 && ctBoxOpen.CurrentValue <= 1620 ? 255 - (ctBoxOpen.CurrentValue - 1200) * 2.55f : ctBoxOpen.CurrentValue >= 2000 ? (ctBoxOpen.CurrentValue - 2000) * 2.55f : ctBoxOpen.CurrentValue <= 1200 ? 255 : 0); else { if (!OpenTaiko.stageSongSelect.actDifficultySelectionScreen.bIsDifficltSelect) - TitleTextureKey.ResolveTitleTexture(this.ttk選択している曲の曲名, OpenTaiko.Skin.SongSelect_VerticalText).Opacity = 255; + _title.Opacity = 255; else if (ctDifficultyIn.CurrentValue >= 1000) - TitleTextureKey.ResolveTitleTexture(this.ttk選択している曲の曲名, OpenTaiko.Skin.SongSelect_VerticalText).Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); + _title.Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); } } - if (this.ttk選択している曲のサブタイトル != null) { + if (this.ttkSelectedSongSubtitle != null) { + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED) { + txSelectedSongSubtitle.bUseNoiseEffect = true; + } + if (!ctBoxOpen.IsEnded) - tx選択している曲のサブタイトル.Opacity = (int)(ctBoxOpen.CurrentValue >= 1200 && ctBoxOpen.CurrentValue <= 1620 ? 255 - (ctBoxOpen.CurrentValue - 1200) * 2.55f : + txSelectedSongSubtitle.Opacity = (int)(ctBoxOpen.CurrentValue >= 1200 && ctBoxOpen.CurrentValue <= 1620 ? 255 - (ctBoxOpen.CurrentValue - 1200) * 2.55f : ctBoxOpen.CurrentValue >= 2000 ? (ctBoxOpen.CurrentValue - 2000) * 2.55f : ctBoxOpen.CurrentValue <= 1200 ? 255 : 0); else { if (!OpenTaiko.stageSongSelect.actDifficultySelectionScreen.bIsDifficltSelect) - tx選択している曲のサブタイトル.Opacity = (int)(BarAnimeCount * 255.0f); + txSelectedSongSubtitle.Opacity = (int)(BarAnimeCount * 255.0f); else if (ctDifficultyIn.CurrentValue >= 1000) - tx選択している曲のサブタイトル.Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); + txSelectedSongSubtitle.Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); } - tx選択している曲のサブタイトル.t2D拡大率考慮中央基準描画( + txSelectedSongSubtitle.t2D拡大率考慮中央基準描画( xAnime + OpenTaiko.Skin.SongSelect_Bar_SubTitle_Offset[0] + (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMoveX : centerMoveX / 1.1f), y + OpenTaiko.Skin.SongSelect_Bar_SubTitle_Offset[1] - (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMove : centerMove / 1.1f)); - if (this.ttk選択している曲の曲名 != null) { - TitleTextureKey.ResolveTitleTexture(this.ttk選択している曲の曲名, OpenTaiko.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画( + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED) { + txSelectedSongSubtitle.bUseNoiseEffect = false; + } + + if (this.ttkSelectedSongTitle != null) { + _title.t2D拡大率考慮中央基準描画( xAnime + GetTitleOffsetX(rCurrentlySelectedSong.eノード種別) + (rCurrentlySelectedSong.eノード種別 != CSongListNode.ENodeType.BACKBOX ? (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMoveX : centerMoveX / 1.1f) : 0), @@ -1949,8 +1975,8 @@ namespace OpenTaiko { (rCurrentlySelectedSong.eノード種別 != CSongListNode.ENodeType.BACKBOX ? (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMove : centerMove / 1.1f) : 0)); } } else { - if (this.ttk選択している曲の曲名 != null) { - TitleTextureKey.ResolveTitleTexture(this.ttk選択している曲の曲名, OpenTaiko.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画( + if (this.ttkSelectedSongTitle != null) { + _title.t2D拡大率考慮中央基準描画( xAnime + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別) + (rCurrentlySelectedSong.eノード種別 != CSongListNode.ENodeType.BACKBOX ? (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMoveX : centerMoveX / 1.1f) : 0), @@ -1958,11 +1984,14 @@ namespace OpenTaiko { (rCurrentlySelectedSong.eノード種別 != CSongListNode.ENodeType.BACKBOX ? (rCurrentlySelectedSong.eノード種別 == CSongListNode.ENodeType.BOX ? centerMove : centerMove / 1.1f) : 0)); } } + + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED && _title != null) { + _title.bUseNoiseEffect = false; + } //----------------- #endregion - var IsSongLocked = OpenTaiko.Databases.DBSongUnlockables.tIsSongLocked(rCurrentlySelectedSong); - var HiddenIndex = OpenTaiko.Databases.DBSongUnlockables.tGetSongHiddenIndex(rCurrentlySelectedSong); + if (HiddenIndex >= DBSongUnlockables.EHiddenIndex.GRAYED) { DrawBarCenter(OpenTaiko.Tx.SongSelect_Bar_Genre_Locked_Top, OpenTaiko.Skin.SongSelect_Bar_X[barCenterNum], OpenTaiko.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, false, false, false); @@ -2297,8 +2326,8 @@ namespace OpenTaiko { private STバー情報[] stバー情報 = new STバー情報[OpenTaiko.Skin.SongSelect_Bar_Count]; private CTexture txSongNotFound, txEnumeratingSongs; - private TitleTextureKey ttk選択している曲の曲名; - private TitleTextureKey ttk選択している曲のサブタイトル; + private TitleTextureKey ttkSelectedSongTitle; + private TitleTextureKey ttkSelectedSongSubtitle; public TitleTextureKey ttkSelectedSongBPM; public TitleTextureKey ttkSelectedSongMaker; @@ -2910,12 +2939,12 @@ namespace OpenTaiko { private void tResetTitleTextureKey() { - if (this.ttk選択している曲の曲名 != null) { - this.ttk選択している曲の曲名 = null; + if (this.ttkSelectedSongTitle != null) { + this.ttkSelectedSongTitle = null; this.b選択曲が変更された = false; } - if (this.ttk選択している曲のサブタイトル != null) { - this.ttk選択している曲のサブタイトル = null; + if (this.ttkSelectedSongSubtitle != null) { + this.ttkSelectedSongSubtitle = null; this.b選択曲が変更された = false; } if (this.ttkSelectedSongMaker != null) {