From abc00ebd4abd10e29fa8e61aa58ee888dcf07d13 Mon Sep 17 00:00:00 2001 From: Alexander Eckart Date: Tue, 18 Dec 2012 23:50:05 +0100 Subject: [PATCH] added stats table to challenge main screen. there is a problem with guest profiles. --- .../Challenge/Languages/Deutsch.xml | 7 + .../Challenge/Languages/English.xml | 7 + .../PartyModes/Challenge/Languages/French.xml | 7 + .../Challenge/Languages/Spanish.xml | 6 + .../Screens/PartyScreenChallengeMain.xml | 203 ++++++++++++++++++ PartyModeChallenge/PartyModeChallenge.cs | 16 ++ .../PartyScreenChallengeMain.cs | 106 ++++++++- Vocaluxe/Base/CParty.cs | 13 +- 8 files changed, 358 insertions(+), 7 deletions(-) diff --git a/Output/PartyModes/Challenge/Languages/Deutsch.xml b/Output/PartyModes/Challenge/Languages/Deutsch.xml index 8a6220b0..74d61366 100644 --- a/Output/PartyModes/Challenge/Languages/Deutsch.xml +++ b/Output/PartyModes/Challenge/Languages/Deutsch.xml @@ -21,5 +21,12 @@ Challenge Modus: Spielerwahl Challenge Modus: Übersicht + Pos + Name + S + U + N + Sing-Punkte + Punkte diff --git a/Output/PartyModes/Challenge/Languages/English.xml b/Output/PartyModes/Challenge/Languages/English.xml index 8ea1dc14..403f4843 100644 --- a/Output/PartyModes/Challenge/Languages/English.xml +++ b/Output/PartyModes/Challenge/Languages/English.xml @@ -21,5 +21,12 @@ Challenge Mode: Choose Player Challenge Mode: Overview + Pos + Name + W + D + L + Sing Points + Score diff --git a/Output/PartyModes/Challenge/Languages/French.xml b/Output/PartyModes/Challenge/Languages/French.xml index 9611cdf6..af8f9136 100644 --- a/Output/PartyModes/Challenge/Languages/French.xml +++ b/Output/PartyModes/Challenge/Languages/French.xml @@ -21,5 +21,12 @@ TODO: Challenge Mode: Choose Player TODO: Challenge Mode: Overview + TODO: Pos + TODO: Name + TODO: W + TODO: D + TODO: L + TODO: Sing Points + TODO: Score diff --git a/Output/PartyModes/Challenge/Languages/Spanish.xml b/Output/PartyModes/Challenge/Languages/Spanish.xml index 3515c34a..f16f9a61 100644 --- a/Output/PartyModes/Challenge/Languages/Spanish.xml +++ b/Output/PartyModes/Challenge/Languages/Spanish.xml @@ -21,5 +21,11 @@ TODO: Challenge Mode: Choose Player TODO: Challenge Mode: Overview + TODO: Name + TODO: W + TODO: D + TODO: L + TODO: Sing Points + TODO: Score diff --git a/Output/PartyModes/Challenge/Screens/PartyScreenChallengeMain.xml b/Output/PartyModes/Challenge/Screens/PartyScreenChallengeMain.xml index e039aeee..eccf108c 100644 --- a/Output/PartyModes/Challenge/Screens/PartyScreenChallengeMain.xml +++ b/Output/PartyModes/Challenge/Screens/PartyScreenChallengeMain.xml @@ -58,6 +58,209 @@ + + + 100 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_POS + + + + + + + 110 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_PLAYERNAME + + + + + + + 400 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_WON + + + + + + + 475 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_DRAWN + + + + + + + 550 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_LOST + + + + + + + 750 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_SINGPOINTS + + + + + + + 850 + 100 + + 0,00 + + 37 + + + + StaticColor + + + TextSColor + + Right + + Center + + + + Outline + + TR_SCREENMAIN_TABLE_GAMEPOINTS + + + + Button diff --git a/PartyModeChallenge/PartyModeChallenge.cs b/PartyModeChallenge/PartyModeChallenge.cs index 1b412442..9a342266 100644 --- a/PartyModeChallenge/PartyModeChallenge.cs +++ b/PartyModeChallenge/PartyModeChallenge.cs @@ -24,6 +24,7 @@ namespace Vocaluxe.PartyModes public struct DataToScreenMain { public int CurrentRoundNr; + public int NumPlayerAtOnce; public List Combs; public List ResultTable; } @@ -262,8 +263,10 @@ namespace Vocaluxe.PartyModes GameData.Rounds = new ChallengeRounds(GameData.NumRounds, GameData.NumPlayer, GameData.NumPlayerAtOnce); GameData.CurrentRoundNr = 1; ToScreenMain.CurrentRoundNr = 1; + ToScreenMain.NumPlayerAtOnce = GameData.NumPlayerAtOnce; ToScreenMain.Combs = GameData.Rounds.Rounds; UpdateScores(); + ToScreenMain.ResultTable = GameData.ResultTable; Screen.DataToScreen(ToScreenMain); } break; @@ -533,6 +536,19 @@ namespace Vocaluxe.PartyModes } } + GameData.ResultTable.Sort(delegate(ResultTableRow s1, ResultTableRow s2) + { + int res = s1.NumGamePoints.CompareTo(s2.NumGamePoints); + if (res == 0) + { + res = s1.SumSingPoints.CompareTo(s2.NumGamePoints); + if (res == 0) + { + res = s1.NumWon.CompareTo(s2.NumWon); + } + } + return res; + }); } diff --git a/PartyModeChallenge/PartyScreenChallengeMain.cs b/PartyModeChallenge/PartyScreenChallengeMain.cs index ba0fc37f..282b0b20 100644 --- a/PartyModeChallenge/PartyScreenChallengeMain.cs +++ b/PartyModeChallenge/PartyScreenChallengeMain.cs @@ -7,14 +7,37 @@ using Vocaluxe.Menu; namespace Vocaluxe.PartyModes { + struct TableRow + { + public CText Pos; + public CText Name; + public CText Won; + public CText Drawn; + public CText Lost; + public CText SingPoints; + public CText GamePoints; + } + + public class PartyScreenChallengeMain : CMenuParty { // Version number for theme files. Increment it, if you've changed something on the theme files! const int ScreenVersion = 1; + const string TextPosition = "TextPosition"; + const string TextPlayerName = "TextPlayerName"; + const string TextWon = "TextWon"; + const string TextDrawn = "TextDrawn"; + const string TextLost = "TextLost"; + const string TextSingPoints = "TextSingPoints"; + const string TextGamePoints = "TextGamePoints"; + const string ButtonNextRound = "ButtonNextRound"; + private DataFromScreen Data; + private DataToScreenMain GameState; + private List Table; public PartyScreenChallengeMain() { @@ -27,6 +50,7 @@ namespace Vocaluxe.PartyModes base.Init(); _ThemeName = "PartyScreenChallengeMain"; + _ThemeTexts = new string[] { TextPosition, TextPlayerName, TextWon, TextDrawn, TextLost, TextSingPoints, TextGamePoints }; _ThemeButtons = new string[] { "ButtonNextRound" }; _ScreenVersion = ScreenVersion; } @@ -34,6 +58,9 @@ namespace Vocaluxe.PartyModes public override void LoadTheme(string XmlPath) { base.LoadTheme(XmlPath); + + GameState = new DataToScreenMain(); + BuildTable(); } public override void DataToScreen(object ReceivedData) @@ -43,7 +70,7 @@ namespace Vocaluxe.PartyModes try { data = (DataToScreenMain)ReceivedData; - + GameState = data; } catch (Exception e) { @@ -99,6 +126,8 @@ namespace Vocaluxe.PartyModes public override void OnShow() { base.OnShow(); + + Updatetable(); } public override bool UpdateGame() @@ -127,5 +156,80 @@ namespace Vocaluxe.PartyModes { //TODO } + + private void BuildTable() + { + Table = new List(); + float delta = Texts[htTexts(TextPosition)].Height * 1.2f; + + for (int i = 0; i < _PartyMode.GetMaxPlayer(); i++) + { + TableRow row = new TableRow(); + + row.Pos = GetNewText(Texts[htTexts(TextPosition)]); + row.Name = GetNewText(Texts[htTexts(TextPlayerName)]); + row.Won = GetNewText(Texts[htTexts(TextWon)]); + row.Drawn = GetNewText(Texts[htTexts(TextDrawn)]); + row.Lost = GetNewText(Texts[htTexts(TextLost)]); + row.SingPoints = GetNewText(Texts[htTexts(TextSingPoints)]); + row.GamePoints = GetNewText(Texts[htTexts(TextGamePoints)]); + + row.Pos.Y += delta * (i + 1); + row.Name.Y += delta * (i + 1); + row.Won.Y += delta * (i + 1); + row.Drawn.Y += delta * (i + 1); + row.Lost.Y += delta * (i + 1); + row.SingPoints.Y += delta * (i + 1); + row.GamePoints.Y += delta * (i + 1); + + row.Pos.Text = (i + 1).ToString() + ")"; + + row.Pos.Visible = false; + row.Name.Visible = false; + row.Won.Visible = false; + row.Drawn.Visible = false; + row.Lost.Visible = false; + row.SingPoints.Visible = false; + row.GamePoints.Visible = false; + + AddText(row.Pos); + AddText(row.Name); + AddText(row.Won); + AddText(row.Drawn); + AddText(row.Lost); + AddText(row.SingPoints); + AddText(row.GamePoints); + + Table.Add(row); + } + } + + private void Updatetable() + { + SProfile[] profiles = _Base.Profiles.GetProfiles(); + + for (int i = 0; i < Table.Count; i++) + { + if (i < GameState.ResultTable.Count) + { + TableRow row = Table[i]; + + row.Pos.Visible = true; + row.Name.Visible = true; + row.Won.Visible = true; + row.Drawn.Visible = true; + row.Lost.Visible = true; + row.SingPoints.Visible = true; + row.GamePoints.Visible = true; + + row.Name.Text = profiles[GameState.ResultTable[i].PlayerID].PlayerName; + row.Won.Text = GameState.ResultTable[i].NumWon.ToString(); + row.Drawn.Text = GameState.ResultTable[i].NumDrawn.ToString(); + row.Lost.Text = GameState.ResultTable[i].NumLost.ToString(); + row.SingPoints.Text = GameState.ResultTable[i].SumSingPoints.ToString(); + row.GamePoints.Text = GameState.ResultTable[i].NumGamePoints.ToString(); + } + } + } } } diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index 2aaf77ba..f3d38752 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -302,15 +302,19 @@ namespace Vocaluxe.Base foreach (string screenfile in pm.ScreenFiles) { + string XmlPath = Path.Combine(Path.Combine(CSettings.sFolderPartyModes, pm.Folder), CSettings.sFolderPartyModeScreens); CMenuParty Screen = GetPartyScreenInstance( Output, screenfile, - Path.Combine(Path.Combine(CSettings.sFolderPartyModes, pm.Folder), CSettings.sFolderPartyModeScreens), - pm.PartyModeID); + Path.Combine(Path.Combine(CSettings.sFolderPartyModes, pm.Folder), CSettings.sFolderPartyModeScreens) + ); if (Screen != null) { + Screen.Initialize(CMain.Base); Screen.AssingPartyMode(pm.PartyMode); + Screen.SetPartyModeID(pm.PartyModeID); + Screen.LoadTheme(XmlPath); pm.PartyMode.AddScreen(Screen, screenfile); } else @@ -361,7 +365,7 @@ namespace Vocaluxe.Base return CompileResult.CompiledAssembly; } - private static CMenuParty GetPartyScreenInstance(Assembly Assembly, string ScreenName, string XmlPath, int PartyModeID) + private static CMenuParty GetPartyScreenInstance(Assembly Assembly, string ScreenName, string XmlPath) { if (Assembly == null) return null; @@ -383,9 +387,6 @@ namespace Vocaluxe.Base CLog.LogError("Error casting PartyScreen: " + ScreenName + "; " + e.Message); return null; } - Screen.Initialize(CMain.Base); - Screen.SetPartyModeID(PartyModeID); - Screen.LoadTheme(XmlPath); return Screen; } #endregion private stuff