diff --git a/FDK/src/01.Framework/Core/Game.cs b/FDK/src/01.Framework/Core/Game.cs index a416ef25..b2c338a3 100644 --- a/FDK/src/01.Framework/Core/Game.cs +++ b/FDK/src/01.Framework/Core/Game.cs @@ -164,6 +164,8 @@ namespace SampleFramework } } + public static int MainThreadID { get; private set; } + private GraphicsAPI GetGraphicsAPI() { switch (GraphicsDeviceType_) @@ -182,6 +184,11 @@ namespace SampleFramework return GraphicsDevice.GetScreenPixels(); } + public void GetScreenShotAsync(Action action) + { + GraphicsDevice.GetScreenPixelsASync(action); + } + public static long TimeMs; public static Matrix4X4 Camera; @@ -206,6 +213,7 @@ namespace SampleFramework /// protected Game() { + MainThreadID = Thread.CurrentThread.ManagedThreadId; Configuration(); WindowOptions options = GraphicsDeviceType_ == GraphicsDeviceType.Vulkan ? WindowOptions.DefaultVulkan : WindowOptions.Default; diff --git a/FDK/src/01.Framework/Rendering/DirectX11/DirectX11Device.cs b/FDK/src/01.Framework/Rendering/DirectX11/DirectX11Device.cs index b2787f3d..8d5e0533 100644 --- a/FDK/src/01.Framework/Rendering/DirectX11/DirectX11Device.cs +++ b/FDK/src/01.Framework/Rendering/DirectX11/DirectX11Device.cs @@ -331,6 +331,10 @@ namespace SampleFramework return null; } + + public unsafe void GetScreenPixelsASync(Action action) + { + } public void Dispose() { diff --git a/FDK/src/01.Framework/Rendering/DirectX12/DirectX12Device.cs b/FDK/src/01.Framework/Rendering/DirectX12/DirectX12Device.cs index 79b784dc..632d1b87 100644 --- a/FDK/src/01.Framework/Rendering/DirectX12/DirectX12Device.cs +++ b/FDK/src/01.Framework/Rendering/DirectX12/DirectX12Device.cs @@ -728,6 +728,10 @@ namespace SampleFramework { return null; } + + public unsafe void GetScreenPixelsASync(Action action) + { + } public void Dispose() { diff --git a/FDK/src/01.Framework/Rendering/DirectX9/DirectX9Device.cs b/FDK/src/01.Framework/Rendering/DirectX9/DirectX9Device.cs index 9aeafd7f..00b9b158 100644 --- a/FDK/src/01.Framework/Rendering/DirectX9/DirectX9Device.cs +++ b/FDK/src/01.Framework/Rendering/DirectX9/DirectX9Device.cs @@ -97,6 +97,10 @@ namespace SampleFramework { return null; } + + public unsafe void GetScreenPixelsASync(Action action) + { + } public void Dispose() { diff --git a/FDK/src/01.Framework/Rendering/IGraphicsDevice.cs b/FDK/src/01.Framework/Rendering/IGraphicsDevice.cs index 5c1c5a7a..e60a7ae0 100644 --- a/FDK/src/01.Framework/Rendering/IGraphicsDevice.cs +++ b/FDK/src/01.Framework/Rendering/IGraphicsDevice.cs @@ -34,5 +34,7 @@ namespace SampleFramework void DrawPolygon(IPolygon polygon, IShader shader, ITexture texture, BlendType blendType); unsafe SKBitmap GetScreenPixels(); + + unsafe void GetScreenPixelsASync(Action action); } } \ No newline at end of file diff --git a/FDK/src/01.Framework/Rendering/OpenGL/OpenGLDevice.cs b/FDK/src/01.Framework/Rendering/OpenGL/OpenGLDevice.cs index 4f791db5..0206d075 100644 --- a/FDK/src/01.Framework/Rendering/OpenGL/OpenGLDevice.cs +++ b/FDK/src/01.Framework/Rendering/OpenGL/OpenGLDevice.cs @@ -15,6 +15,8 @@ namespace SampleFramework private int ViewportHeight; + internal static List AsyncActions = new(); + public OpenGLDevice(IWindow window) { Gl = window.CreateOpenGL(); @@ -40,6 +42,11 @@ namespace SampleFramework public void ClearBuffer() { + if (AsyncActions.Count > 0) + { + AsyncActions[0]?.Invoke(); + AsyncActions.Remove(AsyncActions[0]); + } Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); } @@ -140,6 +147,36 @@ namespace SampleFramework } } + public unsafe void GetScreenPixelsASync(Action action) + { + uint[] pixels = new uint[(uint)ViewportWidth * (uint)ViewportHeight]; + Gl.ReadBuffer(GLEnum.Front); + fixed(uint* pix = pixels) + { + Gl.ReadPixels(0, 0, (uint)ViewportWidth, (uint)ViewportHeight, GLEnum.Bgra, GLEnum.UnsignedByte, pix); + } + + Task.Run(() =>{ + fixed(uint* pixels2 = new uint[(uint)ViewportWidth * (uint)ViewportHeight]) + { + for(int x = 0; x < ViewportWidth; x++) + { + for(int y = 1; y < ViewportHeight; y++) + { + int pos = x + ((y - 1) * ViewportWidth); + int pos2 = x + ((ViewportHeight - y) * ViewportWidth); + var p = pixels[pos2]; + pixels2[pos] = p; + } + } + + using SKBitmap sKBitmap = new(ViewportWidth, ViewportHeight - 1); + sKBitmap.SetPixels((IntPtr)pixels2); + action(sKBitmap); + } + }); + } + public void Dispose() { } diff --git a/FDK/src/01.Framework/Rendering/OpenGL/OpenGLTexture.cs b/FDK/src/01.Framework/Rendering/OpenGL/OpenGLTexture.cs index 1dfe261c..2601e677 100644 --- a/FDK/src/01.Framework/Rendering/OpenGL/OpenGLTexture.cs +++ b/FDK/src/01.Framework/Rendering/OpenGL/OpenGLTexture.cs @@ -10,21 +10,37 @@ namespace SampleFramework public unsafe OpenGLTexture(void* data, int width, int height, RgbaType rgbaType) { - TextureHandle = OpenGLDevice.Gl.GenTexture(); - OpenGLDevice.Gl.BindTexture(TextureTarget.Texture2D, TextureHandle); - - switch(rgbaType) + void load() { - case RgbaType.Rgba: - OpenGLDevice.Gl.TexImage2D(GLEnum.Texture2D, 0, (int)InternalFormat.Rgba8, (uint)width, (uint)height, 0, GLEnum.Rgba, GLEnum.UnsignedByte, data); - break; - case RgbaType.Bgra: - OpenGLDevice.Gl.TexImage2D(GLEnum.Texture2D, 0, (int)InternalFormat.Rgba8, (uint)width, (uint)height, 0, GLEnum.Bgra, GLEnum.UnsignedByte, data); - break; + TextureHandle = OpenGLDevice.Gl.GenTexture(); + OpenGLDevice.Gl.BindTexture(TextureTarget.Texture2D, TextureHandle); + + switch(rgbaType) + { + case RgbaType.Rgba: + OpenGLDevice.Gl.TexImage2D(GLEnum.Texture2D, 0, (int)InternalFormat.Rgba8, (uint)width, (uint)height, 0, GLEnum.Rgba, GLEnum.UnsignedByte, data); + break; + case RgbaType.Bgra: + OpenGLDevice.Gl.TexImage2D(GLEnum.Texture2D, 0, (int)InternalFormat.Rgba8, (uint)width, (uint)height, 0, GLEnum.Bgra, GLEnum.UnsignedByte, data); + break; + } + + OpenGLDevice.Gl.TexParameterI(GLEnum.Texture2D, GLEnum.TextureMinFilter, (int)TextureMinFilter.Nearest); + OpenGLDevice.Gl.TexParameterI(GLEnum.Texture2D, GLEnum.TextureMagFilter, (int)TextureMagFilter.Nearest); + } + + if (Game.MainThreadID != Thread.CurrentThread.ManagedThreadId) + { + OpenGLDevice.AsyncActions.Add(load); + while(OpenGLDevice.AsyncActions.Contains(load)) + { + + } + } + else + { + load(); } - - OpenGLDevice.Gl.TexParameterI(GLEnum.Texture2D, GLEnum.TextureMinFilter, (int)TextureMinFilter.Nearest); - OpenGLDevice.Gl.TexParameterI(GLEnum.Texture2D, GLEnum.TextureMagFilter, (int)TextureMagFilter.Nearest); } public void Dispose() diff --git a/FDK/src/01.Framework/Rendering/Vulkan/VulkanDevice.cs b/FDK/src/01.Framework/Rendering/Vulkan/VulkanDevice.cs index 3ae824d0..6021c3b9 100644 --- a/FDK/src/01.Framework/Rendering/Vulkan/VulkanDevice.cs +++ b/FDK/src/01.Framework/Rendering/Vulkan/VulkanDevice.cs @@ -57,6 +57,10 @@ namespace SampleFramework { return null; } + + public unsafe void GetScreenPixelsASync(Action action) + { + } public void Dispose() { diff --git a/OpenTaiko/OpenTaiko.csproj b/OpenTaiko/OpenTaiko.csproj index 83b5b23c..86f23f4c 100644 --- a/OpenTaiko/OpenTaiko.csproj +++ b/OpenTaiko/OpenTaiko.csproj @@ -31,5 +31,6 @@ enable enable true + OpenTaiko.ico \ No newline at end of file diff --git a/OpenTaiko/src/Common/CSkin.cs b/OpenTaiko/src/Common/CSkin.cs index 993406ec..5cb7b923 100644 --- a/OpenTaiko/src/Common/CSkin.cs +++ b/OpenTaiko/src/Common/CSkin.cs @@ -8895,10 +8895,7 @@ namespace TJAPlayer3 public Color SongSelect_BackColor_Classic = ColorTranslator.FromHtml("#875600"); public Color SongSelect_BackColor_GameMusic = ColorTranslator.FromHtml("#412080"); public Color SongSelect_BackColor_Namco = ColorTranslator.FromHtml("#980E00"); - public int SongSelect_Bar_Genre_Count, - SongSelect_Genre_Background_Count, - SongSelect_Box_Chara_Count, - SongSelect_Difficulty_Background_Count; + public string[] SongSelect_CorrectionX_Chara = { "ここにX座標を補正したい文字をカンマで区切って記入" }; public string[] SongSelect_CorrectionY_Chara = { "ここにY座標を補正したい文字をカンマで区切って記入" }; public int SongSelect_CorrectionX_Chara_Value = 0; diff --git a/OpenTaiko/src/Common/TJAPlayer3.cs b/OpenTaiko/src/Common/TJAPlayer3.cs index 2d4bf021..f5750153 100644 --- a/OpenTaiko/src/Common/TJAPlayer3.cs +++ b/OpenTaiko/src/Common/TJAPlayer3.cs @@ -576,24 +576,34 @@ namespace TJAPlayer3 /// 保存するファイル名(フルパス) public bool SaveResultScreen( string strFullPath ) { - string strSavePath = Path.GetDirectoryName( strFullPath ); - if ( !Directory.Exists( strSavePath ) ) + bool success = true; + + void save(SKBitmap sKBitmap) { - try + string strSavePath = Path.GetDirectoryName( strFullPath ); + if ( !Directory.Exists( strSavePath ) ) { - Directory.CreateDirectory( strSavePath ); + try + { + Directory.CreateDirectory( strSavePath ); + } + catch + { + Trace.TraceError(ToString()); + Trace.TraceError( "例外が発生しましたが処理を継続します。 (0bfe6bff-2a56-4df4-9333-2df26d9b765b)" ); + success = false; + } } - catch + if (!File.Exists(strFullPath)) { - Trace.TraceError(ToString()); - Trace.TraceError( "例外が発生しましたが処理を継続します。 (0bfe6bff-2a56-4df4-9333-2df26d9b765b)" ); - return false; + using FileStream stream = File.OpenWrite(strFullPath); + sKBitmap.Encode(stream, SKEncodedImageFormat.Png, 80); } } - using SKBitmap sKBitmap = GetScreenShot(); - using FileStream stream = File.OpenWrite(strFullPath); - return sKBitmap.Encode(stream, SKEncodedImageFormat.Png, 80); + GetScreenShotAsync(save); + + return success; } #endregion @@ -2358,7 +2368,7 @@ for (int i = 0; i < 3; i++) { { return tテクスチャの生成( fileName, false ); } - public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する ) + public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する) { if ( app == null ) { diff --git a/OpenTaiko/src/Helpers/HGenreBar.cs b/OpenTaiko/src/Helpers/HGenreBar.cs new file mode 100644 index 00000000..d0dee6b7 --- /dev/null +++ b/OpenTaiko/src/Helpers/HGenreBar.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; +using FDK; + + +namespace TJAPlayer3 +{ + class HGenreBar + { + public static CTexture tGetGenreBar(string value, Dictionary textures) + { + if (textures.TryGetValue($"{value}", out CTexture tex)) + { + return tex; + } + else + { + if (textures.TryGetValue("0", out CTexture tex2)) + { + return tex2; + } + else + { + return null; + } + } + } + } +} \ No newline at end of file diff --git a/OpenTaiko/src/Songs/CBoxDef.cs b/OpenTaiko/src/Songs/CBoxDef.cs index 56e835bd..d01096c1 100644 --- a/OpenTaiko/src/Songs/CBoxDef.cs +++ b/OpenTaiko/src/Songs/CBoxDef.cs @@ -24,11 +24,11 @@ namespace TJAPlayer3 public bool IsChangedBoxColor; public Color BgColor; public bool IsChangedBgColor; - public int BoxType; - public int BgType; + public string BoxType; + public string BgType; public bool IsChangedBoxType; public bool IsChangedBgType; - public int BoxChara; + public string BoxChara; public bool IsChangedBoxChara; public string DefaultPreimage; public string ScenePreset; @@ -47,9 +47,9 @@ namespace TJAPlayer3 ForeColor = Color.White; BackColor = Color.Black; BoxColor = Color.White; - BoxType = 0; - BgType = 0; - BoxChara = 0; + BoxType = "0"; + BgType = "0"; + BoxChara = "0"; BgColor = Color.White; DefaultPreimage = null; ScenePreset = ""; @@ -132,17 +132,17 @@ namespace TJAPlayer3 } else if (key == "#BGTYPE") { - this.BgType = int.Parse(value.Trim(ignoreChars)); + this.BgType = value.Trim(ignoreChars); IsChangedBgType = true; } else if (key == "#BOXTYPE") { - this.BoxType = int.Parse(value.Trim(ignoreChars)); + this.BoxType = value.Trim(ignoreChars); IsChangedBoxType = true; } else if (key == "#BOXCHARA") { - this.BoxChara = int.Parse(value.Trim(ignoreChars)); + this.BoxChara = value.Trim(ignoreChars); IsChangedBoxChara = true; } else if (key == "#SCENEPRESET") diff --git a/OpenTaiko/src/Songs/CSong管理.cs b/OpenTaiko/src/Songs/CSong管理.cs index 7928a5d0..403b5694 100644 --- a/OpenTaiko/src/Songs/CSong管理.cs +++ b/OpenTaiko/src/Songs/CSong管理.cs @@ -352,6 +352,47 @@ namespace TJAPlayer3 listノードリスト.Add( value ); CSongDict.tAddSongNode(value.uniqueId, value); value.r親ノード = node親; + + if (value.r親ノード != null) + { + value.strScenePreset = value.r親ノード.strScenePreset; + if (value.r親ノード.IsChangedForeColor) + { + value.ForeColor = value.r親ノード.ForeColor; + value.IsChangedForeColor = true; + } + if (value.r親ノード.IsChangedBackColor) + { + value.BackColor = value.r親ノード.BackColor; + value.IsChangedBackColor = true; + } + if (value.r親ノード.isChangedBoxColor) + { + value.BoxColor = value.r親ノード.BoxColor; + value.isChangedBoxColor = true; + } + if (value.r親ノード.isChangedBgColor) + { + value.BgColor = value.r親ノード.BgColor; + value.isChangedBgColor = true; + } + if (value.r親ノード.isChangedBgType) + { + value.BgType = value.r親ノード.BgType; + value.isChangedBgType = true; + } + if (value.r親ノード.isChangedBoxType) + { + value.BoxType = value.r親ノード.BoxType; + value.isChangedBoxType = true; + } + if (value.r親ノード.isChangedBoxChara) + { + value.BoxChara = value.r親ノード.BoxChara; + value.isChangedBoxChara = true; + } + } + this.n検索された曲ノード数++; } else diff --git a/OpenTaiko/src/Songs/C曲リストノード.cs b/OpenTaiko/src/Songs/C曲リストノード.cs index cfa58dd9..a7c244dc 100644 --- a/OpenTaiko/src/Songs/C曲リストノード.cs +++ b/OpenTaiko/src/Songs/C曲リストノード.cs @@ -44,9 +44,9 @@ namespace TJAPlayer3 public bool isChangedBgColor; public bool isChangedBgType; public bool isChangedBoxType; - public int BoxType; - public int BgType; - public int BoxChara; + public string BoxType; + public string BgType; + public string BoxChara; public bool isChangedBoxChara; public bool IsChangedForeColor; diff --git a/OpenTaiko/src/Stages/01.StartUp/CStage起動.cs b/OpenTaiko/src/Stages/01.StartUp/CStage起動.cs index 78bfd19a..610d963b 100644 --- a/OpenTaiko/src/Stages/01.StartUp/CStage起動.cs +++ b/OpenTaiko/src/Stages/01.StartUp/CStage起動.cs @@ -30,6 +30,9 @@ namespace TJAPlayer3 Trace.Indent(); try { + Background = new ScriptBG(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.STARTUP}Script.lua")); + Background.Init(); + this.list進行文字列 = new List(); base.eフェーズID = CStage.Eフェーズ.共通_通常状態; base.Activate(); @@ -46,6 +49,8 @@ namespace TJAPlayer3 Trace.Indent(); try { + TJAPlayer3.t安全にDisposeする(ref Background); + this.list進行文字列 = null; if ( es != null ) { @@ -66,12 +71,10 @@ namespace TJAPlayer3 } public override void CreateManagedResource() { - this.tx背景 = TJAPlayer3.tテクスチャの生成( CSkin.Path( @$"Graphics{Path.DirectorySeparatorChar}1_Title{Path.DirectorySeparatorChar}Background.png" ), false ); base.CreateManagedResource(); } public override void ReleaseManagedResource() { - TJAPlayer3.tテクスチャの解放( ref this.tx背景 ); base.ReleaseManagedResource(); } public override int Draw() @@ -98,8 +101,8 @@ namespace TJAPlayer3 // CSongs管理 s管理 = CDTXMania.Songs管理; - //if( this.tx背景 != null ) - // this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 ); + Background.Update(); + Background.Draw(); #region [ this.str現在進行中 の決定 ] //----------------- @@ -113,10 +116,6 @@ namespace TJAPlayer3 this.str現在進行中 = "SONG LIST..."; break; - /*case CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築: - this.str現在進行中 = "SONG DATABASE..."; - break;*/ - case CStage.Eフェーズ.起動2_曲を検索してリストを作成する: this.str現在進行中 = string.Format( "{0} ... {1}", "Enumerating songs", es.Songs管理.n検索されたスコア数 ); break; @@ -133,16 +132,20 @@ namespace TJAPlayer3 this.str現在進行中 = string.Format( "{0} ... ", "Building songlists" ); break; - /*case CStage.Eフェーズ.起動6_スコアキャッシュをSongsDBに出力する: - this.str現在進行中 = string.Format( "{0} ... ", "Saving songs.db" ); - break;*/ - case CStage.Eフェーズ.起動_テクスチャの読み込み: - this.list進行文字列.Add("LOADING TEXTURES..."); - TJAPlayer3.Tx.LoadTexture(); - this.list進行文字列.Add("LOADING TEXTURES...OK"); - this.str現在進行中 = "Setup done."; - this.eフェーズID = Eフェーズ.起動7_完了; + if (!bIsLoadingTextures) + { + Task.Run(() => + { + this.list進行文字列.Add("LOADING TEXTURES..."); + TJAPlayer3.Tx.LoadTexture(); + this.list進行文字列.Add("LOADING TEXTURES...OK"); + this.str現在進行中 = "Setup done."; + this.eフェーズID = Eフェーズ.起動7_完了; + TJAPlayer3.Skin.bgm起動画面.t停止する(); + }); + } + bIsLoadingTextures = true; break; } //----------------- @@ -152,17 +155,14 @@ namespace TJAPlayer3 { #region [ this.list進行文字列+this.現在進行中 の表示 ] //----------------- - lock (this.list進行文字列) + int x = 320; + int y = 20; + for(int i = 0; i < this.list進行文字列.Count; i++) { - int x = 320; - int y = 20; - foreach (string str in this.list進行文字列) - { - TJAPlayer3.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.白, str); - y += 24; - } - TJAPlayer3.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.白, this.str現在進行中); + TJAPlayer3.act文字コンソール.tPrint((int)(x * TJAPlayer3.Skin.Resolution[0] / 1280.0), (int)(y * TJAPlayer3.Skin.Resolution[1] / 720.0), C文字コンソール.Eフォント種別.白, this.list進行文字列[i]); + y += 24; } + TJAPlayer3.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.白, this.str現在進行中); //----------------- #endregion } @@ -191,8 +191,9 @@ namespace TJAPlayer3 #region [ private ] //----------------- private string str現在進行中 = ""; - private CTexture tx背景; + private ScriptBG Background; private CEnumSongs es; + private bool bIsLoadingTextures; #if false private void t曲リストの構築() diff --git a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs index 9c646f0f..1ebbfe06 100644 --- a/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs +++ b/OpenTaiko/src/Stages/01.StartUp/TextureLoader.cs @@ -18,6 +18,7 @@ namespace TJAPlayer3 public static string CHARACTERS = @$"Characters{Path.DirectorySeparatorChar}"; // Stage + public static string STARTUP = @$"0_Startup{Path.DirectorySeparatorChar}"; public static string TITLE = @$"1_Title{Path.DirectorySeparatorChar}"; public static string CONFIG = @$"2_Config{Path.DirectorySeparatorChar}"; public static string SONGSELECT = @$"3_SongSelect{Path.DirectorySeparatorChar}"; @@ -73,7 +74,6 @@ namespace TJAPlayer3 public Dictionary trackedTextures = new Dictionary(); - public TextureLoader() { // コンストラクタ @@ -81,21 +81,21 @@ namespace TJAPlayer3 internal CTexture TxC(string FileName) { - var tex = TJAPlayer3.tテクスチャの生成(CSkin.Path(BASE + FileName)); + var tex = TJAPlayer3.tテクスチャの生成(CSkin.Path(BASE + FileName), false); listTexture.Add(tex); return tex; } internal CTexture TxCGlobal(string FileName) { - var tex = TJAPlayer3.tテクスチャの生成(TJAPlayer3.strEXEのあるフォルダ + GLOBAL + FileName); + var tex = TJAPlayer3.tテクスチャの生成(TJAPlayer3.strEXEのあるフォルダ + GLOBAL + FileName, false); listTexture.Add(tex); return tex; } internal CTexture TxCAbsolute(string FileName) { - var tex = TJAPlayer3.tテクスチャの生成(FileName); + var tex = TJAPlayer3.tテクスチャの生成(FileName, false); listTexture.Add(tex); return tex; } @@ -108,7 +108,7 @@ namespace TJAPlayer3 } internal CTexture TxCGen(string FileName) { - return TJAPlayer3.tテクスチャの生成(CSkin.Path(BASE + GAME + GENRE + FileName + ".png")); + return TJAPlayer3.tテクスチャの生成(CSkin.Path(BASE + GAME + GENRE + FileName + ".png"), false); } internal CTexture TxCSong(string path) @@ -135,7 +135,7 @@ namespace TJAPlayer3 internal CTexture TxCUntrackedSong(string path) { - return TJAPlayer3.tテクスチャの生成(path); + return TJAPlayer3.tテクスチャの生成(path, false); } public void LoadTexture() @@ -296,38 +296,44 @@ namespace TJAPlayer3 SongSelect_ScoreWindow_Text = TxC(SONGSELECT + @$"ScoreWindow_Text.png"); - TJAPlayer3.Skin.SongSelect_Bar_Genre_Count = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}"), "Bar_Genre_"); - if (TJAPlayer3.Skin.SongSelect_Bar_Genre_Count != 0) + { - SongSelect_Bar_Genre = new CTexture[TJAPlayer3.Skin.SongSelect_Bar_Genre_Count]; - SongSelect_Bar_Genre_Overlap = new CTexture[TJAPlayer3.Skin.SongSelect_Bar_Genre_Count]; - for (int i = 0; i < SongSelect_Bar_Genre.Length; i++) + string[] genre_files = Directory.GetFiles(CSkin.Path(BASE + SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}"), "Bar_Genre_*.png"); + SongSelect_Bar_Genre = new (); + for (int i = 0; i < genre_files.Length; i++) { - SongSelect_Bar_Genre[i] = TxC(SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}Bar_Genre_" + i.ToString() + ".png"); - SongSelect_Bar_Genre_Overlap[i] = TxC(SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}Bar_Genre_Overlap_" + i.ToString() + ".png"); + string name = Path.GetFileNameWithoutExtension(genre_files[i]).Split('_')[2]; + if (name != "Overlap") SongSelect_Bar_Genre.Add(name, TxC(SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}Bar_Genre_" + name + ".png")); + } + } + { + string[] genre_files = Directory.GetFiles(CSkin.Path(BASE + SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}"), "Bar_Genre_Overlap_*.png"); + SongSelect_Bar_Genre_Overlap = new (); + for (int i = 0; i < genre_files.Length; i++) + { + string name = Path.GetFileNameWithoutExtension(genre_files[i]).Split('_')[3]; + SongSelect_Bar_Genre_Overlap.Add(name, TxC(SONGSELECT + @$"Bar_Genre{Path.DirectorySeparatorChar}Bar_Genre_Overlap_" + name + ".png")); } } - TJAPlayer3.Skin.SongSelect_Genre_Background_Count = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + SONGSELECT + @$"Genre_Background{Path.DirectorySeparatorChar}"), "GenreBackground_"); - - if (TJAPlayer3.Skin.SongSelect_Genre_Background_Count != 0) { - SongSelect_GenreBack = new CTexture[TJAPlayer3.Skin.SongSelect_Genre_Background_Count]; - for (int i = 0; i < SongSelect_GenreBack.Length; i++) + string[] genre_files = Directory.GetFiles(CSkin.Path(BASE + SONGSELECT + @$"Genre_Background{Path.DirectorySeparatorChar}"), "GenreBackground_*.png"); + SongSelect_GenreBack = new (); + for (int i = 0; i < genre_files.Length; i++) { - SongSelect_GenreBack[i] = TxC(SONGSELECT + @$"Genre_Background{Path.DirectorySeparatorChar}GenreBackground_" + i.ToString() + ".png"); + string name = Path.GetFileNameWithoutExtension(genre_files[i]).Split('_')[1]; + SongSelect_GenreBack.Add(name, TxC(SONGSELECT + @$"Genre_Background{Path.DirectorySeparatorChar}GenreBackground_" + name + ".png")); } } - - TJAPlayer3.Skin.SongSelect_Box_Chara_Count = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + SONGSELECT + @$"Box_Chara{Path.DirectorySeparatorChar}"), "Box_Chara_"); - - if (TJAPlayer3.Skin.SongSelect_Box_Chara_Count != 0) + { - SongSelect_Box_Chara = new CTexture[TJAPlayer3.Skin.SongSelect_Box_Chara_Count]; - for (int i = 0; i < SongSelect_Box_Chara.Length; i++) + string[] genre_files = Directory.GetFiles(CSkin.Path(BASE + SONGSELECT + @$"Box_Chara{Path.DirectorySeparatorChar}"), "Box_Chara_*.png"); + SongSelect_Box_Chara = new (); + for (int i = 0; i < genre_files.Length; i++) { - SongSelect_Box_Chara[i] = TxC(SONGSELECT + @$"Box_Chara{Path.DirectorySeparatorChar}Box_Chara_" + i.ToString() + ".png"); + string name = Path.GetFileNameWithoutExtension(genre_files[i]).Split('_')[2]; + SongSelect_Box_Chara.Add(name, TxC(SONGSELECT + @$"Box_Chara{Path.DirectorySeparatorChar}Box_Chara_" + name + ".png")); } } @@ -359,14 +365,13 @@ namespace TJAPlayer3 Difficulty_Select_Bar[3] = TxC(SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Select_Bar4.png"); Difficulty_Select_Bar[4] = TxC(SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Select_Bar5.png"); - TJAPlayer3.Skin.SongSelect_Difficulty_Background_Count = TJAPlayer3.t連番画像の枚数を数える(CSkin.Path(BASE + SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Back{Path.DirectorySeparatorChar}"), "Difficulty_Back_"); - - if (TJAPlayer3.Skin.SongSelect_Difficulty_Background_Count != 0) { - Difficulty_Back = new CTexture[TJAPlayer3.Skin.SongSelect_Difficulty_Background_Count]; - for (int i = 0; i < Difficulty_Back.Length; i++) + string[] genre_files = Directory.GetFiles(CSkin.Path(BASE + SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Back{Path.DirectorySeparatorChar}"), "Difficulty_Back_*.png"); + Difficulty_Back = new (); + for (int i = 0; i < genre_files.Length; i++) { - Difficulty_Back[i] = TxC(SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Back{Path.DirectorySeparatorChar}Difficulty_Back_" + i.ToString() + ".png"); + string name = Path.GetFileNameWithoutExtension(genre_files[i]).Split('_')[2]; + Difficulty_Back.Add(name, TxC(SONGSELECT + @$"Difficulty_Select{Path.DirectorySeparatorChar}Difficulty_Back{Path.DirectorySeparatorChar}Difficulty_Back_" + name + ".png")); } } #endregion @@ -1189,6 +1194,8 @@ namespace TJAPlayer3 Characters_Heya_Render = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; Characters_Result_Clear_1P = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; Characters_Result_Failed_1P = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; + Characters_Result_Clear_2P = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; + Characters_Result_Failed_2P = new CTexture[TJAPlayer3.Skin.Characters_Ptn]; Characters = new CCharacter[TJAPlayer3.Skin.Characters_Ptn]; Characters_Normal = new CTexture[TJAPlayer3.Skin.Characters_Ptn][]; @@ -1340,6 +1347,8 @@ namespace TJAPlayer3 Characters_Heya_Render[i] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Render.png"); Characters_Result_Clear_1P[i] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Result_Clear_1P.png"); Characters_Result_Failed_1P[i] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Result_Failed_1P.png"); + Characters_Result_Clear_2P[i] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Result_Clear_2P.png"); + Characters_Result_Failed_2P[i] = TxCGlobal(CHARACTERS + TJAPlayer3.Skin.Characters_DirName[i] + @$"{Path.DirectorySeparatorChar}Result_Failed_2P.png"); TJAPlayer3.Skin.Characters_Resolution[i] = new int[] { 1280, 720 }; TJAPlayer3.Skin.Characters_Heya_Render_Offset[i] = new int[] { 0, 0 }; @@ -2382,10 +2391,11 @@ namespace TJAPlayer3 SongSelect_Search_Window, SongSelect_ScoreWindow_Text; - public CTexture[] SongSelect_GenreBack, + public Dictionary SongSelect_GenreBack, SongSelect_Bar_Genre, SongSelect_Bar_Genre_Overlap, - SongSelect_Box_Chara, + SongSelect_Box_Chara; + public CTexture[] SongSelect_ScoreWindow = new CTexture[(int)Difficulty.Total], SongSelect_Frame_Score = new CTexture[3], SongSelect_NamePlate = new CTexture[1], @@ -2404,7 +2414,7 @@ namespace TJAPlayer3 public CTexture Difficulty_Option_Select; public CTexture[] Difficulty_Select_Bar = new CTexture[5]; - public CTexture[] Difficulty_Back; + public Dictionary Difficulty_Back; #endregion public CTexture NewHeya_Close; @@ -2821,7 +2831,9 @@ Result_Mountain = new CTexture[4]*/; public CTexture[] Characters_Heya_Preview, Characters_Heya_Render, Characters_Result_Clear_1P, - Characters_Result_Failed_1P; + Characters_Result_Failed_1P, + Characters_Result_Clear_2P, + Characters_Result_Failed_2P; public CCharacter[] Characters; #endregion diff --git a/OpenTaiko/src/Stages/02.Title/CStageタイトル.cs b/OpenTaiko/src/Stages/02.Title/CStageタイトル.cs index 1044a1f2..aa41850f 100644 --- a/OpenTaiko/src/Stages/02.Title/CStageタイトル.cs +++ b/OpenTaiko/src/Stages/02.Title/CStageタイトル.cs @@ -184,7 +184,12 @@ namespace TJAPlayer3 TJAPlayer3.Skin.soundEntry.t再生する(); } else - return (int)E戻り値.EXIT; + { + TJAPlayer3.Skin.sound決定音.t再生する(); + n現在の選択行モード選択 = (int)E戻り値.EXIT + 1; + this.actFO.tフェードアウト開始(0, 500); + base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; + } } diff --git a/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs b/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs index f613bc82..a7cd8257 100644 --- a/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs +++ b/OpenTaiko/src/Stages/05.SongSelect/CActSelect曲リスト.cs @@ -1414,16 +1414,15 @@ namespace TJAPlayer3 //----------------- // int boxType = nStrジャンルtoNum(stバー情報[nパネル番号].strジャンル); - int boxType = stバー情報[nパネル番号].BoxType; + string boxType = stバー情報[nパネル番号].BoxType; + var bar_genre = HGenreBar.tGetGenreBar(boxType, TJAPlayer3.Tx.SongSelect_Bar_Genre); + var bar_genre_overlap = HGenreBar.tGetGenreBar(boxType, TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap); - if (!stバー情報[nパネル番号].BoxTypeChanged) - boxType = nStrジャンルtoNum(stバー情報[nパネル番号].strジャンル); + bar_genre.color4 = CConversion.ColorToColor4(stバー情報[nパネル番号].BoxColor); - TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType].color4 = CConversion.ColorToColor4(stバー情報[nパネル番号].BoxColor); - - TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType].vc拡大縮小倍率.X = 1.0f; - if (TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[boxType] != null) - TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[boxType].vc拡大縮小倍率.X = 1.0f; + bar_genre.vc拡大縮小倍率.X = 1.0f; + if (bar_genre_overlap != null) + bar_genre_overlap.vc拡大縮小倍率.X = 1.0f; TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay.vc拡大縮小倍率.X = 1.0f; TJAPlayer3.Tx.SongSelect_Bar_Genre_Back.vc拡大縮小倍率.X = 1.0f; @@ -1547,13 +1546,11 @@ namespace TJAPlayer3 #region [ Bar ] //int boxType = nStrジャンルtoNum(r現在選択中の曲.strジャンル); - int boxType = r現在選択中の曲.BoxType; + var bar_genre = HGenreBar.tGetGenreBar(r現在選択中の曲.BoxType, TJAPlayer3.Tx.SongSelect_Bar_Genre); + var bar_genre_overlap = HGenreBar.tGetGenreBar(r現在選択中の曲.BoxType, TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap); - if (!r現在選択中の曲.isChangedBoxType) - boxType = nStrジャンルtoNum(r現在選択中の曲.strジャンル); - - DrawBarCenter(TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType], TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, true, false, false); - DrawBarCenter(TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[boxType], TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, false, true, true); + DrawBarCenter(bar_genre, TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, true, false, false); + DrawBarCenter(bar_genre_overlap, TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, false, true, true); #endregion @@ -1652,15 +1649,13 @@ namespace TJAPlayer3 #region [ Box ] //int boxType = nStrジャンルtoNum(r現在選択中の曲.strジャンル); - int boxType = r現在選択中の曲.BoxType; - - if (!r現在選択中の曲.isChangedBoxType) - boxType = nStrジャンルtoNum(r現在選択中の曲.strジャンル); + var bar_genre = HGenreBar.tGetGenreBar(r現在選択中の曲.BoxType, TJAPlayer3.Tx.SongSelect_Bar_Genre); + var bar_genre_overlap = HGenreBar.tGetGenreBar(r現在選択中の曲.BoxType, TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap); //DrawBarCenter(TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType], TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, true, true, false); - DrawBarCenter(TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType], TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, true, false, false); - DrawBarCenter(TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[boxType], TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, false, true, false); + DrawBarCenter(bar_genre, TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, true, false, false); + DrawBarCenter(bar_genre_overlap, TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum], TJAPlayer3.Skin.SongSelect_Bar_Y[barCenterNum], centerMoveX, centerMove, false, true, false); #endregion @@ -1957,32 +1952,28 @@ namespace TJAPlayer3 // Chara here - int boxType = r現在選択中の曲.BoxChara; - - if (!r現在選択中の曲.isChangedBoxChara) - boxType = this.nStrジャンルtoNumBox(r現在選択中の曲.strジャンル); + var box_chara = HGenreBar.tGetGenreBar(r現在選択中の曲.BoxChara, TJAPlayer3.Tx.SongSelect_Box_Chara); // If BoxChara < 0, don't display any character - if (boxType >= 0 && boxType < TJAPlayer3.Skin.SongSelect_Box_Chara_Count) { if (!ctBoxOpen.IsEnded) - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].Opacity = (int)(ctBoxOpen.CurrentValue >= 1200 && ctBoxOpen.CurrentValue <= 1620 ? 255 - (ctBoxOpen.CurrentValue - 1200) * 2.55f : + box_chara.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 (!TJAPlayer3.stage選曲.act難易度選択画面.bIsDifficltSelect) - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].Opacity = (int)(BarAnimeCount * 255.0f); + box_chara.Opacity = (int)(BarAnimeCount * 255.0f); else if (ctDifficultyIn.CurrentValue >= 1000) - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); + box_chara.Opacity = (int)255.0f - (ctDifficultyIn.CurrentValue - 1000); } - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType]?.t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Box_Chara_X[0] - (BarAnimeCount * TJAPlayer3.Skin.SongSelect_Box_Chara_Move), TJAPlayer3.Skin.SongSelect_Box_Chara_Y[0], - new Rectangle(0, 0, TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].szテクスチャサイズ.Width / 2, - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].szテクスチャサイズ.Height)); + box_chara?.t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Box_Chara_X[0] - (BarAnimeCount * TJAPlayer3.Skin.SongSelect_Box_Chara_Move), TJAPlayer3.Skin.SongSelect_Box_Chara_Y[0], + new Rectangle(0, 0, box_chara.szテクスチャサイズ.Width / 2, + box_chara.szテクスチャサイズ.Height)); - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType]?.t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Box_Chara_X[1] + (BarAnimeCount * TJAPlayer3.Skin.SongSelect_Box_Chara_Move), TJAPlayer3.Skin.SongSelect_Box_Chara_Y[1], - new Rectangle(TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].szテクスチャサイズ.Width / 2, 0, - TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].szテクスチャサイズ.Width / 2, TJAPlayer3.Tx.SongSelect_Box_Chara[boxType].szテクスチャサイズ.Height)); + box_chara?.t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Box_Chara_X[1] + (BarAnimeCount * TJAPlayer3.Skin.SongSelect_Box_Chara_Move), TJAPlayer3.Skin.SongSelect_Box_Chara_Y[1], + new Rectangle(box_chara.szテクスチャサイズ.Width / 2, 0, + box_chara.szテクスチャサイズ.Width / 2, box_chara.szテクスチャサイズ.Height)); } } break; @@ -2423,9 +2414,9 @@ namespace TJAPlayer3 public Color BoxColor; public Color BgColor; - public int BoxType; - public int BgType; - public int BoxChara; + public string BoxType; + public string BgType; + public string BoxChara; public bool BoxTypeChanged; public bool BgTypeChanged; @@ -2868,7 +2859,7 @@ namespace TJAPlayer3 Eバー種別 eバー種別, int[][] クリア, int[][] スコアランク, - int boxType, + string boxType, int _songType = 0, CSongUniqueID csu = null, C曲リストノード reference = null @@ -2886,12 +2877,15 @@ namespace TJAPlayer3 TJAPlayer3.Tx.SongSelect_Crown.Opacity = opct; TJAPlayer3.Tx.SongSelect_ScoreRank.Opacity = opct; - for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Genre_Count; i++) + + foreach(var tex in TJAPlayer3.Tx.SongSelect_Bar_Genre) { - TJAPlayer3.Tx.SongSelect_Bar_Genre[i].Opacity = opct; - if (TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[i] != null) - TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[i].Opacity = opct; - } + tex.Value.Opacity = opct; + } + foreach(var tex in TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap) + { + tex.Value.Opacity = opct; + } TJAPlayer3.Tx.SongSelect_Bar_Genre_Back.Opacity = opct; TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.Opacity = opct; @@ -2924,8 +2918,8 @@ namespace TJAPlayer3 } else if (eバー種別 != Eバー種別.BackBox) { - TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType]?.t2D描画(x, y); - TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap[boxType]?.t2D描画(x, y); + HGenreBar.tGetGenreBar(boxType, TJAPlayer3.Tx.SongSelect_Bar_Genre)?.t2D描画(x, y); + HGenreBar.tGetGenreBar(boxType, TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlap)?.t2D描画(x, y); if (TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay != null) TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay.t2D描画(x, y); diff --git a/OpenTaiko/src/Stages/05.SongSelect/CActSelect難易度選択画面.cs b/OpenTaiko/src/Stages/05.SongSelect/CActSelect難易度選択画面.cs index 4b003ff2..09599d05 100644 --- a/OpenTaiko/src/Stages/05.SongSelect/CActSelect難易度選択画面.cs +++ b/OpenTaiko/src/Stages/05.SongSelect/CActSelect難易度選択画面.cs @@ -348,15 +348,10 @@ namespace TJAPlayer3 // int boxType = nStrジャンルtoNum(TJAPlayer3.stage選曲.r現在選択中の曲.strジャンル); - int boxType = TJAPlayer3.stage選曲.r現在選択中の曲.BoxType; - - if (!TJAPlayer3.stage選曲.r現在選択中の曲.isChangedBoxType) - { - boxType = nStrジャンルtoNum(TJAPlayer3.stage選曲.r現在選択中の曲.strジャンル); - } + var difficulty_back = HGenreBar.tGetGenreBar(TJAPlayer3.stage選曲.r現在選択中の曲.BoxType, TJAPlayer3.Tx.Difficulty_Back); - TJAPlayer3.Tx.Difficulty_Back[boxType].Opacity = + difficulty_back.Opacity = (TJAPlayer3.stage選曲.act曲リスト.ctDifficultyIn.CurrentValue - 1255); TJAPlayer3.Tx.Difficulty_Bar.Opacity = (TJAPlayer3.stage選曲.act曲リスト.ctDifficultyIn.CurrentValue - 1255); TJAPlayer3.Tx.Difficulty_Number.Opacity = (TJAPlayer3.stage選曲.act曲リスト.ctDifficultyIn.CurrentValue - 1255); @@ -366,9 +361,9 @@ namespace TJAPlayer3 TJAPlayer3.Tx.SongSelect_ScoreRank.Opacity = (TJAPlayer3.stage選曲.act曲リスト.ctDifficultyIn.CurrentValue - 1255); TJAPlayer3.Tx.Difficulty_Star.Opacity = (TJAPlayer3.stage選曲.act曲リスト.ctDifficultyIn.CurrentValue - 1255); - TJAPlayer3.Tx.Difficulty_Back[boxType].color4 = CConversion.ColorToColor4(TJAPlayer3.stage選曲.r現在選択中の曲.BoxColor); + difficulty_back.color4 = CConversion.ColorToColor4(TJAPlayer3.stage選曲.r現在選択中の曲.BoxColor); - TJAPlayer3.Tx.Difficulty_Back[boxType].t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Difficulty_Back[0], TJAPlayer3.Skin.SongSelect_Difficulty_Back[1]); + difficulty_back.t2D中心基準描画(TJAPlayer3.Skin.SongSelect_Difficulty_Back[0], TJAPlayer3.Skin.SongSelect_Difficulty_Back[1]); for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { diff --git a/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs b/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs index e0500a2a..99e232df 100644 --- a/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs +++ b/OpenTaiko/src/Stages/05.SongSelect/CStage選曲.cs @@ -472,21 +472,12 @@ namespace TJAPlayer3 if (this.r現在選択中の曲 != null) { - // if (this.nStrジャンルtoNum(this.r現在選択中の曲.strジャンル) != 0 || r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.BOX || r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.SCORE) - // { - if (this.NowUseGenre) - nGenreBack = this.nStrジャンルtoNum(this.NowGenre); - else - nGenreBack = this.NowBg; - - if (this.OldUseGenre) - nOldGenreBack = this.nStrジャンルtoNum(this.OldGenre); - else - nOldGenreBack = this.OldBg; - // } + nGenreBack = this.NowBg; + nOldGenreBack = this.OldBg; + if (!TJAPlayer3.ConfigIni.bAIBattleMode) { - if (TJAPlayer3.Tx.SongSelect_GenreBack[nGenreBack] != null) + if (txGenreBack != null) { float scale = TJAPlayer3.Skin.Resolution[1] / (float)txGenreBack.szテクスチャサイズ.Height; for (int i = 0; i < (TJAPlayer3.Skin.Resolution[0] / (txGenreBack.szテクスチャサイズ.Width * scale)) + 2; i++) @@ -1378,8 +1369,8 @@ namespace TJAPlayer3 public CCounter ctBackgroundFade; public string NowGenre; public string OldGenre; - public int NowBg; - public int OldBg; + public string NowBg; + public string OldBg; public Color NowBgColor = Color.White; public Color OldBgColor = Color.White; public bool NowUseGenre; @@ -1419,8 +1410,8 @@ namespace TJAPlayer3 public PuchiChara PuchiChara; - private int nGenreBack; - private int nOldGenreBack; + private string nGenreBack; + private string nOldGenreBack; public bool bBGM再生済み; public bool bBGMIn再生した; private STキー反復用カウンタ ctキー反復用; @@ -1466,7 +1457,7 @@ namespace TJAPlayer3 { if (txCustomSelectBG == null) { - return TJAPlayer3.Tx.SongSelect_GenreBack[nGenreBack]; + return HGenreBar.tGetGenreBar(nGenreBack, TJAPlayer3.Tx.SongSelect_GenreBack); } else { @@ -1480,7 +1471,7 @@ namespace TJAPlayer3 { if (txCustomPrevSelectBG == null) { - return TJAPlayer3.Tx.SongSelect_GenreBack[nOldGenreBack]; + return HGenreBar.tGetGenreBar(nOldGenreBack, TJAPlayer3.Tx.SongSelect_GenreBack); } else { diff --git a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs index c88b45a7..f60498ad 100644 --- a/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs +++ b/OpenTaiko/src/Stages/07.Game/Taiko/CAct演奏Drums演奏終了演出.cs @@ -149,7 +149,7 @@ namespace TJAPlayer3 if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Tower) { - Tower_DropoutScript = new EndAnimeScript($@"{origindir}Tower_Dropout{Path.DirectorySeparatorChar}cript.lua"); + Tower_DropoutScript = new EndAnimeScript($@"{origindir}Tower_Dropout{Path.DirectorySeparatorChar}Script.lua"); Tower_DropoutScript.Init(); Tower_TopReached_PassScript = new EndAnimeScript($@"{origindir}Tower_TopReached_Pass{Path.DirectorySeparatorChar}Script.lua"); diff --git a/OpenTaiko/src/Stages/08.Result/CActResultParameterPanel.cs b/OpenTaiko/src/Stages/08.Result/CActResultParameterPanel.cs index cb2bb362..046af44f 100644 --- a/OpenTaiko/src/Stages/08.Result/CActResultParameterPanel.cs +++ b/OpenTaiko/src/Stages/08.Result/CActResultParameterPanel.cs @@ -834,17 +834,18 @@ namespace TJAPlayer3 { CResultCharacter.tMenuDisplayCharacter(p, chara_x, chara_y, CResultCharacter.ECharacterResult.CLEAR, pos); - if (TJAPlayer3.Skin.Characters_UseResult1P[_charaId] && TJAPlayer3.Skin.Result_Use1PUI && TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId] != null) + var tex = pos == 0 ? TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId] : TJAPlayer3.Tx.Characters_Result_Clear_2P[_charaId]; + if (TJAPlayer3.Skin.Characters_UseResult1P[_charaId] && TJAPlayer3.Skin.Result_Use1PUI && tex != null) { - TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId].vc拡大縮小倍率.X = renderRatioX; - TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId].vc拡大縮小倍率.Y = renderRatioY; + tex.vc拡大縮小倍率.X = renderRatioX; + tex.vc拡大縮小倍率.Y = renderRatioY; if (is2PSide) { - TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId].t2D左右反転描画(p1chara_x, p1chara_y); + tex.t2D左右反転描画(p1chara_x, p1chara_y); } else { - TJAPlayer3.Tx.Characters_Result_Clear_1P[_charaId].t2D描画(p1chara_x, p1chara_y); + tex.t2D描画(p1chara_x, p1chara_y); } } }