From c4315e33daf40b72e44aaff175a6d3db8c29aa5e Mon Sep 17 00:00:00 2001 From: 0aubsq <0aubsq@gmail.com> Date: Sun, 6 Mar 2022 20:20:45 +0100 Subject: [PATCH] Modals base code, Characters and CDN base database files and few fixes --- TJAPlayer3/Common/Modal.cs | 88 ++++++++++++++++++ TJAPlayer3/Databases/DBCDN.cs | 80 ++++++++++++++++ TJAPlayer3/Databases/DBCharacter.cs | 58 ++++++++++++ TJAPlayer3/Databases/Databases.cs | 3 + TJAPlayer3/I18N/CLang_en.cs | 12 ++- TJAPlayer3/I18N/CLang_fr.cs | 36 +++---- TJAPlayer3/I18N/CLang_jp.cs | 6 +- TJAPlayer3/Stages/01.StartUp/TextureLoader.cs | 57 +++++++++++- TJAPlayer3/TJAPlayer3.csproj | 5 +- Test/Databases/CDN.json | 41 ++++++++ Test/Databases/Character.json | 7 ++ Test/Readme.txt | 1 + .../Graphics/12_OnlineLounge/Song_Box.png | Bin 0 -> 20140 bytes 13 files changed, 368 insertions(+), 26 deletions(-) create mode 100644 TJAPlayer3/Common/Modal.cs create mode 100644 TJAPlayer3/Databases/DBCDN.cs create mode 100644 TJAPlayer3/Databases/DBCharacter.cs create mode 100644 Test/Databases/CDN.json create mode 100644 Test/Databases/Character.json create mode 100644 Test/System/SimpleStyle/Graphics/12_OnlineLounge/Song_Box.png diff --git a/TJAPlayer3/Common/Modal.cs b/TJAPlayer3/Common/Modal.cs new file mode 100644 index 00000000..5dc916a4 --- /dev/null +++ b/TJAPlayer3/Common/Modal.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FDK; +using System.Drawing; + +namespace TJAPlayer3 +{ + internal class Modal + { + public Modal(EModalType mt, int ra, int re, EModalFormat mf, int p = 0) + { + modalType = mt; + modalFormat = mf; + rarity = ra; + reference = re; + player = p; + + tSetupModal(); + } + + private void tSetupModal() + { + CTexture[] arrRef; + + if (modalFormat == EModalFormat.Half) + arrRef = TJAPlayer3.Tx.Modal_Half; + else + arrRef = TJAPlayer3.Tx.Modal_Full; + + if (modalType == EModalType.Coin) + _box = arrRef[arrRef.Length - 1]; + else + { + int usedTex = Math.Max(0, Math.Min(arrRef.Length - 2, rarity)); + _box = arrRef[usedTex]; + } + + _boxRect = new Rectangle( + (modalFormat == EModalFormat.Full || player == 0) + ? 0 + : 640, + 0, + (modalFormat == EModalFormat.Full) + ? 1280 + : 640, + 720); + } + + public void tDisplayModal() + { + + + _box?.t2D描画(TJAPlayer3.app.Device, 0, 0, _boxRect); + } + + public enum EModalType + { + Coin, + Puchichara, + Character, + Title, + Text, + Confirm, + } + + public enum EModalFormat + { + Full, + Half, + } + + // Coin number for coin; database/unlockable asset for puchichara, character and title; no effect on text, confirm + public int reference; + + public int rarity; + public EModalType modalType; + public EModalFormat modalFormat; + + // For modalFormat = Half only + public int player; + + private CTexture _box; + private Rectangle _boxRect; + } +} diff --git a/TJAPlayer3/Databases/DBCDN.cs b/TJAPlayer3/Databases/DBCDN.cs new file mode 100644 index 00000000..3f38a736 --- /dev/null +++ b/TJAPlayer3/Databases/DBCDN.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; + +namespace TJAPlayer3 +{ + class DBCDN + { + + public void tDBCDN() + { + if (!File.Exists(@".\Databases\CDN.json")) + tSaveFile(); + + tLoadFile(); + } + + #region [Auxiliary classes] + + public class CDNHooks + { + public string id = "id"; + public Dictionary title = new Dictionary() + { + ["default"] = "title", + }; + public Dictionary subtitle = new Dictionary() + { + ["default"] = "subtitle", + }; + public string[] difficulties = { "easy", "normal", "hard", "extreme", "extra", "tower", "dan" }; + public string life = "life"; + public string updateDate = "updateDate"; + public string creationDate = "creationDate"; + public string uploadDate = "uploadDate"; + public Dictionary md5 = new Dictionary() + { + ["default"] = "md5", + }; + public string charter = "charter"; + } + + public class CDNData + { + + [JsonProperty("baseUrl")] + public string BaseUrl; + + [JsonProperty("download")] + public Dictionary Download = new Dictionary() + { + ["default"] = "download/", + }; + + [JsonProperty("songList")] + public string SongList; + + [JsonProperty("hooks")] + public CDNHooks Hooks; + } + + #endregion + + public Dictionary data = new Dictionary(); + + #region [private] + + private void tSaveFile() + { + ConfigManager.SaveConfig(data, @".\Databases\CDN.json"); + } + + private void tLoadFile() + { + data = ConfigManager.GetConfig>(@".\Databases\CDN.json"); + } + + #endregion + } +} \ No newline at end of file diff --git a/TJAPlayer3/Databases/DBCharacter.cs b/TJAPlayer3/Databases/DBCharacter.cs new file mode 100644 index 00000000..bddb29fc --- /dev/null +++ b/TJAPlayer3/Databases/DBCharacter.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; + +namespace TJAPlayer3 +{ + class DBCharacter + { + + public void tDBCharacter() + { + if (!File.Exists(@".\Databases\Character.json")) + tSaveFile(); + + tLoadFile(); + } + + #region [Auxiliary classes] + + public class CharacterData + { + public CharacterData(string pcn, string pcr, string pca) + { + Name = pcn; + Rarity = pcr; + Author = pca; + } + + + [JsonProperty("name")] + public string Name; + + [JsonProperty("rarity")] + public string Rarity; + + [JsonProperty("author")] + public string Author; + } + + #endregion + + public Dictionary data = new Dictionary(); + + #region [private] + + private void tSaveFile() + { + ConfigManager.SaveConfig(data, @".\Databases\Character.json"); + } + + private void tLoadFile() + { + data = ConfigManager.GetConfig>(@".\Databases\Character.json"); + } + + #endregion + } +} \ No newline at end of file diff --git a/TJAPlayer3/Databases/Databases.cs b/TJAPlayer3/Databases/Databases.cs index b728eb9e..4a24948e 100644 --- a/TJAPlayer3/Databases/Databases.cs +++ b/TJAPlayer3/Databases/Databases.cs @@ -9,12 +9,15 @@ namespace TJAPlayer3 { DBPuchichara = new DBPuchichara(); DBUnlockables = new DBUnlockables(); + DBCharacter = new DBCharacter(); DBPuchichara.tDBPuchichara(); DBUnlockables.tDBUnlockables(); + DBCharacter.tDBCharacter(); } public DBPuchichara DBPuchichara; public DBUnlockables DBUnlockables; + public DBCharacter DBCharacter; } } \ No newline at end of file diff --git a/TJAPlayer3/I18N/CLang_en.cs b/TJAPlayer3/I18N/CLang_en.cs index 481523c1..bb538a7a 100644 --- a/TJAPlayer3/I18N/CLang_en.cs +++ b/TJAPlayer3/I18N/CLang_en.cs @@ -274,13 +274,17 @@ namespace TJAPlayer3 [90004] = "Not enough coins !", [90005] = "The following condition : ", + [900] = "Resume", + [901] = "Restart", + [902] = "Quit", + [9000] = "Off", [9001] = "On", [9002] = "None", - [9003] = "きまぐれ", - [9004] = "でたらめ", - [9006] = "Special Training Mode", - [9007] = "Null", + [9003] = "Shuffle", + [9004] = "Chaos", + [9006] = "Training Mode", + [9007] = "-", [9008] = "Speed", [9009] = "DORON", [9010] = "Flip Notes", diff --git a/TJAPlayer3/I18N/CLang_fr.cs b/TJAPlayer3/I18N/CLang_fr.cs index b59533b1..28ad8ac6 100644 --- a/TJAPlayer3/I18N/CLang_fr.cs +++ b/TJAPlayer3/I18N/CLang_fr.cs @@ -265,25 +265,25 @@ namespace TJAPlayer3 [90004] = "Nombre de pièces insuffisant !", [90005] = "La condition suivante : ", - [900] = "Continuez", - [901] = "Redémarrage", - [902] = "Sortir", + [900] = "Reprendre", + [901] = "Recommencer", + [902] = "Quitter", - [9000] = "しない", - [9001] = "する", - [9002] = "なし", - [9003] = "きまぐれ", - [9004] = "でたらめ", - [9006] = "特訓モード", - [9007] = "使用不可", - [9008] = "はやさ", - [9009] = "ドロン", - [9010] = "あべこべ", - [9011] = "ランダム", - [9012] = "ゲームモード", - [9013] = "オート", - [9014] = "ボイス", - [9015] = "音色", + [9000] = "Non", + [9001] = "Oui", + [9002] = "Aucun", + [9003] = "Hasardeux", + [9004] = "Chaotique", + [9006] = "Mode entraînement", + [9007] = "-", + [9008] = "Vitesse", + [9009] = "DORON", + [9010] = "Inverse", + [9011] = "Hasard", + [9012] = "Mode de jeu", + [9013] = "Auto", + [9014] = "Voix", + [9015] = "Instrument", }; } } \ No newline at end of file diff --git a/TJAPlayer3/I18N/CLang_jp.cs b/TJAPlayer3/I18N/CLang_jp.cs index 6e416912..97542e5b 100644 --- a/TJAPlayer3/I18N/CLang_jp.cs +++ b/TJAPlayer3/I18N/CLang_jp.cs @@ -329,7 +329,11 @@ namespace TJAPlayer3 [90004] = "コインが足りません !", [90005] = "下記の条件 : ", - [9000] = "しない", + [900] = "もどる", + [901] = "やりなおす", + [902] = "演奏中止", + + [9000] = "しない", [9001] = "する", [9002] = "なし", [9003] = "きまぐれ", diff --git a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs index d1cb8ac9..058334ca 100644 --- a/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs +++ b/TJAPlayer3/Stages/01.StartUp/TextureLoader.cs @@ -24,6 +24,9 @@ namespace TJAPlayer3 const string TOWERRESULT = @"8_TowerResult\"; const string HEYA = @"10_Heya\"; const string CHARACTERS = @"11_Characters\"; + const string MODALS = @"11_Modals\"; + const string ONLINELOUNGE = @"12_OnlineLounge\"; + const string TOWERSELECT = @"13_TowerSelect\"; // InGame const string CHARA = @"1_Chara\"; @@ -935,12 +938,40 @@ namespace TJAPlayer3 #endregion - + #region [11_Modals] + + Modal_Full = new CTexture[6]; + Modal_Half = new CTexture[6]; + for (int i = 0; i < 5; i++) + { + Modal_Full[i] = TxC(MODALS + i.ToString() + @"_full.png"); + Modal_Half[i] = TxC(MODALS + i.ToString() + @"_half.png"); + } + Modal_Full[Modal_Full.Length - 1] = TxC(MODALS + @"Coin_full.png"); + Modal_Half[Modal_Full.Length - 1] = TxC(MODALS + @"Coin_half.png"); + + #endregion + + #region [12_OnlineLounge] + + OnlineLounge_Background = TxC(ONLINELOUNGE + @"Background.png"); + OnlineLounge_Box = TxC(ONLINELOUNGE + @"Box.png"); + OnlineLounge_Center_Menu_Bar = TxC(ONLINELOUNGE + @"Center_Menu_Bar.png"); + OnlineLounge_Center_Menu_Box_Slot = TxC(ONLINELOUNGE + @"Center_Menu_Box_Slot.png"); + OnlineLounge_Side_Menu = TxC(ONLINELOUNGE + @"Side_Menu.png"); + OnlineLounge_Song_Box = TxC(ONLINELOUNGE + @"Song_Box.png"); + + #endregion + + #region [13_TowerSelect] + + #endregion + } - public void ReloadCharacter(int old, int newC, int player, bool primary = false) + public void ReloadCharacter(int old, int newC, int player, bool primary = false) { if (old == newC) return; @@ -1720,6 +1751,28 @@ namespace TJAPlayer3 #endregion + #region [11_Modals] + + public CTexture[] Modal_Full, + Modal_Half; + + #endregion + + #region [12_OnlineLounge] + + public CTexture OnlineLounge_Background, + OnlineLounge_Box, + OnlineLounge_Center_Menu_Bar, + OnlineLounge_Center_Menu_Box_Slot, + OnlineLounge_Side_Menu, + OnlineLounge_Song_Box; + + #endregion + + #region [13_TowerSelect] + + #endregion + #region [ 解放用 ] public List listTexture = new List(); diff --git a/TJAPlayer3/TJAPlayer3.csproj b/TJAPlayer3/TJAPlayer3.csproj index 99e7dfab..6d056387 100644 --- a/TJAPlayer3/TJAPlayer3.csproj +++ b/TJAPlayer3/TJAPlayer3.csproj @@ -121,15 +121,18 @@ + + + - + diff --git a/Test/Databases/CDN.json b/Test/Databases/CDN.json new file mode 100644 index 00000000..6be6f623 --- /dev/null +++ b/Test/Databases/CDN.json @@ -0,0 +1,41 @@ +{ + "Pidgey's TJADB CDN" : { + "baseUrl": "https://dev.pidgey.net:8443/", + "download": { + "en": "download/en/", + "default": "download/orig/", + }, + "songList": "api/browse", + "hooks": { + "id": "_id", + "title": { + "en": "title_en", + "default": "title_orig", + }, + "subtitle": { + "en": "subtitle_en", + "default": "subtitle_orig", + }, + "difficulties": [ + "d_kantan", + "d_futsuu", + "d_muzukashii", + "d_oni", + "d_ura", + "d_tower", + "d_dan", + ], + "life": "d_tower_lives", + "updateDate": "last_updated", + "creationDate": "created", + "uploadDate": "uploaded", + "md5": { + "en": "tja_en_md5", + "default": "tja_orig_md5", + }, + "charter": "charter", + } + + + } +} \ No newline at end of file diff --git a/Test/Databases/Character.json b/Test/Databases/Character.json new file mode 100644 index 00000000..4f13e667 --- /dev/null +++ b/Test/Databases/Character.json @@ -0,0 +1,7 @@ +{ + 0: { + "name" : "None", + "rarity": "Common", + "author": "", + }, +} \ No newline at end of file diff --git a/Test/Readme.txt b/Test/Readme.txt index 1153366e..d01b624e 100644 --- a/Test/Readme.txt +++ b/Test/Readme.txt @@ -66,6 +66,7 @@ Discord: https://discord.gg/aA8scTvZ6B [funnym0th/OpenTaiko Spanish Translation](https://github.com/funnym0th) (@funnym0th) [basketballsmash/English README Translation](https://twitter.com/basketballsmash)(@basketballsmash) [Meowgister/OpenTaiko English Translation](https://www.youtube.com/channel/UCDi5puZaJLMUA6OgIAb7rmQ) +[WHMHammer/OpenTaiko Chinese Translation](https://github.com/whmhammer)(@WHMHammer) [Aioilight/TJAPlayer3](https://github.com/aioilight/TJAPlayer3)(@aioilight) [TwoPointZero/TJAPlayer3](https://github.com/twopointzero/TJAPlayer3)(@twopointzero) [KabanFriends/TJAPlayer3](https://github.com/KabanFriends/TJAPlayer3/tree/features)(@KabanFriends) diff --git a/Test/System/SimpleStyle/Graphics/12_OnlineLounge/Song_Box.png b/Test/System/SimpleStyle/Graphics/12_OnlineLounge/Song_Box.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd6b9bc242567d06a67ec194af1dc9b736aa26c GIT binary patch literal 20140 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