diff --git a/TJAPlayer3/Common/CSkin.cs b/TJAPlayer3/Common/CSkin.cs index 26c2f361..3b3cd6e8 100644 --- a/TJAPlayer3/Common/CSkin.cs +++ b/TJAPlayer3/Common/CSkin.cs @@ -2245,6 +2245,150 @@ namespace TJAPlayer3 SongSelect_Explicit[i] = int.Parse(strSplit[i]); } } + else if (strCommand == "SongSelect_FloorNum_Show") + { + SongSelect_FloorNum_Show = C変換.bONorOFF(strParam[0]); + } + else if (strCommand == "SongSelect_FloorNum_X") + { + SongSelect_FloorNum_X = int.Parse(strParam); + } + else if (strCommand == "SongSelect_FloorNum_Y") + { + SongSelect_FloorNum_Y = int.Parse(strParam); + } + else if (strCommand == "SongSelect_FloorNum_Interval") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + SongSelect_FloorNum_Interval[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Show") + { + SongSelect_DanInfo_Show = C変換.bONorOFF(strParam[0]); + } + else if (strCommand == "SongSelect_DanInfo_Icon_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Icon_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Icon_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Icon_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Icon_Scale") + { + SongSelect_DanInfo_Icon_Scale = float.Parse(strParam); + } + else if (strCommand == "SongSelect_DanInfo_Difficulty_Cymbol_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Difficulty_Cymbol_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Difficulty_Cymbol_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Difficulty_Cymbol_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Difficulty_Cymbol_Scale") + { + SongSelect_DanInfo_Difficulty_Cymbol_Scale = float.Parse(strParam); + } + else if (strCommand == "SongSelect_DanInfo_Level_Number_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Level_Number_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Level_Number_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Level_Number_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Level_Number_Scale") + { + SongSelect_DanInfo_Level_Number_Scale = float.Parse(strParam); + } + else if (strCommand == "SongSelect_DanInfo_Title_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Title_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Title_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Title_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Title_Size") + { + SongSelect_DanInfo_Title_Size = int.Parse(strParam); + } + else if (strCommand == "SongSelect_DanInfo_Exam_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 6; i++) + { + SongSelect_DanInfo_Exam_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Exam_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 6; i++) + { + SongSelect_DanInfo_Exam_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Exam_Size") + { + SongSelect_DanInfo_Exam_Size = int.Parse(strParam); + } + else if (strCommand == "SongSelect_DanInfo_Exam_Value_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 3; i++) + { + SongSelect_DanInfo_Exam_Value_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Exam_Value_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 6; i++) + { + SongSelect_DanInfo_Exam_Value_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_DanInfo_Exam_Value_Scale") + { + SongSelect_DanInfo_Exam_Value_Scale = float.Parse(strParam); + } else if (strCommand == "SongSelect_Table_X") { string[] strSplit = strParam.Split(','); @@ -7430,6 +7574,65 @@ namespace TJAPlayer3 } #endregion + #region TowerSelect + else if (strCommand == "TowerSelect_Title_Size") + { + TowerSelect_Title_Size = int.Parse(strParam); + } + else if (strCommand == "TowerSelect_Title_MaxWidth") + { + TowerSelect_Title_MaxWidth = int.Parse(strParam); + } + else if (strCommand == "TowerSelect_Title_Offset") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + TowerSelect_Title_Offset[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "TowerSelect_SubTitle_Size") + { + TowerSelect_SubTitle_Size = int.Parse(strParam); + } + else if (strCommand == "TowerSelect_SubTitle_MaxWidth") + { + TowerSelect_SubTitle_MaxWidth = int.Parse(strParam); + } + else if (strCommand == "TowerSelect_SubTitle_Offset") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + TowerSelect_SubTitle_Offset[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "TowerSelect_Bar_Count") + { + TowerSelect_Bar_Count = int.Parse(strParam); + } + else if (strCommand == "TowerSelect_Bar_X") + { + TowerSelect_Bar_X = new int[TowerSelect_Bar_Count]; + + string[] strSplit = strParam.Split(','); + for (int i = 0; i < TowerSelect_Bar_Count; i++) + { + TowerSelect_Bar_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "TowerSelect_Bar_Y") + { + TowerSelect_Bar_Y = new int[TowerSelect_Bar_Count]; + + string[] strSplit = strParam.Split(','); + for (int i = 0; i < TowerSelect_Bar_Count; i++) + { + TowerSelect_Bar_Y[i] = int.Parse(strSplit[i]); + } + } + #endregion + #region OpenEncyclopedia else if (strCommand == "OpenEncyclopedia_Context_Item2") { @@ -8258,6 +8461,31 @@ namespace TJAPlayer3 public int[] SongSelect_Bpm_Y = new int[] { 20, 66, 112 }; public int[] SongSelect_Bpm_Interval = new int[] { 22, 0 }; + public bool SongSelect_FloorNum_Show = false; + public int SongSelect_FloorNum_X = 1200; + public int SongSelect_FloorNum_Y = 205; + public int[] SongSelect_FloorNum_Interval = new int[] { 30, 0 }; + + public bool SongSelect_DanInfo_Show = false; + public int[] SongSelect_DanInfo_Icon_X = new int[] { 1001, 1001, 1001 }; + public int[] SongSelect_DanInfo_Icon_Y = new int[] { 269, 309, 349 }; + public float SongSelect_DanInfo_Icon_Scale = 0.5f; + public int[] SongSelect_DanInfo_Difficulty_Cymbol_X = new int[] { 1028, 1028, 1028 }; + public int[] SongSelect_DanInfo_Difficulty_Cymbol_Y = new int[] { 263, 303, 343 }; + public float SongSelect_DanInfo_Difficulty_Cymbol_Scale = 0.5f; + public int[] SongSelect_DanInfo_Level_Number_X = new int[] { 1040, 1040, 1040 }; + public int[] SongSelect_DanInfo_Level_Number_Y = new int[] { 267, 307, 347 }; + public float SongSelect_DanInfo_Level_Number_Scale = 0.5f; + public int[] SongSelect_DanInfo_Title_X = new int[] { 1032, 1032, 1032 }; + public int[] SongSelect_DanInfo_Title_Y = new int[] { 258, 298, 338 }; + public int SongSelect_DanInfo_Title_Size = 12; + public int[] SongSelect_DanInfo_Exam_X = new int[] { 1030, 1030, 1030, 1030, 1030, 1030 }; + public int[] SongSelect_DanInfo_Exam_Y = new int[] { 398, 426, 454, 482, 510, 538 }; + public int SongSelect_DanInfo_Exam_Size = 10; + public int[] SongSelect_DanInfo_Exam_Value_X = new int[] { 1097, 1162, 1227 }; + public int[] SongSelect_DanInfo_Exam_Value_Y = new int[] { 388, 416, 444, 472, 500, 528 }; + public float SongSelect_DanInfo_Exam_Value_Scale = 0.5f; + public int[] SongSelect_Table_X = new int[] { 0, 1034, 180, 854, 360 }; public int[] SongSelect_Table_Y = new int[] { 0, 0, -204, -204, 0 }; @@ -9372,6 +9600,20 @@ namespace TJAPlayer3 #endregion + #region TowerSelect + + public int TowerSelect_Title_Size = 30; + public int TowerSelect_Title_MaxWidth = 230; + public int[] TowerSelect_Title_Offset = new int[] { 0, -30 }; + public int TowerSelect_SubTitle_Size = 30; + public int TowerSelect_SubTitle_MaxWidth = 230; + public int[] TowerSelect_SubTitle_Offset = new int[] { 0, 10 }; + public int TowerSelect_Bar_Count = 7; + public int[] TowerSelect_Bar_X = new int[] { -260, 40, 340, 640, 940, 1240, 1540 }; + public int[] TowerSelect_Bar_Y = new int[] { 420, 400, 380, 360, 380, 400, 420 }; + + #endregion + #region OpenEncyclopedia public int[] OpenEncyclopedia_Context_Item2 = new int[] { 960, 180 }; diff --git a/TJAPlayer3/Common/TJAPlayer3.cs b/TJAPlayer3/Common/TJAPlayer3.cs index f1919f1e..d3a132b1 100644 --- a/TJAPlayer3/Common/TJAPlayer3.cs +++ b/TJAPlayer3/Common/TJAPlayer3.cs @@ -383,10 +383,16 @@ namespace TJAPlayer3 } public static CStageOnlineLounge stageOnlineLounge - { + { get; private set; - } + } + + public static CStageTowerSelect stageTowerSelect + { + get; + private set; + } public static COpenEncyclopedia stageOpenEncyclopedia { @@ -975,6 +981,19 @@ namespace TJAPlayer3 TJAPlayer3.latestSongSelect = stage段位選択; //----------------------------- #endregion + break; + + case (int)CStageタイトル.E戻り値.TAIKOTOWERSSTART: + #region [Online Lounge] + //----------------------------- + r現在のステージ.On非活性化(); + Trace.TraceInformation("----------------------"); + Trace.TraceInformation("■ Online Lounge"); + stageTowerSelect.On活性化(); + r直前のステージ = r現在のステージ; + r現在のステージ = stageTowerSelect; + //----------------------------- + #endregion break; case (int)CStageタイトル.E戻り値.HEYA: @@ -1299,9 +1318,10 @@ namespace TJAPlayer3 //----------------------------- #endregion - case (int)CStage選曲.E戻り値.選曲した: + case (int)CStage選曲.E戻り値.選曲した: #region [ *** ] //----------------------------- + r現在のステージ.On非活性化(); Trace.TraceInformation("----------------------"); Trace.TraceInformation("■ 曲読み込み"); @@ -1801,6 +1821,66 @@ for (int i = 0; i < 3; i++) { } //----------------------------- #endregion + break; + + + case CStage.Eステージ.TaikoTowers: + #region [ *** ] + switch (this.n進行描画の戻り値) + { + case (int)EReturnValue.ReturnToTitle: + #region [ *** ] + //----------------------------- + r現在のステージ.On非活性化(); + Trace.TraceInformation("----------------------"); + Trace.TraceInformation("■ タイトル"); + stageタイトル.On活性化(); + r直前のステージ = r現在のステージ; + r現在のステージ = stageタイトル; + + /* + Skin.bgm選曲画面イン.t停止する(); + Skin.bgm選曲画面.t停止する(); + */ + CSongSelectSongManager.stopSong(); + CSongSelectSongManager.enable(); + + foreach (STPlugin pg in this.listプラグイン) + { + Directory.SetCurrentDirectory(pg.strプラグインフォルダ); + pg.plugin.Onステージ変更(); + Directory.SetCurrentDirectory(TJAPlayer3.strEXEのあるフォルダ); + } + + this.tガベージコレクションを実行する(); + break; + //----------------------------- + #endregion + + case (int)EReturnValue.SongChoosen: + #region [ *** ] + //----------------------------- + latestSongSelect = stageTowerSelect; + r現在のステージ.On非活性化(); + Trace.TraceInformation("----------------------"); + Trace.TraceInformation("■ 曲読み込み"); + stage曲読み込み.On活性化(); + r直前のステージ = r現在のステージ; + r現在のステージ = stage曲読み込み; + + foreach (STPlugin pg in this.listプラグイン) + { + Directory.SetCurrentDirectory(pg.strプラグインフォルダ); + pg.plugin.Onステージ変更(); + Directory.SetCurrentDirectory(TJAPlayer3.strEXEのあるフォルダ); + } + + this.tガベージコレクションを実行する(); + break; + //----------------------------- + #endregion + } + #endregion break; case CStage.Eステージ.ChangeSkin: @@ -2651,6 +2731,7 @@ for (int i = 0; i < 3; i++) { stage段位選択 = new CStage段位選択(); stageHeya = new CStageHeya(); stageOnlineLounge = new CStageOnlineLounge(); + stageTowerSelect = new CStageTowerSelect(); stageOpenEncyclopedia = new COpenEncyclopedia(); stage曲読み込み = new CStage曲読み込み(); stage演奏ドラム画面 = new CStage演奏ドラム画面(); @@ -2669,7 +2750,8 @@ for (int i = 0; i < 3; i++) { this.listトップレベルActivities.Add( stage選曲 ); this.listトップレベルActivities.Add( stage段位選択 ); this.listトップレベルActivities.Add( stageHeya ); - this.listトップレベルActivities.Add( stageOnlineLounge ); + this.listトップレベルActivities.Add(stageOnlineLounge); + this.listトップレベルActivities.Add(stageTowerSelect); this.listトップレベルActivities.Add( stageOpenEncyclopedia ); this.listトップレベルActivities.Add( stage曲読み込み ); this.listトップレベルActivities.Add( stage演奏ドラム画面 ); diff --git a/TJAPlayer3/Songs/CSong管理.cs b/TJAPlayer3/Songs/CSong管理.cs index f36fd606..42c46e36 100644 --- a/TJAPlayer3/Songs/CSong管理.cs +++ b/TJAPlayer3/Songs/CSong管理.cs @@ -50,8 +50,9 @@ namespace TJAPlayer3 } /*[NonSerialized] public List listSongsDB;*/ // songs.dbから構築されるlist - public List list曲ルート; // 起動時にフォルダ検索して構築されるlist + public List list曲ルート; // 起動時にフォルダ検索して構築されるlist public List list曲ルート_Dan = new List(); // 起動時にフォルダ検索して構築されるlist + public List list曲ルート_Tower = new List(); // 起動時にフォルダ検索して構築されるlist public static List listCustomBGs = new List(); public bool bIsSuspending // 外部スレッドから、内部スレッドのsuspendを指示する時にtrueにする { // 再開時は、これをfalseにしてから、次のautoReset.Set()を実行する @@ -956,14 +957,15 @@ namespace TJAPlayer3 foreach (C曲リストノード c曲リストノード in list曲ルート) { if (c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX) - { - + { if (c曲リストノード.strジャンル == "段位道場") { if (TJAPlayer3.ConfigIni.bDanTowerHide) - list曲ルート.Remove(c曲リストノード); - - // Add to dojo + list曲ルート.Remove(c曲リストノード); + + // Add to dojo + list曲ルート_Dan = c曲リストノード.list子リスト; + /* for (int i = 0; i < c曲リストノード.list子リスト.Count; i++) { if(c曲リストノード.list子リスト[i].eノード種別 == C曲リストノード.Eノード種別.SCORE) @@ -972,8 +974,16 @@ namespace TJAPlayer3 continue; } } + */ } - else + else if (c曲リストノード.strジャンル == "太鼓タワー") + { + if (TJAPlayer3.ConfigIni.bDanTowerHide) + list曲ルート.Remove(c曲リストノード); + + list曲ルート_Tower = c曲リストノード.list子リスト; + } + else { for (int i = 0; i < c曲リストノード.list子リスト.Count; i++) { @@ -986,7 +996,16 @@ namespace TJAPlayer3 continue; } - } + if (c曲リストノード.list子リスト[i].arスコア[5] != null) + { + list曲ルート_Tower.Add(c曲リストノード.list子リスト[i]); + + if (TJAPlayer3.ConfigIni.bDanTowerHide) + c曲リストノード.list子リスト.Remove(c曲リストノード.list子リスト[i]); + + continue; + } + } } } else diff --git a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs index 4415c835..a4ba9f2a 100644 --- a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs +++ b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs @@ -32,7 +32,7 @@ namespace TJAPlayer3 const string MODALS = @"11_Modals\"; public const string ONLINELOUNGE = @"12_OnlineLounge\"; - const string TOWERSELECT = @"13_TowerSelect\"; + public const string TOWERSELECT = @"13_TowerSelect\"; public const string OPENENCYCLOPEDIA = @"15_OpenEncyclopedia\"; // InGame @@ -239,6 +239,7 @@ namespace TJAPlayer3 SongSelect_Level_Number_Big_Icon = TxC(SONGSELECT + @"Level_Number_Big_Icon.png"); SongSelect_Level_Number_Icon = TxC(SONGSELECT + @"Level_Number_Icon.png"); SongSelect_Bpm_Number = TxC(SONGSELECT + @"Bpm_Number.png"); + SongSelect_Floor_Number = TxC(SONGSELECT + @"Floor_Number.png"); SongSelect_Credit = TxC(SONGSELECT + @"Credit.png"); SongSelect_Timer = TxC(SONGSELECT + @"Timer.png"); SongSelect_Explicit = TxC(SONGSELECT + @"Explicit.png"); @@ -1282,6 +1283,8 @@ namespace TJAPlayer3 #region [13_TowerSelect] + TowerSelect_Tower = TxC(TOWERSELECT + @"Tower.png"); + #endregion #region [15_OpenEncyclopedia] @@ -2102,6 +2105,7 @@ namespace TJAPlayer3 SongSelect_Level_Number_Big_Colored, SongSelect_Level_Number_Big_Icon, SongSelect_Bpm_Number, + SongSelect_Floor_Number, SongSelect_Bar_Select, SongSelect_Bar_Genre_Overlay, SongSelect_Credit, @@ -2565,6 +2569,9 @@ Result_Mountain = new CTexture[4]*/; #region [13_TowerSelect] + public CTexture + TowerSelect_Tower; + #endregion #region [15_OpenEncyclopedia] diff --git a/TJAPlayer3/Stages/02.Title/CMainMenuTab.cs b/TJAPlayer3/Stages/02.Title/CMainMenuTab.cs index df4782ca..4b27558e 100644 --- a/TJAPlayer3/Stages/02.Title/CMainMenuTab.cs +++ b/TJAPlayer3/Stages/02.Title/CMainMenuTab.cs @@ -121,7 +121,7 @@ namespace TJAPlayer3 { true, true, - false, + true, false, false, true, diff --git a/TJAPlayer3/Stages/02.Title/CStageタイトル.cs b/TJAPlayer3/Stages/02.Title/CStageタイトル.cs index 5735869f..2149c21a 100644 --- a/TJAPlayer3/Stages/02.Title/CStageタイトル.cs +++ b/TJAPlayer3/Stages/02.Title/CStageタイトル.cs @@ -350,7 +350,7 @@ namespace TJAPlayer3 { bool operationSucceded = false; - if (CMainMenuTab.__Menus[usedMenus[this.n現在の選択行モード選択]].rp == E戻り値.DANGAMESTART) + if (CMainMenuTab.__Menus[usedMenus[this.n現在の選択行モード選択]].rp == E戻り値.DANGAMESTART || CMainMenuTab.__Menus[usedMenus[this.n現在の選択行モード選択]].rp == E戻り値.TAIKOTOWERSSTART) { if (TJAPlayer3.Songs管理.list曲ルート_Dan.Count > 0 && TJAPlayer3.ConfigIni.nPlayerCount == 1) operationSucceded = true; diff --git a/TJAPlayer3/Stages/05.DaniSelect/CActSelect段位リスト.cs b/TJAPlayer3/Stages/05.DaniSelect/CActSelect段位リスト.cs index 282258d5..853a77be 100644 --- a/TJAPlayer3/Stages/05.DaniSelect/CActSelect段位リスト.cs +++ b/TJAPlayer3/Stages/05.DaniSelect/CActSelect段位リスト.cs @@ -50,8 +50,6 @@ namespace TJAPlayer3 ctExamConditionsAnim = new CCounter(0, 4000, 1, TJAPlayer3.Timer); - stバー情報 = new STバー情報[TJAPlayer3.Songs管理.list曲ルート_Dan.Count]; - if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) pfDanSong = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.DaniSelect_Font_DanSong_Size); else @@ -68,10 +66,8 @@ namespace TJAPlayer3 this.ttkExams[i] = new TitleTextureKey(CLangManager.LangInstance.GetString(1010 + i), this.pfExamFont, Color.White, Color.SaddleBrown, 1000); } - - //一応チェックしておく。 - if (TJAPlayer3.Songs管理.list曲ルート_Dan.Count > 0) - this.tバーの初期化(); + listSongs = TJAPlayer3.Songs管理.list曲ルート_Dan; + tUpdateSongs(); base.On活性化(); } @@ -252,7 +248,8 @@ namespace TJAPlayer3 private CStage選曲.STNumber[] stLevel = new CStage選曲.STNumber[10]; private CStage選曲.STNumber[] stSoulNumber = new CStage選曲.STNumber[10]; private CStage選曲.STNumber[] stExamNumber = new CStage選曲.STNumber[10]; - + + public List listSongs; public STバー情報[] stバー情報; public struct STバー情報 @@ -260,6 +257,7 @@ namespace TJAPlayer3 public TitleTextureKey[] ttkタイトル; public int[] n曲難易度; public int[] n曲レベル; + public C曲リストノード.Eノード種別 eノード種別; public List List_DanSongs; public CTexture txBarCenter; public CTexture txDanPlate; @@ -270,9 +268,19 @@ namespace TJAPlayer3 public Color cDanTickColor; } + public C曲リストノード currentBar + { + get + { + return listSongs[n現在の選択行]; + } + } + static CPrivateFastFont pfDanPlateTitle = null; static CPrivateFastFont pfDanIconTitle = null; + private Dictionary BarTexCache = new Dictionary(); + public static void RefleshSkin() { TJAPlayer3.t安全にDisposeする(ref pfDanPlateTitle); @@ -388,336 +396,412 @@ namespace TJAPlayer3 int currentSong = n現在の選択行 + modifier; bool over4 = false; - #region [Center bar and Dan plate] - - int danTick = stバー情報[currentSong].nDanTick; - Color danTickColor = stバー情報[currentSong].cDanTickColor; - - // Use the given bar center if provided, else use a default one - if (stバー情報[currentSong].txBarCenter != null) + switch(stバー情報[currentSong].eノード種別) { - stバー情報[currentSong].txBarCenter.t2D描画(TJAPlayer3.app.Device, scroll + Anime, 0); - } - else - { - int unit = TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Width / 6; - TJAPlayer3.Tx.Dani_DanSides.color4 = C変換.ColorToColor4(danTickColor); - - TJAPlayer3.Tx.Dani_Bar_Center.t2D描画(TJAPlayer3.app.Device, scroll + Anime, 0); - - // Bar sides - TJAPlayer3.Tx.Dani_DanSides.t2D描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanSides_X[0], TJAPlayer3.Skin.DaniSelect_DanSides_Y[0], new Rectangle( - unit * danTick, - 0, - unit, - TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Height - )); - - TJAPlayer3.Tx.Dani_DanSides.t2D左右反転描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanSides_X[1], TJAPlayer3.Skin.DaniSelect_DanSides_Y[1], new Rectangle( - unit * danTick, - 0, - unit, - TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Height - )); - } - - CActSelect段位リスト.tDisplayDanPlate(stバー情報[currentSong].txDanPlate, stバー情報[currentSong], (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanPlate[0], TJAPlayer3.Skin.DaniSelect_DanPlate[1]); - - #endregion - - #region [Goukaku plate] - - int currentRank = Math.Min(stバー情報[currentSong].clearGrade, 6) - 1; - - if (currentRank >= 0) - { - TJAPlayer3.Tx.DanResult_Rank.vc拡大縮小倍率.X = 0.8f; - TJAPlayer3.Tx.DanResult_Rank.vc拡大縮小倍率.Y = 0.8f; - - int rank_width = TJAPlayer3.Tx.DanResult_Rank.szテクスチャサイズ.Width / 7; - int rank_height = TJAPlayer3.Tx.DanResult_Rank.szテクスチャサイズ.Height; - - TJAPlayer3.Tx.DanResult_Rank.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Rank[0], TJAPlayer3.Skin.DaniSelect_Rank[1], new Rectangle(rank_width * (currentRank + 1), 0, rank_width, rank_height)); - } - - #endregion - - #region [Soul gauge condition] - - TJAPlayer3.Tx.Dani_Bloc[2]?.t2D描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Bloc2[0], TJAPlayer3.Skin.DaniSelect_Bloc2[1]); - - if (stバー情報[currentSong].List_DanSongs[0].Dan_C[0] != null) - tSoulDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Value_Gauge[0], TJAPlayer3.Skin.DaniSelect_Value_Gauge[1], stバー情報[currentSong].List_DanSongs[0].Dan_C[0].Value[0]); - - //TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[0]).t2D下中央基準描画(TJAPlayer3.app.Device, (int)(scroll + 396 + Anime), 452); - TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[0]).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_Text_Gauge[0], TJAPlayer3.Skin.DaniSelect_Text_Gauge[1]); - - #endregion - - #region [Song information] - - int getOpacity(int index, int sections = 2) - { - int current_section = index / 3; - int animJauge = ctExamConditionsAnim.n現在の値; - int split = 4000 / sections; - int begin = split * current_section; - int end = split * (current_section + 1); - if (animJauge < begin || animJauge > end) return 0; - - double sinus = Math.Abs(Math.Sin(animJauge * Math.PI / split)); - - if (sinus == 0) return 0; - return (int)(Math.Abs(Math.Pow(sinus, 1.2) / sinus) * 255); - - /* - int opacity = 255; - int half = index / 3; - - - - if (half == 0) - { - if (animJauge > 3745) - opacity = animJauge - 3745; - else if (animJauge > 1745) - opacity = 2000 - animJauge; - } - else - { - if (animJauge > 3745) - opacity = 4000 - animJauge; - else if (animJauge > 1745) - opacity = animJauge - 1745; - else - opacity = 0; - } - - return opacity; - */ - } - - int difficulty_cymbol_width = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Width / 5; - int difficulty_cymbol_height = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Height; - int sections_count = 1 + ((stバー情報[currentSong].n曲レベル.Length - 1) / 3); - - for (int i = 0; i < stバー情報[currentSong].ttkタイトル.Length - 1; i++) - { - int pos = i % 3; - int opacity = 255; - if (stバー情報[currentSong].ttkタイトル.Length - 1 > 3) - { - opacity = getOpacity(i, sections_count); - } - TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).Opacity = opacity; - TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).t2D描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Title_X[pos], TJAPlayer3.Skin.DaniSelect_Title_Y[pos]); - TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).Opacity = 255; - - tDisplayDanIcon(i + 1, scroll + Anime + TJAPlayer3.Skin.DaniSelect_DanIcon_X[pos], TJAPlayer3.Skin.DaniSelect_DanIcon_Y[pos], opacity, 1.0f); - } - - for (int i = 0; i < stバー情報[currentSong].n曲難易度.Length; i++) - { - int pos = i % 3; - if (stバー情報[currentSong].n曲難易度.Length > 3) - { - TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = getOpacity(i, sections_count); - } - TJAPlayer3.Tx.Dani_Difficulty_Cymbol.t2D中心基準描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Difficulty_Cymbol_X[pos], TJAPlayer3.Skin.DaniSelect_Difficulty_Cymbol_Y[pos], new Rectangle(stバー情報[currentSong].n曲難易度[i] * difficulty_cymbol_width, 0, difficulty_cymbol_width, difficulty_cymbol_height)); - TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = 255; - } - - for (int i = 0; i < stバー情報[currentSong].n曲レベル.Length; i++) - { - int pos = i % 3; - if (stバー情報[currentSong].n曲レベル.Length > 3) - { - TJAPlayer3.Tx.Dani_Level_Number.Opacity = getOpacity(i, sections_count); - } - this.tLevelNumberDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Level_Number_X[pos], TJAPlayer3.Skin.DaniSelect_Level_Number_Y[pos], stバー情報[currentSong].n曲レベル[i]); - TJAPlayer3.Tx.Dani_Level_Number.Opacity = 255; - } - - - #endregion - - #region [Check if one of the EXAM5,6,7 slots are used] - - for (int j = 4; j < CExamInfo.cMaxExam; j++) - { - if (stバー情報[currentSong].List_DanSongs[0].Dan_C[j] != null) - { - over4 = true; - break; - } - } - - #endregion - - #region [Display dan conditions] - - for (int j = 1; j < CExamInfo.cMaxExam; j++) //段位条件のループ(魂ゲージを除く) 縦(y) - { - // Inner index within the exam 3-set - int index = (j - 1) % 3; - - #region [Alter opacity if multi-screen exam display] - - int opacity = 255; - - if (over4 == true) - { - int half = (j - 1) / 3; - - int animJauge = ctExamConditionsAnim.n現在の値; - - if (half == 0) + case C曲リストノード.Eノード種別.SCORE: { - if (animJauge > 3745) - opacity = animJauge - 3745; - else if (animJauge > 1745) - opacity = 2000 - animJauge; - } - else - { - if (animJauge > 3745) - opacity = 4000 - animJauge; - else if (animJauge > 1745) - opacity = animJauge - 1745; - else - opacity = 0; - } - } + #region [Center bar and Dan plate] - #endregion + int danTick = stバー情報[currentSong].nDanTick; + Color danTickColor = stバー情報[currentSong].cDanTickColor; - #region [Exam value (individual included)] - - for (int i = 0; i < stバー情報[currentSong].List_DanSongs.Count; i++) //曲ごとのループ(魂ゲージを除く) 横(x) - { - if (stバー情報[currentSong].List_DanSongs[i].Dan_C[j] != null) - { - TJAPlayer3.Tx.Dani_Exam_Number.Opacity = opacity; - - if (stバー情報[currentSong].List_DanSongs[stバー情報[currentSong].List_DanSongs.Count - 1].Dan_C[j] != null) { - //個別の条件がありますよー - - int moveX = TJAPlayer3.Skin.DaniSelect_Exam_Interval[0]; - int moveY = TJAPlayer3.Skin.DaniSelect_Exam_Interval[1]; - int x = TJAPlayer3.Skin.DaniSelect_Exam_Bloc_X[index]; - int y = TJAPlayer3.Skin.DaniSelect_Exam_Bloc_Y[index]; - - int exam_x = TJAPlayer3.Skin.DaniSelect_Exam_X[index]; - int exam_y = TJAPlayer3.Skin.DaniSelect_Exam_Y[index]; - - CTexture tex = null; - switch (stバー情報[currentSong].List_DanSongs.Count) - { - case 1: - tex = TJAPlayer3.Tx.Dani_Bloc[0]; - break; - case 2: - case 3: - tex = TJAPlayer3.Tx.Dani_Bloc[1]; - break; - case 4: - case 5: - case 6: - default: - tex = TJAPlayer3.Tx.Dani_Bloc[3]; - moveX /= 2; - moveY /= 2; - exam_x = TJAPlayer3.Skin.DaniSelect_Exam_X_Ex[index]; - exam_y = TJAPlayer3.Skin.DaniSelect_Exam_Y_Ex[index]; - break; - } - - if (i == 0) - { - if (tex != null) - tex.Opacity = opacity; - tex?.t2D描画(TJAPlayer3.app.Device, - scroll + Anime + x, - y); - } - - if (i < 6) - tExamDraw(scroll + Anime + exam_x + (i * moveX), - exam_y + (i * moveY), - stバー情報[currentSong].List_DanSongs[i].Dan_C[j].Value[0], stバー情報[currentSong].List_DanSongs[i].Dan_C[j].GetExamRange()); - } - else + // Use the given bar center if provided, else use a default one + if (stバー情報[currentSong].txBarCenter != null) { - //全体の条件ですよー + stバー情報[currentSong].txBarCenter.t2D描画(TJAPlayer3.app.Device, scroll + Anime, 0); + } + else + { + int unit = TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Width / 6; + TJAPlayer3.Tx.Dani_DanSides.color4 = C変換.ColorToColor4(danTickColor); - if (i == 0) - { - if (TJAPlayer3.Tx.Dani_Bloc[0] != null) - TJAPlayer3.Tx.Dani_Bloc[0].Opacity = opacity; - TJAPlayer3.Tx.Dani_Bloc[0]?.t2D描画(TJAPlayer3.app.Device, - scroll + Anime + TJAPlayer3.Skin.DaniSelect_Exam_Bloc_X[index], - TJAPlayer3.Skin.DaniSelect_Exam_Bloc_Y[index]); - } + TJAPlayer3.Tx.Dani_Bar_Center.t2D描画(TJAPlayer3.app.Device, scroll + Anime, 0); - tExamDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Exam_X[index], TJAPlayer3.Skin.DaniSelect_Exam_Y[index], stバー情報[currentSong].List_DanSongs[0].Dan_C[j].Value[0], stバー情報[currentSong].List_DanSongs[0].Dan_C[j].GetExamRange()); + // Bar sides + TJAPlayer3.Tx.Dani_DanSides.t2D描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanSides_X[0], TJAPlayer3.Skin.DaniSelect_DanSides_Y[0], new Rectangle( + unit * danTick, + 0, + unit, + TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Height + )); + TJAPlayer3.Tx.Dani_DanSides.t2D左右反転描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanSides_X[1], TJAPlayer3.Skin.DaniSelect_DanSides_Y[1], new Rectangle( + unit * danTick, + 0, + unit, + TJAPlayer3.Tx.Dani_DanSides.szテクスチャサイズ.Height + )); } - TJAPlayer3.Tx.Dani_Exam_Number.Opacity = 255; + CActSelect段位リスト.tDisplayDanPlate(stバー情報[currentSong].txDanPlate, stバー情報[currentSong], (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_DanPlate[0], TJAPlayer3.Skin.DaniSelect_DanPlate[1]); + + #endregion + + #region [Goukaku plate] + + int currentRank = Math.Min(stバー情報[currentSong].clearGrade, 6) - 1; + + if (currentRank >= 0) + { + TJAPlayer3.Tx.DanResult_Rank.vc拡大縮小倍率.X = 0.8f; + TJAPlayer3.Tx.DanResult_Rank.vc拡大縮小倍率.Y = 0.8f; + + int rank_width = TJAPlayer3.Tx.DanResult_Rank.szテクスチャサイズ.Width / 7; + int rank_height = TJAPlayer3.Tx.DanResult_Rank.szテクスチャサイズ.Height; + + TJAPlayer3.Tx.DanResult_Rank.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Rank[0], TJAPlayer3.Skin.DaniSelect_Rank[1], new Rectangle(rank_width * (currentRank + 1), 0, rank_width, rank_height)); + } + + #endregion + + #region [Soul gauge condition] + + TJAPlayer3.Tx.Dani_Bloc[2]?.t2D描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Bloc2[0], TJAPlayer3.Skin.DaniSelect_Bloc2[1]); + + if (stバー情報[currentSong].List_DanSongs[0].Dan_C[0] != null) + tSoulDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Value_Gauge[0], TJAPlayer3.Skin.DaniSelect_Value_Gauge[1], stバー情報[currentSong].List_DanSongs[0].Dan_C[0].Value[0]); + + //TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[0]).t2D下中央基準描画(TJAPlayer3.app.Device, (int)(scroll + 396 + Anime), 452); + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[0]).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_Text_Gauge[0], TJAPlayer3.Skin.DaniSelect_Text_Gauge[1]); + + #endregion + + #region [Song information] + + int getOpacity(int index, int sections = 2) + { + int current_section = index / 3; + int animJauge = ctExamConditionsAnim.n現在の値; + int split = 4000 / sections; + int begin = split * current_section; + int end = split * (current_section + 1); + if (animJauge < begin || animJauge > end) return 0; + + double sinus = Math.Abs(Math.Sin(animJauge * Math.PI / split)); + + if (sinus == 0) return 0; + return (int)(Math.Abs(Math.Pow(sinus, 1.2) / sinus) * 255); + + /* + int opacity = 255; + int half = index / 3; + + + + if (half == 0) + { + if (animJauge > 3745) + opacity = animJauge - 3745; + else if (animJauge > 1745) + opacity = 2000 - animJauge; + } + else + { + if (animJauge > 3745) + opacity = 4000 - animJauge; + else if (animJauge > 1745) + opacity = animJauge - 1745; + else + opacity = 0; + } + + return opacity; + */ + } + + int difficulty_cymbol_width = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Width / 5; + int difficulty_cymbol_height = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Height; + int sections_count = 1 + ((stバー情報[currentSong].n曲レベル.Length - 1) / 3); + + for (int i = 0; i < stバー情報[currentSong].ttkタイトル.Length - 1; i++) + { + int pos = i % 3; + int opacity = 255; + if (stバー情報[currentSong].ttkタイトル.Length - 1 > 3) + { + opacity = getOpacity(i, sections_count); + } + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).Opacity = opacity; + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).t2D描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Title_X[pos], TJAPlayer3.Skin.DaniSelect_Title_Y[pos]); + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(stバー情報[currentSong].ttkタイトル[i]).Opacity = 255; + + tDisplayDanIcon(i + 1, scroll + Anime + TJAPlayer3.Skin.DaniSelect_DanIcon_X[pos], TJAPlayer3.Skin.DaniSelect_DanIcon_Y[pos], opacity, 1.0f); + } + + for (int i = 0; i < stバー情報[currentSong].n曲難易度.Length; i++) + { + int pos = i % 3; + if (stバー情報[currentSong].n曲難易度.Length > 3) + { + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = getOpacity(i, sections_count); + } + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.t2D中心基準描画(TJAPlayer3.app.Device, scroll + Anime + TJAPlayer3.Skin.DaniSelect_Difficulty_Cymbol_X[pos], TJAPlayer3.Skin.DaniSelect_Difficulty_Cymbol_Y[pos], new Rectangle(stバー情報[currentSong].n曲難易度[i] * difficulty_cymbol_width, 0, difficulty_cymbol_width, difficulty_cymbol_height)); + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = 255; + } + + for (int i = 0; i < stバー情報[currentSong].n曲レベル.Length; i++) + { + int pos = i % 3; + if (stバー情報[currentSong].n曲レベル.Length > 3) + { + TJAPlayer3.Tx.Dani_Level_Number.Opacity = getOpacity(i, sections_count); + } + this.tLevelNumberDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Level_Number_X[pos], TJAPlayer3.Skin.DaniSelect_Level_Number_Y[pos], stバー情報[currentSong].n曲レベル[i]); + TJAPlayer3.Tx.Dani_Level_Number.Opacity = 255; + } + + + #endregion + + #region [Check if one of the EXAM5,6,7 slots are used] + + for (int j = 4; j < CExamInfo.cMaxExam; j++) + { + if (stバー情報[currentSong].List_DanSongs[0].Dan_C[j] != null) + { + over4 = true; + break; + } + } + + #endregion + + #region [Display dan conditions] + + for (int j = 1; j < CExamInfo.cMaxExam; j++) //段位条件のループ(魂ゲージを除く) 縦(y) + { + // Inner index within the exam 3-set + int index = (j - 1) % 3; + + #region [Alter opacity if multi-screen exam display] + + int opacity = 255; + + if (over4 == true) + { + int half = (j - 1) / 3; + + int animJauge = ctExamConditionsAnim.n現在の値; + + if (half == 0) + { + if (animJauge > 3745) + opacity = animJauge - 3745; + else if (animJauge > 1745) + opacity = 2000 - animJauge; + } + else + { + if (animJauge > 3745) + opacity = 4000 - animJauge; + else if (animJauge > 1745) + opacity = animJauge - 1745; + else + opacity = 0; + } + } + + #endregion + + #region [Exam value (individual included)] + + for (int i = 0; i < stバー情報[currentSong].List_DanSongs.Count; i++) //曲ごとのループ(魂ゲージを除く) 横(x) + { + if (stバー情報[currentSong].List_DanSongs[i].Dan_C[j] != null) + { + TJAPlayer3.Tx.Dani_Exam_Number.Opacity = opacity; + + if (stバー情報[currentSong].List_DanSongs[stバー情報[currentSong].List_DanSongs.Count - 1].Dan_C[j] != null) + { + //個別の条件がありますよー + + int moveX = TJAPlayer3.Skin.DaniSelect_Exam_Interval[0]; + int moveY = TJAPlayer3.Skin.DaniSelect_Exam_Interval[1]; + int x = TJAPlayer3.Skin.DaniSelect_Exam_Bloc_X[index]; + int y = TJAPlayer3.Skin.DaniSelect_Exam_Bloc_Y[index]; + + int exam_x = TJAPlayer3.Skin.DaniSelect_Exam_X[index]; + int exam_y = TJAPlayer3.Skin.DaniSelect_Exam_Y[index]; + + CTexture tex = null; + switch (stバー情報[currentSong].List_DanSongs.Count) + { + case 1: + tex = TJAPlayer3.Tx.Dani_Bloc[0]; + break; + case 2: + case 3: + tex = TJAPlayer3.Tx.Dani_Bloc[1]; + break; + case 4: + case 5: + case 6: + default: + tex = TJAPlayer3.Tx.Dani_Bloc[3]; + moveX /= 2; + moveY /= 2; + exam_x = TJAPlayer3.Skin.DaniSelect_Exam_X_Ex[index]; + exam_y = TJAPlayer3.Skin.DaniSelect_Exam_Y_Ex[index]; + break; + } + + if (i == 0) + { + if (tex != null) + tex.Opacity = opacity; + tex?.t2D描画(TJAPlayer3.app.Device, + scroll + Anime + x, + y); + } + + if (i < 6) + tExamDraw(scroll + Anime + exam_x + (i * moveX), + exam_y + (i * moveY), + stバー情報[currentSong].List_DanSongs[i].Dan_C[j].Value[0], stバー情報[currentSong].List_DanSongs[i].Dan_C[j].GetExamRange()); + } + else + { + //全体の条件ですよー + + if (i == 0) + { + if (TJAPlayer3.Tx.Dani_Bloc[0] != null) + TJAPlayer3.Tx.Dani_Bloc[0].Opacity = opacity; + TJAPlayer3.Tx.Dani_Bloc[0]?.t2D描画(TJAPlayer3.app.Device, + scroll + Anime + TJAPlayer3.Skin.DaniSelect_Exam_Bloc_X[index], + TJAPlayer3.Skin.DaniSelect_Exam_Bloc_Y[index]); + } + + tExamDraw(scroll + Anime + TJAPlayer3.Skin.DaniSelect_Exam_X[index], TJAPlayer3.Skin.DaniSelect_Exam_Y[index], stバー情報[currentSong].List_DanSongs[0].Dan_C[j].Value[0], stバー情報[currentSong].List_DanSongs[0].Dan_C[j].GetExamRange()); + + } + + TJAPlayer3.Tx.Dani_Exam_Number.Opacity = 255; + } + } + + #endregion + + #region [Exam title] + + if (stバー情報[currentSong].List_DanSongs[0].Dan_C[j] != null) + { + CTexture tmpTex = TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[(int)stバー情報[currentSong].List_DanSongs[0].Dan_C[j].GetExamType()]); + + tmpTex.Opacity = opacity; + //tmpTex.t2D下中央基準描画(TJAPlayer3.app.Device, (int)(scroll + 614 + Anime), 452 + index * 88); + + tmpTex.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_Exam_Title_X[index], TJAPlayer3.Skin.DaniSelect_Exam_Title_Y[index]); + } + + #endregion + } + + #endregion } - } - - #endregion - - #region [Exam title] - - if (stバー情報[currentSong].List_DanSongs[0].Dan_C[j] != null) - { - CTexture tmpTex = TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[(int)stバー情報[currentSong].List_DanSongs[0].Dan_C[j].GetExamType()]); - - tmpTex.Opacity = opacity; - //tmpTex.t2D下中央基準描画(TJAPlayer3.app.Device, (int)(scroll + 614 + Anime), 452 + index * 88); - - tmpTex.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, (int)(scroll + Anime) + TJAPlayer3.Skin.DaniSelect_Exam_Title_X[index], TJAPlayer3.Skin.DaniSelect_Exam_Title_Y[index]); - } - - #endregion + break; } - - #endregion - + } + + public void tOpenFolder(C曲リストノード song) + { + listSongs = song.list子リスト; + n現在の選択行 = 0; + tUpdateSongs(); + } + + public void tCloseFolder(C曲リストノード song) + { + listSongs = song.r親ノード.r親ノード.list子リスト; + n現在の選択行 = 0; + tUpdateSongs(); + } + + private void tUpdateSongs() + { + stバー情報 = new STバー情報[listSongs.Count]; + this.tバーの初期化(); } private void tバーの初期化() { for (int i = 0; i < stバー情報.Length; i++) { - var song = TJAPlayer3.Songs管理.list曲ルート_Dan[i]; - - stバー情報[i].ttkタイトル = new TitleTextureKey[TJAPlayer3.Songs管理.list曲ルート_Dan[i].DanSongs.Count + 1]; - stバー情報[i].n曲難易度 = new int[TJAPlayer3.Songs管理.list曲ルート_Dan[i].DanSongs.Count]; - stバー情報[i].n曲レベル = new int[TJAPlayer3.Songs管理.list曲ルート_Dan[i].DanSongs.Count]; - for (int j = 0; j < TJAPlayer3.Songs管理.list曲ルート_Dan[i].DanSongs.Count; j++) - { - stバー情報[i].ttkタイトル[j] = new TitleTextureKey(song.DanSongs[j].bTitleShow ? "???" : song.DanSongs[j].Title, pfDanSong, Color.White, Color.Black, 700); - stバー情報[i].n曲難易度[j] = song.DanSongs[j].Difficulty; - stバー情報[i].n曲レベル[j] = song.DanSongs[j].Level; - stバー情報[i].List_DanSongs = song.DanSongs; - } + var song = listSongs[i]; - // Two char header, will be used for grade unlocking too - string tmp = song.strタイトル.Substring(0, 2); + stバー情報[i].eノード種別 = song.eノード種別; + switch (song.eノード種別) + { + case C曲リストノード.Eノード種別.SCORE: + { + stバー情報[i].ttkタイトル = new TitleTextureKey[listSongs[i].DanSongs.Count + 1]; + stバー情報[i].n曲難易度 = new int[listSongs[i].DanSongs.Count]; + stバー情報[i].n曲レベル = new int[listSongs[i].DanSongs.Count]; + for (int j = 0; j < listSongs[i].DanSongs.Count; j++) + { + stバー情報[i].ttkタイトル[j] = new TitleTextureKey(song.DanSongs[j].bTitleShow ? "???" : song.DanSongs[j].Title, pfDanSong, Color.White, Color.Black, 700); + stバー情報[i].n曲難易度[j] = song.DanSongs[j].Difficulty; + stバー情報[i].n曲レベル[j] = song.DanSongs[j].Level; + stバー情報[i].List_DanSongs = song.DanSongs; + } + + // Two char header, will be used for grade unlocking too + string tmp = song.strタイトル.Substring(0, 2); + + stバー情報[i].ttkタイトル[listSongs[i].DanSongs.Count] = new TitleTextureKey(tmp, pfDanSong, Color.Black, Color.Transparent, 700); + + stバー情報[i].nDanTick = song.arスコア[6].譜面情報.nDanTick; + stバー情報[i].cDanTickColor = song.arスコア[6].譜面情報.cDanTickColor; + + //stバー情報[i].clearGrade = song.arスコア[6].譜面情報.nクリア[0]; + stバー情報[i].clearGrade = song.arスコア[6].GPInfo[TJAPlayer3.SaveFile].nClear[0]; + + string barCenter = Path.GetDirectoryName(song.arスコア[6].ファイル情報.ファイルの絶対パス) + @"\Bar_Center.png"; + if (BarTexCache.TryGetValue(barCenter, out CTexture texture1)) + { + stバー情報[i].txBarCenter = texture1; + } + else + { + stバー情報[i].txBarCenter = TJAPlayer3.tテクスチャの生成(barCenter); + BarTexCache.Add(barCenter, stバー情報[i].txBarCenter); + } + + string danPlate = Path.GetDirectoryName(song.arスコア[6].ファイル情報.ファイルの絶対パス) + @"\Dan_Plate.png"; + if (BarTexCache.TryGetValue(danPlate, out CTexture texture2)) + { + stバー情報[i].txDanPlate = texture2; + } + else + { + stバー情報[i].txDanPlate = TJAPlayer3.tテクスチャの生成(danPlate); + BarTexCache.Add(danPlate, stバー情報[i].txDanPlate); + } + } + break; + case C曲リストノード.Eノード種別.BOX: + { + stバー情報[i].ttkタイトル = new TitleTextureKey[1]; + stバー情報[i].ttkタイトル[0] = new TitleTextureKey(song.strタイトル, pfDanSong, Color.White, Color.Black, 700); + stバー情報[i].cDanTickColor = song.BoxColor; + } + break; + case C曲リストノード.Eノード種別.BACKBOX: + { + stバー情報[i].ttkタイトル = new TitleTextureKey[1]; + stバー情報[i].ttkタイトル[0] = new TitleTextureKey(CLangManager.LangInstance.GetString(200), pfDanSong, Color.White, Color.Black, 700); + stバー情報[i].cDanTickColor = Color.FromArgb(180, 150, 70); + } + break; + case C曲リストノード.Eノード種別.RANDOM: + { + stバー情報[i].ttkタイトル = new TitleTextureKey[1]; + stバー情報[i].ttkタイトル[0] = new TitleTextureKey(CLangManager.LangInstance.GetString(203), pfDanSong, Color.White, Color.Black, 700); + stバー情報[i].cDanTickColor = Color.FromArgb(150, 250, 255); + } + break; + } - stバー情報[i].ttkタイトル[TJAPlayer3.Songs管理.list曲ルート_Dan[i].DanSongs.Count] = new TitleTextureKey(tmp, pfDanSong, Color.Black, Color.Transparent, 700); - - stバー情報[i].nDanTick = song.arスコア[6].譜面情報.nDanTick; - stバー情報[i].cDanTickColor = song.arスコア[6].譜面情報.cDanTickColor; - - //stバー情報[i].clearGrade = song.arスコア[6].譜面情報.nクリア[0]; - stバー情報[i].clearGrade = song.arスコア[6].GPInfo[TJAPlayer3.SaveFile].nClear[0]; - - stバー情報[i].txBarCenter = TJAPlayer3.tテクスチャの生成(Path.GetDirectoryName(song.arスコア[6].ファイル情報.ファイルの絶対パス) + @"\Bar_Center.png"); - stバー情報[i].txDanPlate = TJAPlayer3.tテクスチャの生成(Path.GetDirectoryName(song.arスコア[6].ファイル情報.ファイルの絶対パス) + @"\Dan_Plate.png"); } } @@ -741,7 +825,7 @@ namespace TJAPlayer3 } } - public void tLevelNumberDraw(float x, float y, int num) + public void tLevelNumberDraw(float x, float y, int num, float scale = 1.0f) { /* for (int j = 0; j < str.Length; j++) @@ -764,11 +848,15 @@ namespace TJAPlayer3 { float offset = j; - float _x = x - (TJAPlayer3.Skin.DaniSelect_Level_Number_Interval[0] * offset) + (width / 2); - float _y = y - (TJAPlayer3.Skin.DaniSelect_Level_Number_Interval[1] * offset) - (width / 2); + float _x = x - (((TJAPlayer3.Skin.DaniSelect_Level_Number_Interval[0] * offset) + (width / 2)) * scale); + float _y = y - (((TJAPlayer3.Skin.DaniSelect_Level_Number_Interval[1] * offset) - (width / 2)) * scale); + TJAPlayer3.Tx.Dani_Level_Number.vc拡大縮小倍率.X = scale; + TJAPlayer3.Tx.Dani_Level_Number.vc拡大縮小倍率.Y = scale; TJAPlayer3.Tx.Dani_Level_Number.t2D描画(TJAPlayer3.app.Device, _x, _y, new RectangleF(width * nums[j], 0, width, height)); + TJAPlayer3.Tx.Dani_Level_Number.vc拡大縮小倍率.X = 1; + TJAPlayer3.Tx.Dani_Level_Number.vc拡大縮小倍率.Y = 1; } } @@ -812,7 +900,7 @@ namespace TJAPlayer3 } } - public void tExamDraw(float x, float y, int num, Exam.Range Range) + public void tExamDraw(float x, float y, int num, Exam.Range Range, float scale = 1.0f) { /* TJAPlayer3.Tx.Dani_Exam_Number.t2D描画(TJAPlayer3.app.Device, x + 19 * str.Length, y - 24 / 2, new RectangleF(45 * (int)Range, 24, 45, 24)); @@ -838,16 +926,20 @@ namespace TJAPlayer3 float text_width = TJAPlayer3.Skin.DaniSelect_Exam_Number_Text_Width; - TJAPlayer3.Tx.Dani_Exam_Number.t2D描画(TJAPlayer3.app.Device, x + TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[0] + (width / 2), - y + TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[1] - (height / 2), + TJAPlayer3.Tx.Dani_Exam_Number.vc拡大縮小倍率.X = scale; + TJAPlayer3.Tx.Dani_Exam_Number.vc拡大縮小倍率.Y = scale; + + TJAPlayer3.Tx.Dani_Exam_Number.t2D描画(TJAPlayer3.app.Device, + x + ((TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[0] + (width / 2)) * scale), + y + ((TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[1] - (height / 2)) * scale), new RectangleF(text_width * (int)Range, height, text_width, height)); for (int j = 0; j < nums.Length; j++) { float offset = j; - float _x = x - (TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[0] * offset) + (width / 2); - float _y = y - (TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[1] * offset) - (height / 2); + float _x = x - (((TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[0] * offset) + (width / 2)) * scale); + float _y = y - (((TJAPlayer3.Skin.DaniSelect_Exam_Number_Interval[1] * offset) - (height / 2)) * scale); TJAPlayer3.Tx.Dani_Exam_Number.t2D描画(TJAPlayer3.app.Device, _x, _y, new RectangleF(width * nums[j], 0, width, height)); diff --git a/TJAPlayer3/Stages/05.DaniSelect/CStage段位選択.cs b/TJAPlayer3/Stages/05.DaniSelect/CStage段位選択.cs index 91a99560..1e8c9e40 100644 --- a/TJAPlayer3/Stages/05.DaniSelect/CStage段位選択.cs +++ b/TJAPlayer3/Stages/05.DaniSelect/CStage段位選択.cs @@ -6,7 +6,8 @@ using System.Threading.Tasks; using System.Drawing; using FDK; using static TJAPlayer3.CActSelect曲リスト; - +using System.Diagnostics; + namespace TJAPlayer3 { class CStage段位選択 : CStage @@ -178,6 +179,16 @@ namespace TJAPlayer3 if (!this.段位リスト.bスクロール中 && !b選択した && !bDifficultyIn) { + int returnTitle() + { + TJAPlayer3.Skin.soundDanSelectBGM.t停止する(); + TJAPlayer3.Skin.sound取消音.t再生する(); + this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る; + this.actFOtoTitle.tフェードアウト開始(); + base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; + return 0; + } + if (TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.RightArrow) || TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.RightChange)) { @@ -193,22 +204,44 @@ namespace TJAPlayer3 if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Return) || TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.Decide)) { - //this.t段位を選択する(); - //TJAPlayer3.Skin.soundDanSongSelectCheck.t再生する(); - TJAPlayer3.Skin.voiceMenuDanSelectPrompt[TJAPlayer3.SaveFile]?.t再生する(); - this.bDifficultyIn = true; - this.段位挑戦選択画面.ctBarIn.t開始(0, 255, 1, TJAPlayer3.Timer); + switch(段位リスト.currentBar.eノード種別) + { + case C曲リストノード.Eノード種別.SCORE: + case C曲リストノード.Eノード種別.RANDOM: + { + //this.t段位を選択する(); + //TJAPlayer3.Skin.soundDanSongSelectCheck.t再生する(); + TJAPlayer3.Skin.voiceMenuDanSelectPrompt[TJAPlayer3.SaveFile]?.t再生する(); + this.bDifficultyIn = true; + this.段位挑戦選択画面.ctBarIn.t開始(0, 255, 1, TJAPlayer3.Timer); + } + break; + case C曲リストノード.Eノード種別.BOX: + { + TJAPlayer3.Skin.sound決定音.t再生する(); + 段位リスト.tOpenFolder(段位リスト.currentBar); + } + break; + case C曲リストノード.Eノード種別.BACKBOX: + { + if (TJAPlayer3.Songs管理.list曲ルート.Contains(段位リスト.currentBar.r親ノード) && 段位リスト.currentBar.r親ノード.strジャンル == "段位道場") + { + return returnTitle(); + } + else + { + TJAPlayer3.Skin.sound決定音.t再生する(); + 段位リスト.tCloseFolder(段位リスト.currentBar); + } + } + break; + } } if(TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Escape) || TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.Cancel)) { - TJAPlayer3.Skin.soundDanSelectBGM.t停止する(); - TJAPlayer3.Skin.sound取消音.t再生する(); - this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る; - this.actFOtoTitle.tフェードアウト開始(); - base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; - return 0; + return returnTitle(); } } @@ -257,7 +290,19 @@ namespace TJAPlayer3 if (ct待機.n現在の値 >= 3000) { - TJAPlayer3.stage段位選択.t段位を選択する(); + if (段位リスト.currentBar.eノード種別 == C曲リストノード.Eノード種別.RANDOM) + { + if (!tSelectSongRandomly()) + { + bDifficultyIn = false; + b選択した = false; + TJAPlayer3.Skin.soundError.t再生する(); + } + } + else + { + TJAPlayer3.stage段位選択.t段位を選択する(); + } ct待機.n現在の値 = 0; ct待機.t停止(); } @@ -293,10 +338,10 @@ namespace TJAPlayer3 public void t段位を選択する() { this.b選択した = true; - TJAPlayer3.stage選曲.r確定された曲 = TJAPlayer3.Songs管理.list曲ルート_Dan[段位リスト.n現在の選択行]; - TJAPlayer3.stage選曲.r確定されたスコア = TJAPlayer3.Songs管理.list曲ルート_Dan[段位リスト.n現在の選択行].arスコア[(int)Difficulty.Dan]; + TJAPlayer3.stage選曲.r確定された曲 = 段位リスト.listSongs[段位リスト.n現在の選択行]; + TJAPlayer3.stage選曲.r確定されたスコア = 段位リスト.listSongs[段位リスト.n現在の選択行].arスコア[(int)Difficulty.Dan]; TJAPlayer3.stage選曲.n確定された曲の難易度[0] = (int)Difficulty.Dan; - TJAPlayer3.stage選曲.str確定された曲のジャンル = TJAPlayer3.Songs管理.list曲ルート_Dan[段位リスト.n現在の選択行].strジャンル; + TJAPlayer3.stage選曲.str確定された曲のジャンル = 段位リスト.listSongs[段位リスト.n現在の選択行].strジャンル; if ((TJAPlayer3.stage選曲.r確定された曲 != null) && (TJAPlayer3.stage選曲.r確定されたスコア != null)) { this.eフェードアウト完了時の戻り値 = E戻り値.選曲した; @@ -305,6 +350,99 @@ namespace TJAPlayer3 } // TJAPlayer3.Skin.bgm選曲画面.t停止する(); CSongSelectSongManager.stopSong(); + } + + private bool tSelectSongRandomly() + { + this.b選択した = true; + var mandatoryDiffs = new List(); + C曲リストノード song = 段位リスト.currentBar; + + song.stackランダム演奏番号.Clear(); + song.listランダム用ノードリスト = null; + + if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ノードリスト == null)) + { + if (song.listランダム用ノードリスト == null) + { + List songs = new List(); + TJAPlayer3.stage選曲.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.r親ノード, ref songs, ref mandatoryDiffs, true); + song.listランダム用ノードリスト = songs; + } + int count = song.listランダム用ノードリスト.Count; + if (count == 0) + { + return false; + } + int[] numArray = new int[count]; + for (int i = 0; i < count; i++) + { + numArray[i] = i; + } + for (int j = 0; j < (count * 1.5); j++) + { + int index = TJAPlayer3.Random.Next(count); + int num5 = TJAPlayer3.Random.Next(count); + int num6 = numArray[num5]; + numArray[num5] = numArray[index]; + numArray[index] = num6; + } + for (int k = 0; k < count; k++) + { + song.stackランダム演奏番号.Push(numArray[k]); + } + + if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) + { + StringBuilder builder = new StringBuilder(0x400); + builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count)); + for (int m = 0; m < count; m++) + { + builder.Append(string.Format("{0} ", numArray[m])); + } + Trace.TraceInformation(builder.ToString()); + } + } + + // Third assignment + TJAPlayer3.stage選曲.r確定された曲 = song.listランダム用ノードリスト[song.stackランダム演奏番号.Pop()]; + TJAPlayer3.stage選曲.n確定された曲の難易度[0] = (int)Difficulty.Dan; + + TJAPlayer3.stage選曲.r確定されたスコア = TJAPlayer3.stage選曲.r確定された曲.arスコア[TJAPlayer3.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(TJAPlayer3.stage選曲.r確定された曲)]; + TJAPlayer3.stage選曲.str確定された曲のジャンル = TJAPlayer3.stage選曲.r確定された曲.strジャンル; + + //TJAPlayer3.Skin.sound曲決定音.t再生する(); + + this.eフェードアウト完了時の戻り値 = E戻り値.選曲した; + this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略 + base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト; + + #region [Log] + + if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) + { + int[] numArray2 = song.stackランダム演奏番号.ToArray(); + StringBuilder builder2 = new StringBuilder(0x400); + builder2.Append("ランダムインデックスリスト残り: "); + if (numArray2.Length > 0) + { + for (int n = 0; n < numArray2.Length; n++) + { + builder2.Append(string.Format("{0} ", numArray2[n])); + } + } + else + { + builder2.Append("(なし)"); + } + Trace.TraceInformation(builder2.ToString()); + } + + #endregion + + CSongSelectSongManager.stopSong(); + + return true; } private ScriptBG Background; diff --git a/TJAPlayer3/Stages/05.SongSelect/CActSelectDanInfo.cs b/TJAPlayer3/Stages/05.SongSelect/CActSelectDanInfo.cs new file mode 100644 index 00000000..405277ea --- /dev/null +++ b/TJAPlayer3/Stages/05.SongSelect/CActSelectDanInfo.cs @@ -0,0 +1,217 @@ +using FDK; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// Minimalist menu class to use for custom menus +namespace TJAPlayer3 +{ + class CActSelectDanInfo : CStage + { + public CActSelectDanInfo() + { + base.b活性化してない = true; + } + + public override void On活性化() + { + // On activation + + if (base.b活性化してる) + return; + + ctStep = new CCounter(0, 1000, 2, TJAPlayer3.Timer); + ctStepFade = new CCounter(0, 255, 0.5, TJAPlayer3.Timer); + + base.On活性化(); + } + + public override void On非活性化() + { + // On de-activation + + base.On非活性化(); + } + + public override void OnManagedリソースの作成() + { + // Ressource allocation + + if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) + pfTitleFont = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.SongSelect_DanInfo_Title_Size); + else + pfTitleFont = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.SongSelect_DanInfo_Title_Size); + + if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) + pfExamFont = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Size); + else + pfExamFont = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Size); + + ttkExams = new CActSelect曲リスト.TitleTextureKey[(int)Exam.Type.Total]; + for (int i = 0; i < ttkExams.Length; i++) + { + ttkExams[i] = new CActSelect曲リスト.TitleTextureKey(CLangManager.LangInstance.GetString(1010 + i), pfExamFont, Color.Black, Color.Transparent, 700); + } + + base.OnManagedリソースの作成(); + } + + public override void OnManagedリソースの解放() + { + // Ressource freeing + + TJAPlayer3.t安全にDisposeする(ref pfTitleFont); + TJAPlayer3.t安全にDisposeする(ref pfExamFont); + + base.OnManagedリソースの解放(); + } + + public override int On進行描画() + { + ctStep.t進行(); + ctStepFade.t進行(); + if (ctStep.n現在の値 == ctStep.n終了値) + { + ctStep = new CCounter(0, 1000, 2, TJAPlayer3.Timer); + tNextStep(); + } + + if (TJAPlayer3.Skin.SongSelect_DanInfo_Show) + { + for(int i = 0; i < TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count; i++) + { + var dan = TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[i]; + int songIndex = i / 3; + int opacity = 255; + if (TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count > 3) + { + if (nNowSongIndex == songIndex) + { + opacity = ctStepFade.n現在の値; + } + else if (nPrevSongIndex == songIndex) + { + opacity = 255 - ctStepFade.n現在の値; + } + else + { + opacity = 0; + } + } + + int pos = i % 3; + CActSelect段位リスト.tDisplayDanIcon(i + 1, TJAPlayer3.Skin.SongSelect_DanInfo_Icon_X[pos], TJAPlayer3.Skin.SongSelect_DanInfo_Icon_Y[pos], opacity, TJAPlayer3.Skin.SongSelect_DanInfo_Icon_Scale, false); + + int difficulty_cymbol_width = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Width / 5; + int difficulty_cymbol_height = TJAPlayer3.Tx.Dani_Difficulty_Cymbol.szテクスチャサイズ.Height; + + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = opacity; + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.vc拡大縮小倍率.X = TJAPlayer3.Skin.SongSelect_DanInfo_Difficulty_Cymbol_Scale; + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.vc拡大縮小倍率.Y = TJAPlayer3.Skin.SongSelect_DanInfo_Difficulty_Cymbol_Scale; + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_DanInfo_Difficulty_Cymbol_X[pos], TJAPlayer3.Skin.SongSelect_DanInfo_Difficulty_Cymbol_Y[pos], new Rectangle(dan.Difficulty * difficulty_cymbol_width, 0, difficulty_cymbol_width, difficulty_cymbol_height)); + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.Opacity = 255; + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.vc拡大縮小倍率.X = 1; + TJAPlayer3.Tx.Dani_Difficulty_Cymbol.vc拡大縮小倍率.Y = 1; + + TJAPlayer3.Tx.Dani_Level_Number.Opacity = opacity; + TJAPlayer3.stage段位選択.段位リスト.tLevelNumberDraw(TJAPlayer3.Skin.SongSelect_DanInfo_Level_Number_X[pos], TJAPlayer3.Skin.SongSelect_DanInfo_Level_Number_Y[pos], dan.Level, TJAPlayer3.Skin.SongSelect_DanInfo_Level_Number_Scale); + TJAPlayer3.Tx.Dani_Level_Number.Opacity = 255; + + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(ttkTitles[i]).Opacity = opacity; + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(ttkTitles[i]).t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_DanInfo_Title_X[pos], TJAPlayer3.Skin.SongSelect_DanInfo_Title_Y[pos]); + + + } + + for (int j = 0; j < CExamInfo.cMaxExam; j++) + { + int index = j; + Dan_C danc0 = TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[0].Dan_C[j]; + + if (danc0 != null) + { + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(this.ttkExams[(int)danc0.GetExamType()]).t2D中心基準描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_DanInfo_Exam_X[index], TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Y[index]); + } + + if (TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count - 1].Dan_C[j] == null) + { + Dan_C danc = TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[0].Dan_C[j]; + if (danc != null) + { + TJAPlayer3.stage段位選択.段位リスト.tExamDraw(TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_X[0], TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_Y[index], danc.Value[0], danc.GetExamRange(), TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_Scale); + } + } + else + { + for (int i = 0; i < TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count; i++) + { + Dan_C danc = TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[i].Dan_C[j]; + if (danc != null) + { + int opacity = 255; + if (TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count > 3) + { + if (nNowSongIndex == i / 3) + { + opacity = ctStepFade.n現在の値; + } + else if (nPrevSongIndex == i / 3) + { + opacity = 255 - ctStepFade.n現在の値; + } + else + { + opacity = 0; + } + } + + TJAPlayer3.Tx.Dani_Exam_Number.Opacity = opacity; + TJAPlayer3.stage段位選択.段位リスト.tExamDraw(TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_X[i % 3], TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_Y[index], danc.Value[0], danc.GetExamRange(), TJAPlayer3.Skin.SongSelect_DanInfo_Exam_Value_Scale); + TJAPlayer3.Tx.Dani_Exam_Number.Opacity = 255; + } + } + } + } + } + + return 0; + } + + public void UpdateSong() + { + if (TJAPlayer3.stage選曲.r現在選択中の曲 == null || TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs == null) return; + + ttkTitles = new CActSelect曲リスト.TitleTextureKey[TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count]; + for (int i = 0; i < TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count; i++) + { + var dan = TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs[i]; + ttkTitles[i] = new CActSelect曲リスト.TitleTextureKey(dan.Title, pfTitleFont, Color.Black, Color.Transparent, 700); + } + } + + #region [Private] + + private CActSelect曲リスト.TitleTextureKey[] ttkTitles; + private CActSelect曲リスト.TitleTextureKey[] ttkExams; + private CPrivateFastFont pfTitleFont; + private CPrivateFastFont pfExamFont; + + private CCounter ctStep; + private CCounter ctStepFade; + + private int nPrevSongIndex; + private int nNowSongIndex; + + private void tNextStep() + { + nPrevSongIndex = nNowSongIndex; + nNowSongIndex = (nNowSongIndex + 1) % (int)Math.Ceiling(TJAPlayer3.stage選曲.r現在選択中の曲.DanSongs.Count / 3.0); + ctStepFade = new CCounter(0, 255, 1, TJAPlayer3.Timer); + } + + #endregion + } +} diff --git a/TJAPlayer3/Stages/05.SongSelect/CActSelectSongInfo.cs b/TJAPlayer3/Stages/05.SongSelect/CActSelectSongInfo.cs new file mode 100644 index 00000000..49f0fd5e --- /dev/null +++ b/TJAPlayer3/Stages/05.SongSelect/CActSelectSongInfo.cs @@ -0,0 +1,106 @@ +using FDK; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// Minimalist menu class to use for custom menus +namespace TJAPlayer3 +{ + class CActSelectSongInfo : CStage + { + public CActSelectSongInfo() + { + base.b活性化してない = true; + } + + public override void On活性化() + { + // On activation + + if (base.b活性化してる) + return; + + + + base.On活性化(); + } + + public override void On非活性化() + { + // On de-activation + + base.On非活性化(); + } + + public override void OnManagedリソースの作成() + { + // Ressource allocation + + base.OnManagedリソースの作成(); + } + + public override void OnManagedリソースの解放() + { + // Ressource freeing + + base.OnManagedリソースの解放(); + } + + public override int On進行描画() + { + if (TJAPlayer3.stage選曲.r現在選択中の曲 != null && TJAPlayer3.stage選曲.r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.SCORE) + { + int[] bpms = new int[3] { + (int)TJAPlayer3.stage選曲.r現在選択中の曲.arスコア[TJAPlayer3.stage選曲.act曲リスト.tFetchDifficulty(TJAPlayer3.stage選曲.r現在選択中の曲)].譜面情報.BaseBpm, + (int)TJAPlayer3.stage選曲.r現在選択中の曲.arスコア[TJAPlayer3.stage選曲.act曲リスト.tFetchDifficulty(TJAPlayer3.stage選曲.r現在選択中の曲)].譜面情報.MinBpm, + (int)TJAPlayer3.stage選曲.r現在選択中の曲.arスコア[TJAPlayer3.stage選曲.act曲リスト.tFetchDifficulty(TJAPlayer3.stage選曲.r現在選択中の曲)].譜面情報.MaxBpm + }; + for (int i = 0; i < 3; i++) + { + tBPMNumberDraw(TJAPlayer3.Skin.SongSelect_Bpm_X[i], TJAPlayer3.Skin.SongSelect_Bpm_Y[i], bpms[i]); + } + + if (TJAPlayer3.stage選曲.act曲リスト.ttkSelectedSongMaker != null && TJAPlayer3.Skin.SongSelect_Maker_Show) + { + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(TJAPlayer3.stage選曲.act曲リスト.ttkSelectedSongMaker).t2D拡大率考慮描画(TJAPlayer3.app.Device, CTexture.RefPnt.Left, TJAPlayer3.Skin.SongSelect_Maker[0], TJAPlayer3.Skin.SongSelect_Maker[1]); + } + if (TJAPlayer3.stage選曲.act曲リスト.ttkSelectedSongBPM != null && TJAPlayer3.Skin.SongSelect_BPM_Text_Show) + { + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(TJAPlayer3.stage選曲.act曲リスト.ttkSelectedSongBPM).t2D拡大率考慮描画(TJAPlayer3.app.Device, CTexture.RefPnt.Left, TJAPlayer3.Skin.SongSelect_BPM_Text[0], TJAPlayer3.Skin.SongSelect_BPM_Text[1]); + } + if (TJAPlayer3.stage選曲.r現在選択中の曲.bExplicit == true) + TJAPlayer3.Tx.SongSelect_Explicit?.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_Explicit[0], TJAPlayer3.Skin.SongSelect_Explicit[1]); + } + + + return 0; + } + + #region [Private] + + private void tBPMNumberDraw(float originx, float originy, int num) + { + int[] nums = C変換.SeparateDigits(num); + + for (int j = 0; j < nums.Length; j++) + { + if (TJAPlayer3.Skin.SongSelect_Bpm_Show && TJAPlayer3.Tx.SongSelect_Bpm_Number != null) + { + float offset = j; + float x = originx - (TJAPlayer3.Skin.SongSelect_Bpm_Interval[0] * offset); + float y = originy - (TJAPlayer3.Skin.SongSelect_Bpm_Interval[1] * offset); + + float width = TJAPlayer3.Tx.SongSelect_Bpm_Number.sz画像サイズ.Width / 10.0f; + float height = TJAPlayer3.Tx.SongSelect_Bpm_Number.sz画像サイズ.Height; + + TJAPlayer3.Tx.SongSelect_Bpm_Number.t2D描画(TJAPlayer3.app.Device, x, y, new RectangleF(width * nums[j], 0, width, height)); + } + } + } + + #endregion + } +} diff --git a/TJAPlayer3/Stages/05.SongSelect/CActSelectTowerInfo.cs b/TJAPlayer3/Stages/05.SongSelect/CActSelectTowerInfo.cs new file mode 100644 index 00000000..d5f3fde3 --- /dev/null +++ b/TJAPlayer3/Stages/05.SongSelect/CActSelectTowerInfo.cs @@ -0,0 +1,83 @@ +using FDK; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// Minimalist menu class to use for custom menus +namespace TJAPlayer3 +{ + class CActSelectTowerInfo : CStage + { + public CActSelectTowerInfo() + { + base.b活性化してない = true; + } + + public override void On活性化() + { + // On activation + + if (base.b活性化してる) + return; + + + + base.On活性化(); + } + + public override void On非活性化() + { + // On de-activation + + base.On非活性化(); + } + + public override void OnManagedリソースの作成() + { + // Ressource allocation + + base.OnManagedリソースの作成(); + } + + public override void OnManagedリソースの解放() + { + // Ressource freeing + + base.OnManagedリソースの解放(); + } + + public override int On進行描画() + { + tFloorNumberDraw(TJAPlayer3.Skin.SongSelect_FloorNum_X, TJAPlayer3.Skin.SongSelect_FloorNum_Y, TJAPlayer3.stage選曲.r現在選択中の曲.nTotalFloor); + + return 0; + } + + #region [Private] + + private void tFloorNumberDraw(float originx, float originy, int num) + { + int[] nums = C変換.SeparateDigits(num); + + for (int j = 0; j < nums.Length; j++) + { + if (TJAPlayer3.Skin.SongSelect_FloorNum_Show && TJAPlayer3.Tx.SongSelect_Floor_Number != null) + { + float offset = j; + float x = originx - (TJAPlayer3.Skin.SongSelect_FloorNum_Interval[0] * offset); + float y = originy - (TJAPlayer3.Skin.SongSelect_FloorNum_Interval[1] * offset); + + float width = TJAPlayer3.Tx.SongSelect_Floor_Number.sz画像サイズ.Width / 10.0f; + float height = TJAPlayer3.Tx.SongSelect_Floor_Number.sz画像サイズ.Height; + + TJAPlayer3.Tx.SongSelect_Floor_Number.t2D描画(TJAPlayer3.app.Device, x, y, new RectangleF(width * nums[j], 0, width, height)); + } + } + } + + #endregion + } +} diff --git a/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs b/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs index d68117ef..3619e85c 100644 --- a/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs +++ b/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs @@ -1877,14 +1877,18 @@ namespace TJAPlayer3 #region [Displayables] - TJAPlayer3.Tx.SongSelect_Frame_Score[1]?.t2D描画(TJAPlayer3.app.Device, 0, 0); + int displayingDiff = diff == 5 ? 0 : 2; + int width = TJAPlayer3.Tx.SongSelect_Frame_Score[0].sz画像サイズ.Width / 5; + int height = TJAPlayer3.Tx.SongSelect_Frame_Score[0].sz画像サイズ.Height; + + TJAPlayer3.Tx.SongSelect_Frame_Score[1].t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_Frame_Score_X[displayingDiff], TJAPlayer3.Skin.SongSelect_Frame_Score_Y[displayingDiff], new Rectangle(width * displayingDiff, 0, width, height)); var _level_number = (diff == 5) ? TJAPlayer3.Skin.SongSelect_Level_Number_Tower : TJAPlayer3.Skin.SongSelect_Level_Number_Tower; if (avaliable) { - t小文字表示(_level_number[0], _level_number[1], + t小文字表示(TJAPlayer3.Skin.SongSelect_Level_Number_X[displayingDiff], TJAPlayer3.Skin.SongSelect_Level_Number_Y[displayingDiff], TJAPlayer3.stage選曲.r現在選択中のスコア.譜面情報.nレベル[diff], diff, TJAPlayer3.stage選曲.r現在選択中のスコア.譜面情報.nLevelIcon[diff] @@ -1913,8 +1917,8 @@ namespace TJAPlayer3 for (int i2 = 0; i2 < TJAPlayer3.stage選曲.r現在選択中のスコア.譜面情報.nレベル[diff]; i2++) { TJAPlayer3.Tx.SongSelect_Level?.t2D描画(TJAPlayer3.app.Device, - TJAPlayer3.Skin.SongSelect_Level_X[(diff - 5)] + (TJAPlayer3.Skin.SongSelect_Level_Move[0] * i2), - TJAPlayer3.Skin.SongSelect_Level_Y[(diff - 5)] + (TJAPlayer3.Skin.SongSelect_Level_Move[1] * i2), + TJAPlayer3.Skin.SongSelect_Level_X[displayingDiff] + (TJAPlayer3.Skin.SongSelect_Level_Move[0] * i2), + TJAPlayer3.Skin.SongSelect_Level_Y[displayingDiff] + (TJAPlayer3.Skin.SongSelect_Level_Move[1] * i2), new RectangleF(level_width * diff, 0, level_width, level_height)); } diff --git a/TJAPlayer3/Stages/05.SongSelect/CStage選曲.cs b/TJAPlayer3/Stages/05.SongSelect/CStage選曲.cs index f1bc1656..3a97d0a7 100644 --- a/TJAPlayer3/Stages/05.SongSelect/CStage選曲.cs +++ b/TJAPlayer3/Stages/05.SongSelect/CStage選曲.cs @@ -198,6 +198,9 @@ namespace TJAPlayer3 //base.list子Activities.Add( this.actFOtoNowLoading = new CActFIFOBlack() ); base.list子Activities.Add(this.actFOtoNowLoading = new CActFIFOStart()); base.list子Activities.Add(this.act曲リスト = new CActSelect曲リスト()); + base.list子Activities.Add(this.actSongInfo = new CActSelectSongInfo()); + base.list子Activities.Add(this.actDanInfo = new CActSelectDanInfo()); + base.list子Activities.Add(this.actTowerInfo = new CActSelectTowerInfo()); base.list子Activities.Add(this.actステータスパネル = new CActSelectステータスパネル()); base.list子Activities.Add(this.act演奏履歴パネル = new CActSelect演奏履歴パネル()); base.list子Activities.Add(this.actPreimageパネル = new CActSelectPreimageパネル()); @@ -270,6 +273,7 @@ namespace TJAPlayer3 this.act演奏履歴パネル.t選択曲が変更された(); this.actステータスパネル.t選択曲が変更された(); this.actArtistComment.t選択曲が変更された(); + actDanInfo.UpdateSong(); #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)] //--------------------- @@ -540,28 +544,28 @@ namespace TJAPlayer3 tTimerDraw(100 - ctTimer.n現在の値); - if (this.r現在選択中の曲 != null && this.r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.SCORE) - { - int[] bpms = new int[3] { - (int)r現在選択中の曲.arスコア[act曲リスト.tFetchDifficulty(r現在選択中の曲)].譜面情報.BaseBpm, - (int)r現在選択中の曲.arスコア[act曲リスト.tFetchDifficulty(r現在選択中の曲)].譜面情報.MinBpm, - (int)r現在選択中の曲.arスコア[act曲リスト.tFetchDifficulty(r現在選択中の曲)].譜面情報.MaxBpm - }; - for (int i = 0; i < 3; i++) - { - tBPMNumberDraw(TJAPlayer3.Skin.SongSelect_Bpm_X[i], TJAPlayer3.Skin.SongSelect_Bpm_Y[i], bpms[i]); - } - if (act曲リスト.ttkSelectedSongMaker != null && TJAPlayer3.Skin.SongSelect_Maker_Show) + if (this.r現在選択中の曲 != null) + { + if (this.r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.BOX) { - act曲リスト.ResolveTitleTexture(act曲リスト.ttkSelectedSongMaker).t2D拡大率考慮描画(TJAPlayer3.app.Device, CTexture.RefPnt.Left, TJAPlayer3.Skin.SongSelect_Maker[0], TJAPlayer3.Skin.SongSelect_Maker[1]); - } - if (act曲リスト.ttkSelectedSongBPM != null && TJAPlayer3.Skin.SongSelect_BPM_Text_Show) + } + else if (this.r現在選択中の曲.eノード種別 == C曲リストノード.Eノード種別.SCORE) { - act曲リスト.ResolveTitleTexture(act曲リスト.ttkSelectedSongBPM).t2D拡大率考慮描画(TJAPlayer3.app.Device, CTexture.RefPnt.Left, TJAPlayer3.Skin.SongSelect_BPM_Text[0], TJAPlayer3.Skin.SongSelect_BPM_Text[1]); - } - if (r現在選択中の曲.bExplicit == true) - TJAPlayer3.Tx.SongSelect_Explicit?.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongSelect_Explicit[0], TJAPlayer3.Skin.SongSelect_Explicit[1]); + actSongInfo.On進行描画(); + + if (TJAPlayer3.stage選曲.n現在選択中の曲の難易度 == (int)Difficulty.Dan) + { + actDanInfo.On進行描画(); + } + else if (TJAPlayer3.stage選曲.n現在選択中の曲の難易度 == (int)Difficulty.Tower) + { + actTowerInfo.On進行描画(); + } + else + { + } + } } tSongNumberDraw(TJAPlayer3.Skin.SongSelect_SongNumber_X[0], TJAPlayer3.Skin.SongSelect_SongNumber_Y[0], NowSong); @@ -1384,6 +1388,9 @@ namespace TJAPlayer3 private CActSelectステータスパネル actステータスパネル; public CActSelect演奏履歴パネル act演奏履歴パネル; public CActSelect曲リスト act曲リスト; + public CActSelectSongInfo actSongInfo; + public CActSelectDanInfo actDanInfo; + public CActSelectTowerInfo actTowerInfo; private CActSelectShowCurrentPosition actShowCurrentPosition; public CActSelect難易度選択画面 act難易度選択画面; public CActPlayOption actPlayOption; @@ -1524,28 +1531,6 @@ namespace TJAPlayer3 TJAPlayer3.Tx.SongSelect_Timer.t2D描画(TJAPlayer3.app.Device, x, y, new RectangleF(width * nums[j], 0, width, height)); } } - } - - private void tBPMNumberDraw(float originx, float originy, int num) - { - //int x = 1171, y = 57; - - int[] nums = C変換.SeparateDigits(num); - - for (int j = 0; j < nums.Length; j++) - { - if (TJAPlayer3.Skin.SongSelect_Bpm_Show && TJAPlayer3.Tx.SongSelect_Bpm_Number != null) - { - float offset = j; - float x = originx - (TJAPlayer3.Skin.SongSelect_Bpm_Interval[0] * offset); - float y = originy - (TJAPlayer3.Skin.SongSelect_Bpm_Interval[1] * offset); - - float width = TJAPlayer3.Tx.SongSelect_Bpm_Number.sz画像サイズ.Width / 10.0f; - float height = TJAPlayer3.Tx.SongSelect_Bpm_Number.sz画像サイズ.Height; - - TJAPlayer3.Tx.SongSelect_Bpm_Number.t2D描画(TJAPlayer3.app.Device, x, y, new RectangleF(width * nums[j], 0, width, height)); - } - } } @@ -2017,7 +2002,7 @@ namespace TJAPlayer3 return list; } - private void t指定された曲の子リストの曲を列挙する_孫リスト含む(C曲リストノード r親, ref List list, ref List mandatory) + public void t指定された曲の子リストの曲を列挙する_孫リスト含む(C曲リストノード r親, ref List list, ref List mandatory, bool dan = false, Difficulty difficulty = Difficulty.Dan) { if ((r親 != null) && (r親.list子リスト != null)) { @@ -2028,7 +2013,7 @@ namespace TJAPlayer3 // Don't add Dan/Tower charts for Random int diff = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(c曲リストノード); - if (diff < (int)Difficulty.Tower) + if (dan ? diff == (int)difficulty : diff < (int)Difficulty.Tower) { // Check if mandatory diffs are present var score = c曲リストノード.arスコア[diff]; @@ -2051,7 +2036,7 @@ namespace TJAPlayer3 } if ((c曲リストノード.list子リスト != null) && TJAPlayer3.ConfigIni.bランダムセレクトで子BOXを検索対象とする) { - this.t指定された曲の子リストの曲を列挙する_孫リスト含む(c曲リストノード, ref list, ref mandatory); + this.t指定された曲の子リストの曲を列挙する_孫リスト含む(c曲リストノード, ref list, ref mandatory, dan, difficulty); } } } diff --git a/TJAPlayer3/Stages/12.OnlineLounge/API.cs b/TJAPlayer3/Stages/12.OnlineLounge/API.cs index 075fe4e3..4429087b 100644 --- a/TJAPlayer3/Stages/12.OnlineLounge/API.cs +++ b/TJAPlayer3/Stages/12.OnlineLounge/API.cs @@ -39,6 +39,9 @@ namespace TJAPlayer3 // Additional public APICharterInfo charter; public APIGenreInfo Genre; + + [JsonIgnore] + public bool DownloadNow; } #region [ContractResolver override for properties] diff --git a/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs b/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs index 06d35122..645cfaba 100644 --- a/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs +++ b/TJAPlayer3/Stages/12.OnlineLounge/CStageOnlineLounge.cs @@ -343,7 +343,7 @@ namespace TJAPlayer3 #region [Input] - if (!IsDownloading) + //if (!IsDownloading) { if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.RightArrow) || TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.RightChange)) @@ -408,20 +408,27 @@ namespace TJAPlayer3 if (currentMenu == ECurrentMenu.MAIN) { - // Base menu - currentMenu = mainMenu[mainMenuIndex]; - if (currentMenu == ECurrentMenu.RETURN) + if (mainMenu[mainMenuIndex] == ECurrentMenu.CDN_SELECT || !IsDownloading) { - // Quit - TJAPlayer3.Skin.sound取消音.t再生する(); - TJAPlayer3.Skin.soundOnlineLoungeBGM?.t停止する(); - this.eフェードアウト完了時の戻り値 = EReturnValue.ReturnToTitle; - this.actFOtoTitle.tフェードアウト開始(); - base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; + // Base menu + currentMenu = mainMenu[mainMenuIndex]; + if (currentMenu == ECurrentMenu.RETURN) + { + // Quit + TJAPlayer3.Skin.sound取消音.t再生する(); + TJAPlayer3.Skin.soundOnlineLoungeBGM?.t停止する(); + this.eフェードアウト完了時の戻り値 = EReturnValue.ReturnToTitle; + this.actFOtoTitle.tフェードアウト開始(); + base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; + } + else + { + TJAPlayer3.Skin.sound決定音.t再生する(); + } } else { - TJAPlayer3.Skin.sound決定音.t再生する(); + TJAPlayer3.Skin.soundError.t再生する(); } } else if (currentMenu == ECurrentMenu.CDN_SELECT) @@ -495,7 +502,7 @@ namespace TJAPlayer3 //var zipPath = $@"Cache\{song.Md5}.zip"; var downloadLink = GetDownloadLink(song); - if (CSongDict.tContainsSongUrl(downloadLink)) + if (CSongDict.tContainsSongUrl(downloadLink) || song.DownloadNow) { TJAPlayer3.Skin.soundError.t再生する(); } @@ -599,6 +606,7 @@ namespace TJAPlayer3 var song = apiMethods.FetchedSongsList[this.cdnSongListIndex - 1]; + song.DownloadNow = true; var zipName = ReplaceInvalidChars($@"{TruncateString(song.SongTitle, 16)}-{TruncateString(song.Md5, 10)}"); var zipPath = $@"Cache\{zipName}.zip"; var downloadLink = GetDownloadLink(song); @@ -711,6 +719,7 @@ namespace TJAPlayer3 } + song.DownloadNow = false; IsDownloading = false; } diff --git a/TJAPlayer3/Stages/13.TowerSelect/CStageTowerSelect.cs b/TJAPlayer3/Stages/13.TowerSelect/CStageTowerSelect.cs new file mode 100644 index 00000000..c1baec8c --- /dev/null +++ b/TJAPlayer3/Stages/13.TowerSelect/CStageTowerSelect.cs @@ -0,0 +1,410 @@ +using FDK; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// Minimalist menu class to use for custom menus +namespace TJAPlayer3 +{ + class CStageTowerSelect : CStage + { + public CStageTowerSelect() + { + base.eステージID = Eステージ.TaikoTowers; + base.eフェーズID = CStage.Eフェーズ.共通_通常状態; + + // Load CActivity objects here + // base.list子Activities.Add(this.act = new CAct()); + + base.list子Activities.Add(this.actFOtoNowLoading = new CActFIFOStart()); + base.list子Activities.Add(this.actFOtoTitle = new CActFIFOBlack()); + + } + + public override void On活性化() + { + // On activation + + if (base.b活性化してる) + return; + + base.eフェーズID = CStage.Eフェーズ.共通_通常状態; + this.eフェードアウト完了時の戻り値 = EReturnValue.Continuation; + + if (listSongs == null) + listSongs = TJAPlayer3.Songs管理.list曲ルート_Tower; + + + base.On活性化(); + } + + public override void On非活性化() + { + // On de-activation + + base.On非活性化(); + } + + public override void OnManagedリソースの作成() + { + // Ressource allocation + + Background = new ScriptBG(CSkin.Path($"{TextureLoader.BASE}{TextureLoader.TOWERSELECT}Script.lua")); + Background.Init(); + + if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) + pfTitleFont = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.TowerSelect_Title_Size); + else + pfTitleFont = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.TowerSelect_Title_Size); + + if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName)) + pfSubTitleFont = new CPrivateFastFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), TJAPlayer3.Skin.TowerSelect_SubTitle_Size); + else + pfSubTitleFont = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.TowerSelect_SubTitle_Size); + tUpdateBarInfos(); + + base.OnManagedリソースの作成(); + } + + public override void OnManagedリソースの解放() + { + // Ressource freeing + + TJAPlayer3.t安全にDisposeする(ref Background); + + pfTitleFont.Dispose(); + pfSubTitleFont.Dispose(); + + base.OnManagedリソースの解放(); + } + + public override int On進行描画() + { + Background.Update(); + Background.Draw(); + + for(int i = 0; i < TJAPlayer3.Skin.TowerSelect_Bar_Count; i++) + { + int currentSong = nCurrentSongIndex + i - ((TJAPlayer3.Skin.TowerSelect_Bar_Count - 1) / 2); + if (currentSong < 0 || currentSong >= BarInfos.Length || currentSong >= TJAPlayer3.Skin.TowerSelect_Bar_Count) continue; + var bar = BarInfos[currentSong]; + + int x = TJAPlayer3.Skin.TowerSelect_Bar_X[i]; + int y = TJAPlayer3.Skin.TowerSelect_Bar_Y[i]; + tDrawTower(x, y, bar); + } + + #region [Input] + + if (this.eフェードアウト完了時の戻り値 == EReturnValue.Continuation) + { + int returnTitle() + { + TJAPlayer3.Skin.sound取消音.t再生する(); + this.eフェードアウト完了時の戻り値 = EReturnValue.ReturnToTitle; + this.actFOtoTitle.tフェードアウト開始(); + base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; + return 0; + } + + if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.RightArrow) || + TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.RightChange)) + { + TJAPlayer3.Skin.sound変更音.t再生する(); + + if (nCurrentSongIndex < BarInfos.Length - 1) + { + nCurrentSongIndex++; + } + } + + else if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.LeftArrow) || + TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.LeftChange)) + { + TJAPlayer3.Skin.sound変更音.t再生する(); + + if (nCurrentSongIndex > 0) + { + nCurrentSongIndex--; + } + } + + else if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Escape) || + TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.Cancel)) + { + + #region [Fast return (Escape)] + + TJAPlayer3.Skin.sound取消音.t再生する(); + returnTitle(); + + #endregion + } + + else if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Return) || + TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.Decide)) + { + #region [Decide] + + TJAPlayer3.Skin.sound決定音.t再生する(); + + switch(currentSong.eノード種別) + { + case C曲リストノード.Eノード種別.SCORE: + tSelectSong(); + break; + case C曲リストノード.Eノード種別.RANDOM: + tSelectSongRandomly(); + break; + case C曲リストノード.Eノード種別.BOX: + tOpenFolder(currentSong); + break; + case C曲リストノード.Eノード種別.BACKBOX: + { + if (TJAPlayer3.Songs管理.list曲ルート.Contains(currentSong.r親ノード) && currentSong.r親ノード.strジャンル == "太鼓タワー") + { + returnTitle(); + } + else + { + tCloseFolder(currentSong); + } + } + break; + } + + #endregion + } + } + + #endregion + + + + // Menu exit fade out transition + switch (base.eフェーズID) + { + case CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト: + if (this.actFOtoNowLoading.On進行描画() == 0) + { + break; + } + return (int)this.eフェードアウト完了時の戻り値; + case CStage.Eフェーズ.共通_フェードアウト: + if (this.actFOtoTitle.On進行描画() == 0) + { + break; + } + return (int)this.eフェードアウト完了時の戻り値; + + } + + return 0; + } + + #region [Private] + + private class BarInfo + { + public string strTitle; + public string strSubTitle; + public C曲リストノード.Eノード種別 eノード種別; + public CActSelect曲リスト.TitleTextureKey ttkTitle; + public CActSelect曲リスト.TitleTextureKey ttkSubTitle; + } + + public void tSelectSong() + { + TJAPlayer3.stage選曲.r確定された曲 = listSongs[nCurrentSongIndex]; + TJAPlayer3.stage選曲.r確定されたスコア = listSongs[nCurrentSongIndex].arスコア[(int)Difficulty.Tower]; + TJAPlayer3.stage選曲.n確定された曲の難易度[0] = (int)Difficulty.Tower; + TJAPlayer3.stage選曲.str確定された曲のジャンル = listSongs[nCurrentSongIndex].strジャンル; + if ((TJAPlayer3.stage選曲.r確定された曲 != null) && (TJAPlayer3.stage選曲.r確定されたスコア != null)) + { + this.eフェードアウト完了時の戻り値 = EReturnValue.SongChoosen; + this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略 + base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト; + } + // TJAPlayer3.Skin.bgm選曲画面.t停止する(); + CSongSelectSongManager.stopSong(); + } + + private bool tSelectSongRandomly() + { + var mandatoryDiffs = new List(); + C曲リストノード song = currentSong; + + song.stackランダム演奏番号.Clear(); + song.listランダム用ノードリスト = null; + + if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ノードリスト == null)) + { + if (song.listランダム用ノードリスト == null) + { + List songs = new List(); + TJAPlayer3.stage選曲.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.r親ノード, ref songs, ref mandatoryDiffs, true, Difficulty.Tower); + song.listランダム用ノードリスト = songs; + } + int count = song.listランダム用ノードリスト.Count; + if (count == 0) + { + return false; + } + int[] numArray = new int[count]; + for (int i = 0; i < count; i++) + { + numArray[i] = i; + } + for (int j = 0; j < (count * 1.5); j++) + { + int index = TJAPlayer3.Random.Next(count); + int num5 = TJAPlayer3.Random.Next(count); + int num6 = numArray[num5]; + numArray[num5] = numArray[index]; + numArray[index] = num6; + } + for (int k = 0; k < count; k++) + { + song.stackランダム演奏番号.Push(numArray[k]); + } + + if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) + { + StringBuilder builder = new StringBuilder(0x400); + builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count)); + for (int m = 0; m < count; m++) + { + builder.Append(string.Format("{0} ", numArray[m])); + } + Trace.TraceInformation(builder.ToString()); + } + } + + // Third assignment + TJAPlayer3.stage選曲.r確定された曲 = song.listランダム用ノードリスト[song.stackランダム演奏番号.Pop()]; + TJAPlayer3.stage選曲.n確定された曲の難易度[0] = (int)Difficulty.Tower; + + TJAPlayer3.stage選曲.r確定されたスコア = TJAPlayer3.stage選曲.r確定された曲.arスコア[TJAPlayer3.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(TJAPlayer3.stage選曲.r確定された曲)]; + TJAPlayer3.stage選曲.str確定された曲のジャンル = TJAPlayer3.stage選曲.r確定された曲.strジャンル; + + //TJAPlayer3.Skin.sound曲決定音.t再生する(); + + this.eフェードアウト完了時の戻り値 = EReturnValue.SongChoosen; + this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略 + base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト; + + #region [Log] + + if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) + { + int[] numArray2 = song.stackランダム演奏番号.ToArray(); + StringBuilder builder2 = new StringBuilder(0x400); + builder2.Append("ランダムインデックスリスト残り: "); + if (numArray2.Length > 0) + { + for (int n = 0; n < numArray2.Length; n++) + { + builder2.Append(string.Format("{0} ", numArray2[n])); + } + } + else + { + builder2.Append("(なし)"); + } + Trace.TraceInformation(builder2.ToString()); + } + + #endregion + + CSongSelectSongManager.stopSong(); + + return true; + } + + private void tDrawTower(int x, int y, BarInfo barInfo) + { + switch(barInfo.eノード種別) + { + case C曲リストノード.Eノード種別.SCORE: + TJAPlayer3.Tx.TowerSelect_Tower.t2D中心基準描画(TJAPlayer3.app.Device, x, y); + break; + case C曲リストノード.Eノード種別.RANDOM: + TJAPlayer3.Tx.TowerSelect_Tower.t2D中心基準描画(TJAPlayer3.app.Device, x, y); + break; + case C曲リストノード.Eノード種別.BOX: + TJAPlayer3.Tx.TowerSelect_Tower.t2D中心基準描画(TJAPlayer3.app.Device, x, y); + break; + case C曲リストノード.Eノード種別.BACKBOX: + TJAPlayer3.Tx.TowerSelect_Tower.t2D中心基準描画(TJAPlayer3.app.Device, x, y); + break; + } + + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(barInfo.ttkTitle).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, x + TJAPlayer3.Skin.TowerSelect_Title_Offset[0], y + TJAPlayer3.Skin.TowerSelect_Title_Offset[1]); + TJAPlayer3.stage選曲.act曲リスト.ResolveTitleTexture(barInfo.ttkSubTitle).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, x + TJAPlayer3.Skin.TowerSelect_SubTitle_Offset[0], y + TJAPlayer3.Skin.TowerSelect_SubTitle_Offset[1]); + } + + private void tUpdateBarInfos() + { + BarInfos = new BarInfo[listSongs.Count]; + tSetBarInfos(); + } + + private void tOpenFolder(C曲リストノード song) + { + nCurrentSongIndex = 0; + listSongs = song.list子リスト; + tUpdateBarInfos(); + } + + private void tCloseFolder(C曲リストノード song) + { + nCurrentSongIndex = 0; + listSongs = song.r親ノード.r親ノード.list子リスト; + tUpdateBarInfos(); + } + + private void tSetBarInfos() + { + for(int i = 0; i < BarInfos.Length; i++) + { + BarInfos[i] = new BarInfo(); + BarInfo bar = BarInfos[i]; + C曲リストノード song = listSongs[i]; + + bar.strTitle = song.strタイトル; + bar.strSubTitle = song.strサブタイトル; + bar.eノード種別 = song.eノード種別; + + bar.ttkTitle = new CActSelect曲リスト.TitleTextureKey(bar.strTitle, pfTitleFont, Color.Black, Color.Transparent, TJAPlayer3.Skin.TowerSelect_Title_MaxWidth); + bar.ttkSubTitle = new CActSelect曲リスト.TitleTextureKey(bar.strSubTitle, pfTitleFont, Color.Black, Color.Transparent, TJAPlayer3.Skin.TowerSelect_SubTitle_MaxWidth); + } + } + + private BarInfo[] BarInfos; + private List listSongs; + + private ScriptBG Background; + + private CPrivateFastFont pfTitleFont; + private CPrivateFastFont pfSubTitleFont; + + public EReturnValue eフェードアウト完了時の戻り値; + public CActFIFOStart actFOtoNowLoading; + public CActFIFOBlack actFOtoTitle; + + private int nCurrentSongIndex; + private C曲リストノード currentSong + { + get + { + return listSongs[nCurrentSongIndex]; + } + } + + #endregion + } +} diff --git a/TJAPlayer3/TJAPlayer3.csproj b/TJAPlayer3/TJAPlayer3.csproj index b60d245c..0d85f3fd 100644 --- a/TJAPlayer3/TJAPlayer3.csproj +++ b/TJAPlayer3/TJAPlayer3.csproj @@ -164,13 +164,17 @@ + + + + diff --git a/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Background.png b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Background.png new file mode 100644 index 00000000..dc6c4437 Binary files /dev/null and b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Background.png differ diff --git a/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Script.lua b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Script.lua new file mode 100644 index 00000000..5aa4b5be --- /dev/null +++ b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Script.lua @@ -0,0 +1,28 @@ +--func:DrawText(x, y, text) +--func:DrawNum(x, y, num) +--func:AddGraph("filename") +--func:DrawGraph(x, y, filename) +--func:DrawRectGraph(x, y, rect_x, rect_y, rect_width, rect_height, filename) +--func:DrawGraphCenter(x, y, filename) +--func:DrawGraphRectCenter(x, y, rect_x, rect_y, rect_width, rect_height, filename) +--func:SetOpacity(opacity, "filename") +--func:SetRotation(angle, "fileName") +--func:SetScale(xscale, yscale, "filename") +--func:SetColor(r, g, b, "filename") + +function clearIn(player) +end + +function clearOut(player) +end + +function init() + func:AddGraph("Background.png") +end + +function update() +end + +function draw() + func:DrawGraph(0, 0, "Background.png") +end diff --git a/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Tower.png b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Tower.png new file mode 100644 index 00000000..ec8ca78f Binary files /dev/null and b/Test/System/SimpleStyle (1080p)/Graphics/13_TowerSelect/Tower.png differ diff --git a/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Floor_Number.png b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Floor_Number.png new file mode 100644 index 00000000..8d9ee865 Binary files /dev/null and b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Floor_Number.png differ diff --git a/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png index 04fd513d..50185be0 100644 Binary files a/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png and b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png differ diff --git a/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png index 04fd513d..6587f504 100644 Binary files a/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png and b/Test/System/SimpleStyle (1080p)/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png differ diff --git a/Test/System/SimpleStyle (1080p)/SkinConfig.ini b/Test/System/SimpleStyle (1080p)/SkinConfig.ini index 6ac9f625..3c48570d 100644 --- a/Test/System/SimpleStyle (1080p)/SkinConfig.ini +++ b/Test/System/SimpleStyle (1080p)/SkinConfig.ini @@ -23,6 +23,7 @@ Resolution=1920,1080 #include TowerResultConfig.ini #include HeyaConfig.ini #include OnlineLoungeConfig.ini +#include TowerSelectConfig.ini #include OpenEncyclopediaConfig.ini #include NamePlateConfig.ini #include ModalConfig.ini diff --git a/Test/System/SimpleStyle (1080p)/SongSelectConfig.ini b/Test/System/SimpleStyle (1080p)/SongSelectConfig.ini index b59f23de..41c71fe1 100644 --- a/Test/System/SimpleStyle (1080p)/SongSelectConfig.ini +++ b/Test/System/SimpleStyle (1080p)/SongSelectConfig.ini @@ -138,6 +138,36 @@ SongSelect_Maker_Size=34 SongSelect_Maker_MaxSize=270 +SongSelect_FloorNum_Show=1 + +SongSelect_FloorNum_X=1800 + +SongSelect_FloorNum_Y=307 + +SongSelect_FloorNum_Interval=45,0 + + +SongSelect_DanInfo_Show=1 +SongSelect_DanInfo_Icon_X=1501,1501,1501 +SongSelect_DanInfo_Icon_Y=403,463,523 +SongSelect_DanInfo_Icon_Scale=0.5 +SongSelect_DanInfo_Difficulty_Cymbol_X=1542,1542,1542 +SongSelect_DanInfo_Difficulty_Cymbol_Y=394,454,514 +SongSelect_DanInfo_Difficulty_Cymbol_Scale=0.5 +SongSelect_DanInfo_Level_Number_X=1560,1560,1560 +SongSelect_DanInfo_Level_Number_Y=400,460,520 +SongSelect_DanInfo_Level_Number_Scale=0.5 +SongSelect_DanInfo_Title_X=1548,1548,1548 +SongSelect_DanInfo_Title_Y=387,447,507 +SongSelect_DanInfo_Title_Size=18 +SongSelect_DanInfo_Exam_X=1545,1545,1545,1545,1545,1545 +SongSelect_DanInfo_Exam_Y=597,639,681,723,765,807 +SongSelect_DanInfo_Exam_Size=15 +SongSelect_DanInfo_Exam_Value_X=1645,1743,1840 +SongSelect_DanInfo_Exam_Value_Y=582,624,666,708,750,792 +SongSelect_DanInfo_Exam_Value_Scale=0.5 + + SongSelect_Table_X=0,1551,270,1281,540 SongSelect_Table_Y=0,0,-306,-306,0 diff --git a/Test/System/SimpleStyle (1080p)/TowerSelectConfig.ini b/Test/System/SimpleStyle (1080p)/TowerSelectConfig.ini new file mode 100644 index 00000000..695f9c29 --- /dev/null +++ b/Test/System/SimpleStyle (1080p)/TowerSelectConfig.ini @@ -0,0 +1,13 @@ +;Included file +;Ƃ͒ʏʂݒł܂ + + +TowerSelect_Title_Size=45 +TowerSelect_Title_MaxWidth=345 +TowerSelect_Title_Offset=0,-45 +TowerSelect_SubTitle_Size=45 +TowerSelect_SubTitle_MaxWidth=345 +TowerSelect_SubTitle_Offset=0,15 +TowerSelect_Bar_Count=7 +TowerSelect_Bar_X=-390,60,510,960,1410,1860,2310 +TowerSelect_Bar_Y=630,600,570,540,570,600,630 diff --git a/Test/System/SimpleStyle/Graphics/13_TowerSelect/Background.png b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Background.png new file mode 100644 index 00000000..f147f570 Binary files /dev/null and b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Background.png differ diff --git a/Test/System/SimpleStyle/Graphics/13_TowerSelect/Script.lua b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Script.lua new file mode 100644 index 00000000..5aa4b5be --- /dev/null +++ b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Script.lua @@ -0,0 +1,28 @@ +--func:DrawText(x, y, text) +--func:DrawNum(x, y, num) +--func:AddGraph("filename") +--func:DrawGraph(x, y, filename) +--func:DrawRectGraph(x, y, rect_x, rect_y, rect_width, rect_height, filename) +--func:DrawGraphCenter(x, y, filename) +--func:DrawGraphRectCenter(x, y, rect_x, rect_y, rect_width, rect_height, filename) +--func:SetOpacity(opacity, "filename") +--func:SetRotation(angle, "fileName") +--func:SetScale(xscale, yscale, "filename") +--func:SetColor(r, g, b, "filename") + +function clearIn(player) +end + +function clearOut(player) +end + +function init() + func:AddGraph("Background.png") +end + +function update() +end + +function draw() + func:DrawGraph(0, 0, "Background.png") +end diff --git a/Test/System/SimpleStyle/Graphics/13_TowerSelect/Tower.png b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Tower.png new file mode 100644 index 00000000..326a3f7b Binary files /dev/null and b/Test/System/SimpleStyle/Graphics/13_TowerSelect/Tower.png differ diff --git a/Test/System/SimpleStyle/Graphics/3_SongSelect/Floor_Number.png b/Test/System/SimpleStyle/Graphics/3_SongSelect/Floor_Number.png new file mode 100644 index 00000000..d71acff3 Binary files /dev/null and b/Test/System/SimpleStyle/Graphics/3_SongSelect/Floor_Number.png differ diff --git a/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png b/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png index b6a9453b..14832172 100644 Binary files a/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png and b/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Dan.png differ diff --git a/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png b/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png index b6a9453b..efa10cac 100644 Binary files a/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png and b/Test/System/SimpleStyle/Graphics/3_SongSelect/Song_Panel/Song_Panel_Tower.png differ diff --git a/Test/System/SimpleStyle/SkinConfig.ini b/Test/System/SimpleStyle/SkinConfig.ini index 0cfff903..53739dd9 100644 --- a/Test/System/SimpleStyle/SkinConfig.ini +++ b/Test/System/SimpleStyle/SkinConfig.ini @@ -23,6 +23,7 @@ Resolution=1280,720 #include TowerResultConfig.ini #include HeyaConfig.ini #include OnlineLoungeConfig.ini +#include TowerSelectConfig.ini #include OpenEncyclopediaConfig.ini #include NamePlateConfig.ini #include ModalConfig.ini diff --git a/Test/System/SimpleStyle/SongSelectConfig.ini b/Test/System/SimpleStyle/SongSelectConfig.ini index addf11bb..8c4d54ce 100644 --- a/Test/System/SimpleStyle/SongSelectConfig.ini +++ b/Test/System/SimpleStyle/SongSelectConfig.ini @@ -152,6 +152,36 @@ SongSelect_Maker_Size=23 SongSelect_Maker_MaxSize=180 +SongSelect_FloorNum_Show=1 + +SongSelect_FloorNum_X=1200 + +SongSelect_FloorNum_Y=205 + +SongSelect_FloorNum_Interval=30,0 + + +SongSelect_DanInfo_Show=1 +SongSelect_DanInfo_Icon_X=1001,1001,1001 +SongSelect_DanInfo_Icon_Y=269,309,349 +SongSelect_DanInfo_Icon_Scale= 0.5 +SongSelect_DanInfo_Difficulty_Cymbol_X=1028,1028,1028 +SongSelect_DanInfo_Difficulty_Cymbol_Y=263,303,343 +SongSelect_DanInfo_Difficulty_Cymbol_Scale= 0.5 +SongSelect_DanInfo_Level_Number_X=1040,1040,1040 +SongSelect_DanInfo_Level_Number_Y=267,307,347 +SongSelect_DanInfo_Level_Number_Scale=0.5 +SongSelect_DanInfo_Title_X=1032,1032,1032 +SongSelect_DanInfo_Title_Y=258,298,338 +SongSelect_DanInfo_Title_Size=12 +SongSelect_DanInfo_Exam_X=1030,1030,1030,1030,1030,1030 +SongSelect_DanInfo_Exam_Y=398,426,454,482,510,538 +SongSelect_DanInfo_Exam_Size=10 +SongSelect_DanInfo_Exam_Value_X=1097,1162,1227 +SongSelect_DanInfo_Exam_Value_Y=388,416,444,472,500,528 +SongSelect_DanInfo_Exam_Value_Scale=0.5 + + SongSelect_Table_X=0,1034,180,854,360 SongSelect_Table_Y=0,0,-204,-204,0 diff --git a/Test/System/SimpleStyle/TowerSelectConfig.ini b/Test/System/SimpleStyle/TowerSelectConfig.ini new file mode 100644 index 00000000..3d8325d1 --- /dev/null +++ b/Test/System/SimpleStyle/TowerSelectConfig.ini @@ -0,0 +1,13 @@ +;Included file +;Ƃ͒ʏʂݒł܂ + + +TowerSelect_Title_Size=30 +TowerSelect_Title_MaxWidth=230 +TowerSelect_Title_Offset=0,-30 +TowerSelect_SubTitle_Size=30 +TowerSelect_SubTitle_MaxWidth=230 +TowerSelect_SubTitle_Offset=0,10 +TowerSelect_Bar_Count=7 +TowerSelect_Bar_X=-260,40,340,640,940,1240,1540 +TowerSelect_Bar_Y=420,400,380,360,380,400,420 \ No newline at end of file