From 3eda104c8133ec1ad66c3403049e967dabfc79b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 28 Dec 2012 13:29:28 +0100 Subject: [PATCH 01/14] Added ScreenSetting as new Theme-Element. --- VocaluxeLib/Menu/CMenu.cs | 64 ++++++++++++ VocaluxeLib/Menu/CScreenSetting.cs | 151 +++++++++++++++++++++++++++++ VocaluxeLib/VocaluxeLib.csproj | 1 + 3 files changed, 216 insertions(+) create mode 100644 VocaluxeLib/Menu/CScreenSetting.cs diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index af47ea00..0e3ccf2e 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -39,6 +39,7 @@ namespace Vocaluxe.Menu private List _Equalizers; private List _Playlists; private List _ParticleEffects; + private List _ScreenSettings; private Hashtable _htBackgrounds; private Hashtable _htStatics; @@ -52,6 +53,7 @@ namespace Vocaluxe.Menu private Hashtable _htEqualizers; private Hashtable _htPlaylists; private Hashtable _htParticleEffects; + private Hashtable _htScreenSettings; private int _PrevMouseX; @@ -76,6 +78,7 @@ namespace Vocaluxe.Menu protected string[] _ThemeEqualizers; protected string[] _ThemePlaylists; protected string[] _ThemeParticleEffects; + protected string[] _ThemeScreenSettings; protected SRectF _ScreenArea; protected Basic _Base; @@ -122,6 +125,7 @@ namespace Vocaluxe.Menu _Equalizers = new List(); _Playlists = new List(); _ParticleEffects = new List(); + _ScreenSettings = new List(); _htBackgrounds = new Hashtable(); _htStatics = new Hashtable(); @@ -135,6 +139,7 @@ namespace Vocaluxe.Menu _htEqualizers = new Hashtable(); _htPlaylists = new Hashtable(); _htParticleEffects = new Hashtable(); + _htScreenSettings = new Hashtable(); _PrevMouseX = 0; _PrevMouseY = 0; @@ -158,6 +163,7 @@ namespace Vocaluxe.Menu _ThemeEqualizers = null; _ThemePlaylists = null; _ThemeParticleEffects = null; + _ThemeScreenSettings = null; } protected void FadeTo(EScreens NextScreen) @@ -394,6 +400,22 @@ namespace Vocaluxe.Menu } } } + + if (_ThemeScreenSettings != null) + { + for (int i = 0; i < _ThemeScreenSettings.Length; i++) + { + CParticleEffect pe = new CParticleEffect(_Base, _PartyModeID); + if (pe.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], navigator, SkinIndex)) + { + _htScreenSettings.Add(_ThemeScreenSettings[i], AddParticleEffect(pe)); + } + else + { + _Base.Log.LogError("Can't load ThemeSetting \"" + _ThemeScreenSettings[i] + "\" in screen " + _ThemeName); + } + } + } } else { @@ -490,6 +512,12 @@ namespace Vocaluxe.Menu _ParticleEffects[i].SaveTheme(writer); } + //ScreenSettings + for (int i = 0; i < _ScreenSettings.Count; i++) + { + _ScreenSettings[i].SaveTheme(writer); + } + writer.WriteEndElement(); // End of File @@ -561,6 +589,11 @@ namespace Vocaluxe.Menu { pe.ReloadTextures(); } + + foreach (CScreenSetting se in _ScreenSettings) + { + se.ReloadTextures(); + } } public virtual void UnloadTextures() @@ -623,6 +656,11 @@ namespace Vocaluxe.Menu { pe.UnloadTextures(); } + + foreach (CScreenSetting se in _ScreenSettings) + { + se.UnloadTextures(); + } } public virtual void ReloadTheme() @@ -696,6 +734,11 @@ namespace Vocaluxe.Menu { return _ParticleEffects; } + + public List GetScreenSettings() + { + return _ScreenSettings; + } #endregion GetLists #region ElementHandler @@ -888,6 +931,14 @@ namespace Vocaluxe.Menu return _ParticleEffects.ToArray(); } } + + public CScreenSetting[] ScreenSettings + { + get + { + return _ScreenSettings.ToArray(); + } + } #endregion Get Arrays #region Hashtables @@ -1046,6 +1097,19 @@ namespace Vocaluxe.Menu throw; } } + + public int htScreenSettings(string key) + { + try + { + return (int)_htScreenSettings[key]; + } + catch (Exception) + { + _Base.Log.LogError("Can't find ScreenSetting Element \"" + key + "\" in Screen " + _ThemeName); + throw; + } + } #endregion Hashtables #endregion ElementHandler diff --git a/VocaluxeLib/Menu/CScreenSetting.cs b/VocaluxeLib/Menu/CScreenSetting.cs new file mode 100644 index 00000000..cbea37db --- /dev/null +++ b/VocaluxeLib/Menu/CScreenSetting.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.XPath; + +namespace Vocaluxe.Menu +{ + enum ESettingType + { + Int, + String, + Color, + Texture + } + + struct SScreenSetting + { + public string Name; + public string Value; + public ESettingType Type; + } + + public class CScreenSetting : IMenuElement + { + private int _PartyModeID; + private Basic _Base; + + private SScreenSetting _Theme; + private bool _ThemeLoaded; + + public string GetThemeName() + { + return _Theme.Name; + } + + public CScreenSetting(Basic Base, int PartyModeID) + { + _PartyModeID = PartyModeID; + _Base = Base; + _Theme = new SScreenSetting(); + _ThemeLoaded = false; + } + + public CScreenSetting(CScreenSetting ts) + { + _PartyModeID = ts._PartyModeID; + _Base = ts._Base; + _Theme = ts._Theme; + _ThemeLoaded = ts._ThemeLoaded; + } + + public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex) + { + string item = XmlPath + "/" + ElementName; + _ThemeLoaded = true; + + _ThemeLoaded &= CHelper.GetValueFromXML(item + "/Value", navigator, ref _Theme.Value, String.Empty); + _ThemeLoaded &= CHelper.TryGetEnumValueFromXML(item + "/Type", navigator, ref _Theme.Type); + + if (_ThemeLoaded) + { + _Theme.Name = ElementName; + } + return _ThemeLoaded; + } + + public bool SaveTheme(XmlWriter writer) + { + if (_ThemeLoaded) + { + writer.WriteStartElement(_Theme.Name); + + writer.WriteComment(": Type of theme-setting-value: "+ CHelper.ListStrings(Enum.GetNames(typeof(ESettingType)))); + writer.WriteElementString("Type", Enum.GetName(typeof(ESettingType), _Theme.Type)); + writer.WriteComment(": Value of theme-setting"); + writer.WriteElementString("Value", _Theme.Value); + writer.WriteEndElement(); + return true; + } + return false; + } + + public object GetValue() + { + switch (_Theme.Type) + { + case ESettingType.Int: + return GetIntValue(_Theme.Value); + + case ESettingType.String: + return _Theme.Value; + + case ESettingType.Color: + return GetColorValue(_Theme.Value); + + case ESettingType.Texture: + return GetTextureValue(_Theme.Value); + } + + return null; + } + + public void UnloadTextures() + { + } + + public void LoadTextures() + { + } + + public void ReloadTextures() + { + } + + #region Private + private int GetIntValue(string _string) + { + try + { + return Convert.ToInt32(_string); + } + catch (Exception) + { + return -1; + } + } + + private STexture GetTextureValue(string _string) + { + return _Base.Theme.GetSkinTexture(_string); + } + + private SColorF GetColorValue(string _string) + { + return _Base.Theme.GetColor(_string); + } + #endregion Private + + #region ThemeEdit + public void MoveElement(int stepX, int stepY) + { + } + + public void ResizeElement(int stepW, int stepH) + { + } + #endregion ThemeEdit + } +} diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index 4867bf3b..2e8963d1 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -125,6 +125,7 @@ + From 907ec1f1cb5483866b5058adca3cbf2ee5a24235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 28 Dec 2012 14:03:44 +0100 Subject: [PATCH 02/14] Added some screen-settings to ScreenScore. --- Output/Themes/Ambient/Screens/ScreenScore.xml | 16 +++++++++-- .../Changelog/Changelog_ScreenScore.txt | 3 +++ Vocaluxe/Screens/CScreenScore.cs | 27 ++++++++++++------- VocaluxeLib/Menu/CMenu.cs | 12 ++++++--- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/Output/Themes/Ambient/Screens/ScreenScore.xml b/Output/Themes/Ambient/Screens/ScreenScore.xml index 814efcfe..52bcf9b6 100644 --- a/Output/Themes/Ambient/Screens/ScreenScore.xml +++ b/Output/Themes/Ambient/Screens/ScreenScore.xml @@ -1,7 +1,7 @@  - 2 + 3 Video @@ -3745,5 +3745,17 @@ + + Int + 7 + + + Int + 4 + + + Int + 4 + - \ No newline at end of file + diff --git a/Output/Themes/Changelog/Changelog_ScreenScore.txt b/Output/Themes/Changelog/Changelog_ScreenScore.txt index d050d838..2fa4243e 100644 --- a/Output/Themes/Changelog/Changelog_ScreenScore.txt +++ b/Output/Themes/Changelog/Changelog_ScreenScore.txt @@ -1,4 +1,7 @@ ScreenScore +++++++++++ +Version 3: +Add , , to change text-string with player-num >= ++++++++++ Version 2: diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index dc258bd1..40191203 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -15,10 +15,14 @@ namespace Vocaluxe.Screens class CScreenScore : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! - const int ScreenVersion = 2; + const int ScreenVersion = 3; private const string TextSong = "TextSong"; + private const string ScreenSettingShortScore = "ScreenSettingShortScore"; + private const string ScreenSettingShortRating = "ScreenSettingShortRating"; + private const string ScreenSettingShortDifficulty = "ScreenSettingShortDifficulty"; + private string[,] TextNames; private string[,] TextScores; private string[,] TextRatings; @@ -54,6 +58,8 @@ namespace Vocaluxe.Screens _ThemeStatics = statics.ToArray(); + _ThemeScreenSettings = new string[] { ScreenSettingShortScore, ScreenSettingShortRating, ScreenSettingShortDifficulty }; + StaticPointsBarDrawnPoints = new double[CSettings.MaxNumPlayer]; } @@ -316,18 +322,19 @@ namespace Vocaluxe.Screens } else Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name; - - Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS"); - if (CGame.NumPlayer <= 3) - { - Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); + + if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortScore)].GetValue()) + Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS"); + else + Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000"); + if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortDifficulty)].GetValue()) Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString()); - } else - { - Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(player[p].Difficulty.ToString()); - } + if (CGame.NumPlayer < (int)ScreenSettings[htScreenSettings(ScreenSettingShortRating)].GetValue()) + Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); + else + Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); StaticPointsBarDrawnPoints[p] = 0.0; Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0; Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 0e3ccf2e..544bb12e 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -405,10 +405,10 @@ namespace Vocaluxe.Menu { for (int i = 0; i < _ThemeScreenSettings.Length; i++) { - CParticleEffect pe = new CParticleEffect(_Base, _PartyModeID); - if (pe.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], navigator, SkinIndex)) + CScreenSetting se = new CScreenSetting(_Base, _PartyModeID); + if (se.LoadTheme("//root/" + _ThemeName, _ThemeScreenSettings[i], navigator, SkinIndex)) { - _htScreenSettings.Add(_ThemeScreenSettings[i], AddParticleEffect(pe)); + _htScreenSettings.Add(_ThemeScreenSettings[i], AddScreenSetting(se)); } else { @@ -1482,6 +1482,12 @@ namespace Vocaluxe.Menu _AddInteraction(_ParticleEffects.Count - 1, EType.TParticleEffect); return _ParticleEffects.Count - 1; } + + public int AddScreenSetting(CScreenSetting se) + { + _ScreenSettings.Add(se); + return _ScreenSettings.Count - 1; + } #endregion Elements #region InteractionHandling From eaae3173d5d29d6066820b39f4e177212b967d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 28 Dec 2012 15:17:32 +0100 Subject: [PATCH 03/14] Added option to draw score-animation vertical. --- Output/Themes/Ambient/Screens/ScreenScore.xml | 4 +++ .../Changelog/Changelog_ScreenScore.txt | 2 +- Vocaluxe/Screens/CScreenScore.cs | 28 +++++++++++++++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Output/Themes/Ambient/Screens/ScreenScore.xml b/Output/Themes/Ambient/Screens/ScreenScore.xml index 52bcf9b6..4f110653 100644 --- a/Output/Themes/Ambient/Screens/ScreenScore.xml +++ b/Output/Themes/Ambient/Screens/ScreenScore.xml @@ -3757,5 +3757,9 @@ Int 4 + + String + Vertical + diff --git a/Output/Themes/Changelog/Changelog_ScreenScore.txt b/Output/Themes/Changelog/Changelog_ScreenScore.txt index 2fa4243e..611a2621 100644 --- a/Output/Themes/Changelog/Changelog_ScreenScore.txt +++ b/Output/Themes/Changelog/Changelog_ScreenScore.txt @@ -2,7 +2,7 @@ ScreenScore ++++++++++ Version 3: Add , , to change text-string with player-num >= - +Add , set to "vertical" to draw animation in vertical direction. ++++++++++ Version 2: diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index 40191203..7f73ead5 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -22,6 +22,7 @@ namespace Vocaluxe.Screens private const string ScreenSettingShortScore = "ScreenSettingShortScore"; private const string ScreenSettingShortRating = "ScreenSettingShortRating"; private const string ScreenSettingShortDifficulty = "ScreenSettingShortDifficulty"; + private const string ScreenSettingAnimationDirection = "ScreenSettingAnimationDirection"; private string[,] TextNames; private string[,] TextScores; @@ -58,7 +59,7 @@ namespace Vocaluxe.Screens _ThemeStatics = statics.ToArray(); - _ThemeScreenSettings = new string[] { ScreenSettingShortScore, ScreenSettingShortRating, ScreenSettingShortDifficulty }; + _ThemeScreenSettings = new string[] { ScreenSettingShortScore, ScreenSettingShortRating, ScreenSettingShortDifficulty, ScreenSettingAnimationDirection }; StaticPointsBarDrawnPoints = new double[CSettings.MaxNumPlayer]; } @@ -157,8 +158,16 @@ namespace Vocaluxe.Screens { StaticPointsBarDrawnPoints[p] = player[p].Points; } - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000); - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + string direction = (string) ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue(); + if (direction.ToLower() == "vertical") + { + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.W / 10000); + } + else + { + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = ((float)StaticPointsBarDrawnPoints[p]) * (Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H / 10000); + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + } } } } @@ -335,9 +344,18 @@ namespace Vocaluxe.Screens Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); else Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points))); + StaticPointsBarDrawnPoints[p] = 0.0; - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0; - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + string direction = (string)ScreenSettings[htScreenSettings(ScreenSettingAnimationDirection)].GetValue(); + if (direction.ToLower() == "vertical") + { + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.W = 0; + } + else + { + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0; + Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H; + } if (player[p].ProfileID >= 0 && player[p].ProfileID < CProfiles.NumProfiles) Statics[htStatics(StaticAvatar[p, CGame.NumPlayer - 1])].Texture = CProfiles.Profiles[player[p].ProfileID].Avatar.Texture; } From f21c7f24780da312468412110c77ca00d85dee7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Sun, 30 Dec 2012 18:37:07 +0100 Subject: [PATCH 04/14] Added tic-tac-toe-party-mode. Still something to do (joker, lang, winning) --- Output/PartyModes/TicTacToe.xml | 19 + .../TicTacToe/Languages/Deutsch.xml | 35 + .../TicTacToe/Languages/English.xml | 37 + .../PartyModes/TicTacToe/Languages/French.xml | 37 + .../TicTacToe/Languages/Spanish.xml | 36 + .../Screens/PartyScreenTicTacToeConfig.xml | 552 ++++++++++++ .../Screens/PartyScreenTicTacToeMain.xml | 815 ++++++++++++++++++ .../Screens/PartyScreenTicTacToeNames.xml | 274 ++++++ PartyModeTicTacToe/PartyModeTicTacToe.cs | 634 ++++++++++++++ PartyModeTicTacToe/PartyModeTicTacToe.csproj | 145 ++++ .../PartyScreenTicTacToeConfig.cs | 230 +++++ .../PartyScreenTicTacToeMain.cs | 500 +++++++++++ .../PartyScreenTicTacToeNames.cs | 640 ++++++++++++++ Vocaluxe.sln | 24 +- Vocaluxe/Base/CMain.cs | 10 + VocaluxeLib/Menu/IMenu.cs | 6 + 16 files changed, 3991 insertions(+), 3 deletions(-) create mode 100644 Output/PartyModes/TicTacToe.xml create mode 100644 Output/PartyModes/TicTacToe/Languages/Deutsch.xml create mode 100644 Output/PartyModes/TicTacToe/Languages/English.xml create mode 100644 Output/PartyModes/TicTacToe/Languages/French.xml create mode 100644 Output/PartyModes/TicTacToe/Languages/Spanish.xml create mode 100644 Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml create mode 100644 Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml create mode 100644 Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml create mode 100644 PartyModeTicTacToe/PartyModeTicTacToe.cs create mode 100644 PartyModeTicTacToe/PartyModeTicTacToe.csproj create mode 100644 PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs create mode 100644 PartyModeTicTacToe/PartyScreenTicTacToeMain.cs create mode 100644 PartyModeTicTacToe/PartyScreenTicTacToeNames.cs diff --git a/Output/PartyModes/TicTacToe.xml b/Output/PartyModes/TicTacToe.xml new file mode 100644 index 00000000..5ddf43da --- /dev/null +++ b/Output/PartyModes/TicTacToe.xml @@ -0,0 +1,19 @@ + + + 1 + + TR_PARTYMODE_NAME + flokuep + TR_PARTYMODE_DESCRIPTION + TicTacToe + PartyModeTicTacToe + 0 + 1 + TR_PARTYMODE_AUDIENCE + + + PartyScreenTicTacToeMain + PartyScreenTicTacToeConfig + PartyScreenTicTacToeNames + + diff --git a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml new file mode 100644 index 00000000..8a8c359e --- /dev/null +++ b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml @@ -0,0 +1,35 @@ + + + + Deutsch + + + + Tic-Tac-Toe + Spiele Tic-Tac-Toe auf eine besondere Weise! + Für alle, die Spaß am Wettkampf haben. + Weiter + Zurück + Start + Exit + Ja + Nein + Nächste Runde + Songs + Team + + Tic-Tac-Toe: Einstellungen + Anzahl der Spieler in Team 1 + Anzahl der Spieler in Team 2 + Anzahl der Felder + Playlist + + Tic-Tac-Toe: Spielerwahl + + Tic-Tac-Toe + Wählt ein Feld aus. + Nächster Spieler + Challenge-Mode wirklich beenden? + Alle Runden wurden gesungen! Und der Gewinner ist... + + diff --git a/Output/PartyModes/TicTacToe/Languages/English.xml b/Output/PartyModes/TicTacToe/Languages/English.xml new file mode 100644 index 00000000..68f705a8 --- /dev/null +++ b/Output/PartyModes/TicTacToe/Languages/English.xml @@ -0,0 +1,37 @@ + + + + English + + + + Challenge Mode + Play some challenge rounds. + For all who are interested in duel fights. + Next + Back + Start + Exit + Yes + No + Next Round + + Challenge Mode: Configuration + Number of players + Number of mics + Number of rounds + + Challenge Mode: Choose Player + + Challenge Mode: Overview + Pos + Name + Rounds + Wins + Sing Points + Score + Do you really want to exit? + Player of next round: + All rounds were sung! And the winner is... + + diff --git a/Output/PartyModes/TicTacToe/Languages/French.xml b/Output/PartyModes/TicTacToe/Languages/French.xml new file mode 100644 index 00000000..2a937376 --- /dev/null +++ b/Output/PartyModes/TicTacToe/Languages/French.xml @@ -0,0 +1,37 @@ + + + + Français + + + + TODO: Challenge Mode + TODO: Play some challenge rounds. + TODO: For all who are interested in duel fights. + TODO: Next + Retour + Démarrer + Quitter + Oui + Non + TODO: Next Round + + TODO: Challenge Mode: Configuration + TODO: Number of players + TODO: Number of mics + TODO: Number of rounds + + TODO: Challenge Mode: Choose Player + + TODO: Challenge Mode: Overview + TODO: Pos + TODO: Name + TODO: Rounds + TODO: Wins + TODO: Sing Points + TODO: Score + TODO: Do you really want to exit? + TODO: Player of next round: + TODO: All rounds were sung! And the winner is... + + diff --git a/Output/PartyModes/TicTacToe/Languages/Spanish.xml b/Output/PartyModes/TicTacToe/Languages/Spanish.xml new file mode 100644 index 00000000..d7ded575 --- /dev/null +++ b/Output/PartyModes/TicTacToe/Languages/Spanish.xml @@ -0,0 +1,36 @@ + + + + Español + + + + TODO: Challenge Mode + TODO: Play some challenge rounds. + TODO: For all who are interested in duel fights. + TODO: Next + Volver + Comenzar + Salir + Sí + No + TODO: Next Round + + TODO: Challenge Mode: Configuration + TODO: Number of players + TODO: Number of mics + TODO: Number of rounds + + TODO: Challenge Mode: Choose Player + + TODO: Challenge Mode: Overview + TODO: Name + TODO: Rounds + TODO: Wins + TODO: Sing Points + TODO: Score + TODO: Do you really want to exit? + TODO: Player of next round: + TODO: All rounds were sung! And the winner is... + + diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml new file mode 100644 index 00000000..22fbe30a --- /dev/null +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml @@ -0,0 +1,552 @@ + + + + 1 + + + Video + + + + BG_Default + + + BackgroundColor + + + + Menu + + 40 + 40 + 0,00 + 1200 + 50 + + + StaticColor + + + + + + + 640 + 48 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENCONFIG_TITLE + + + + + + + 75 + 105 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENCONFIG_NUMPLAYERT1 + + + + + + + 75 + 165 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENCONFIG_NUMPLAYERT2 + + + + + + + 75 + 225 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENCONFIG_NUMFIELDS + + + + + + + 75 + 285 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENCONFIG_PLAYLIST + + + + + + + Button + + Button + + 985 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_NEXT + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 145 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_BACK + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 100 + 0,00 + 700 + 50 + + 505 + 105 + 0,00 + 40 + 40 + + 1170 + 105 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 9 + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 160 + 0,00 + 700 + 50 + + 505 + 165 + 0,00 + 40 + 40 + + 1170 + 165 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 9 + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 220 + 0,00 + 700 + 50 + + 505 + 225 + 0,00 + 40 + 40 + + 1170 + 225 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 3 + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 280 + 0,00 + 700 + 50 + + 505 + 285 + 0,00 + 40 + 40 + + 1170 + 285 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 1 + + + diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml new file mode 100644 index 00000000..bd7bfefe --- /dev/null +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml @@ -0,0 +1,815 @@ + + + + 1 + + + Video + + + + BG_Default + + + BackgroundColor + + + + Menu + + 40 + 40 + 0,00 + 1200 + 50 + + + StaticColor + + + + + + + PopupBG + + 0 + 0 + -2,00 + 1280 + 720 + + + StaticColor + + + + + + + PopupBG + + 10 + 200 + -1,00 + 100 + 100 + + + StaticColor + + + + + + + PopupBG + + 1170 + 200 + -1,00 + 100 + 100 + + + StaticColor + + + + + + + 640 + 48 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENMAIN_TITLE + + + + + + + 160 + 150 + + 0,00 + + 40 + + + + Player1 + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENMAIN_NEXT_PLAYER + + + + + + + 1120 + 150 + + 0,00 + + 40 + + + + Player2 + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENMAIN_NEXT_PLAYER + + + + + + + 120 + 230 + + 0,00 + + 40 + + + + Player1 + + + TextSColor + + Left + + Center + + + + Outline + + + + + + + + + 1160 + 230 + + 0,00 + + 40 + + + + Player2 + + + TextSColor + + Right + + Center + + + + Outline + + + + + + + + + 640 + 90 + + 0,00 + + 40 + + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + + + + + + + + 640 + 265 + + -2,01 + + 32 + + 380 + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENMAIN_POPUP_REALLYEXIT + + + + + + + Random + + Random + + 10 + 320 + 0,00 + 100 + 100 + + + Player1Dim + + + Player1 + + + 50 + 25 + + 50 + + 50 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + + Random + + Random + + 1170 + 320 + 0,00 + 100 + 100 + + + Player2Dim + + + Player2 + + + 50 + 25 + + 50 + + 50 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + + RepeatIcon + + RepeatIcon + + 110 + 320 + 0,00 + 100 + 100 + + + Player1Dim + + + Player1 + + + 48 + 25 + + 50 + + 50 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + + RepeatIcon + + RepeatIcon + + 1070 + 320 + 0,00 + 100 + 100 + + + Player2Dim + + + Player2 + + + 48 + 25 + + 50 + + 50 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + + Button + + Button + + 1030 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_NEXT_ROUND + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 100 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_BACK + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 100 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_EXIT + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 665 + 360 + -2,01 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_YES + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 465 + 360 + -2,01 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_NO + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + CoverTile + + CoverTile + + 0 + 0 + -1,01 + 100 + 100 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml new file mode 100644 index 00000000..0ab2b019 --- /dev/null +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml @@ -0,0 +1,274 @@ + + + + 1 + + + Video + + + + BG_Default + + + BackgroundColor + + + + Menu + + 40 + 40 + 0,00 + 1200 + 50 + + + StaticColor + + + + + + + 640 + 48 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENNAMES_TITLE + + + + + + + Button + + Button + + 985 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_NEXT + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + Button + + Button + + 145 + 600 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 10 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_BUTTON_BACK + + + + + + 10 + 26 + + + + + + 10 + 26 + + + + + CoverTile + + CoverTile + + 0 + 0 + 0,00 + 100 + 100 + + + ButtonColor + + + ButtonSColor + + + 50 + 102 + + 20 + + 98 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + + CoverTile + + CoverTile + + 0 + 0 + 0,00 + 100 + 100 + + + ButtonColor + + + ButtonSColor + + + 50 + 102 + + 20 + + 98 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + + + + + + + + + + + diff --git a/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModeTicTacToe/PartyModeTicTacToe.cs new file mode 100644 index 00000000..5945dafc --- /dev/null +++ b/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -0,0 +1,634 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Vocaluxe.Menu; + +namespace Vocaluxe.PartyModes +{ + public class Round + { + public int SongID; + public int SingerTeam1; + public int SingerTeam2; + public int PointsTeam1; + public int PointsTeam2; + public int Winner; + public bool Finished = false; + } + #region Communication + #region ToScreen + public struct DataToScreenConfig + { + public int NumPlayerTeam1; + public int NumPlayerTeam2; + public int NumFields; + public int PlaylistID; + } + + public struct DataToScreenNames + { + public int NumPlayerTeam1; + public int NumPlayerTeam2; + public List ProfileIDsTeam1; + public List ProfileIDsTeam2; + } + + public struct DataToScreenMain + { + public int CurrentRoundNr; + public int Team; + public int NumPlayerTeam1; + public int NumPlayerTeam2; + public int NumFields; + public List Rounds; + public List Songs; + public List ProfileIDsTeam1; + public List ProfileIDsTeam2; + public int[] NumJokerRandom; + public int[] NumJokerRetry; + } + + public struct DataFromScreen + { + public FromScreenConfig ScreenConfig; + public FromScreenNames ScreenNames; + public FromScreenMain ScreenMain; + } + + public struct FromScreenConfig + { + public int NumPlayerTeam1; + public int NumPlayerTeam2; + public int NumFields; + public int PlaylistID; + } + + public struct FromScreenNames + { + public bool FadeToConfig; + public bool FadeToMain; + public List ProfileIDsTeam1; + public List ProfileIDsTeam2; + } + + public struct FromScreenMain + { + public bool FadeToSinging; + public bool FadeToNameSelection; + public List Rounds; + public int SingRoundNr; + public List Songs; + } + #endregion FromScreen + #endregion Communication + + public sealed class PartyModeTicTacToe : CPartyMode + { + private const int MaxPlayer = 20; + private const int MinPlayer = 2; + private const int MaxTeams = 2; + private const int MinTeams = 2; + private const int NumFields = 9; + + enum EStage + { + NotStarted, + Config, + Names, + Main, + Singing + } + + struct Data + { + public int NumPlayerTeam1; + public int NumPlayerTeam2; + public int NumFields; + public int Team; + public List ProfileIDsTeam1; + public List ProfileIDsTeam2; + + public int PlaylistID; + + public List Rounds; + public List Songs; + + public int CurrentRoundNr; + public int SingRoundNr; + + public int[] NumJokerRandom; + public int[] NumJokerRetry; + } + + private DataToScreenConfig ToScreenConfig; + private DataToScreenNames ToScreenNames; + private DataToScreenMain ToScreenMain; + + private Data GameData; + private EStage _Stage; + + public PartyModeTicTacToe() + { + _ScreenSongOptions.Selection.RandomOnly = false; + _ScreenSongOptions.Selection.PartyMode = true; + _ScreenSongOptions.Selection.CategoryChangeAllowed = true; + _ScreenSongOptions.Selection.NumJokers = new int[] { 5, 5 }; + _ScreenSongOptions.Selection.TeamNames = new string[] { "foo", "bar" }; + + _ScreenSongOptions.Sorting.SearchString = String.Empty; + _ScreenSongOptions.Sorting.SearchStringVisible = false; + _ScreenSongOptions.Sorting.ShowDuetSongs = false; + + _Stage = EStage.NotStarted; + + ToScreenConfig = new DataToScreenConfig(); + ToScreenNames = new DataToScreenNames(); + ToScreenMain = new DataToScreenMain(); + + GameData = new Data(); + GameData.NumFields = 9; + GameData.NumPlayerTeam1 = 2; + GameData.NumPlayerTeam2 = 2; + GameData.ProfileIDsTeam1 = new List(); + GameData.ProfileIDsTeam2 = new List(); + GameData.CurrentRoundNr = 0; + GameData.SingRoundNr = 0; + GameData.PlaylistID = 0; + GameData.Rounds = new List(); + GameData.Songs = new List(); + GameData.NumJokerRandom = new int[2]; + GameData.NumJokerRetry = new int[2]; + } + + public override bool Init() + { + _Stage = EStage.NotStarted; + + _ScreenSongOptions.Sorting.IgnoreArticles = _Base.Config.GetIgnoreArticles(); + _ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting(); + _ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_OFF; + _ScreenSongOptions.Selection.SongIndex = -1; + + if (_Base.Config.GetTabs() == EOffOn.TR_CONFIG_ON && _ScreenSongOptions.Sorting.SongSorting != ESongSorting.TR_CONFIG_NONE) + _ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON; + + ToScreenMain.Rounds = new List(); + ToScreenMain.Songs = new List(); + GameData.Songs = new List(); + GameData.Rounds = new List(); + return true; + } + + public override void DataFromScreen(string ScreenName, Object Data) + { + DataFromScreen data = new DataFromScreen(); + switch (ScreenName) + { + case "PartyScreenTicTacToeConfig": + + try + { + data = (DataFromScreen)Data; + GameData.NumPlayerTeam1 = data.ScreenConfig.NumPlayerTeam1; + GameData.NumPlayerTeam2 = data.ScreenConfig.NumPlayerTeam2; + GameData.NumFields = data.ScreenConfig.NumFields; + GameData.PlaylistID = data.ScreenConfig.PlaylistID; + + _Stage = EStage.Config; + _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message); + } + break; + + case "PartyScreenTicTacToeNames": + try + { + data = (DataFromScreen)Data; + if (data.ScreenNames.FadeToConfig) + _Stage = EStage.NotStarted; + else + { + if (_Base.Game.GetRandom(100) < 50) + GameData.Team = 0; + else + GameData.Team = 1; + GameData.ProfileIDsTeam1 = data.ScreenNames.ProfileIDsTeam1; + GameData.ProfileIDsTeam2 = data.ScreenNames.ProfileIDsTeam2; + _Stage = EStage.Names; + } + + _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message); + } + break; + + case "PartyScreenTicTacToeMain": + try + { + data = (DataFromScreen)Data; + if (data.ScreenMain.FadeToSinging) + { + _Stage = EStage.Singing; + GameData.Rounds = data.ScreenMain.Rounds; + GameData.SingRoundNr = data.ScreenMain.SingRoundNr; + GameData.Songs = data.ScreenMain.Songs; + } + if (data.ScreenMain.FadeToNameSelection) + { + _Stage = EStage.Config; + } + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode TicTacToe. Can't cast received data from screen " + ScreenName + ". " + e.Message); + } + + + if (_Stage == EStage.Singing) + StartRound(data.ScreenMain.SingRoundNr); + if (_Stage == EStage.Config) + _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); + break; + + default: + _Base.Log.LogError("Error in party mode TicTacToe. Wrong screen is sending: " + ScreenName); + break; + } + } + + public override void UpdateGame() + { + /* + if (_Base.Songs.GetCurrentCategoryIndex() != -1 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) + _ScreenSongOptions.Selection.RandomOnly = true; + else + _ScreenSongOptions.Selection.RandomOnly = false;*/ + } + + public override CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen) + { + CMenuParty Screen = null; + AlternativeScreen = EScreens.ScreenSong; + + switch (_Stage) + { + case EStage.NotStarted: + _Screens.TryGetValue("PartyScreenTicTacToeConfig", out Screen); + if (_Screens != null) + { + ToScreenConfig.NumPlayerTeam1 = GameData.NumPlayerTeam1; + ToScreenConfig.NumPlayerTeam2 = GameData.NumPlayerTeam2; + ToScreenConfig.NumFields = GameData.NumFields; + ToScreenConfig.PlaylistID = GameData.PlaylistID; + Screen.DataToScreen(ToScreenConfig); + } + break; + case EStage.Config: + _Screens.TryGetValue("PartyScreenTicTacToeNames", out Screen); + if (_Screens != null) + { + ToScreenNames.NumPlayerTeam1 = GameData.NumPlayerTeam1; + ToScreenNames.NumPlayerTeam2 = GameData.NumPlayerTeam2; + ToScreenNames.ProfileIDsTeam1 = GameData.ProfileIDsTeam1; + ToScreenNames.ProfileIDsTeam2 = GameData.ProfileIDsTeam2; + Screen.DataToScreen(ToScreenNames); + } + break; + case EStage.Names: + _Screens.TryGetValue("PartyScreenTicTacToeMain", out Screen); + if (_Screens != null) + { + if (GameData.Team == 1) + GameData.Team = 0; + else + GameData.Team = 1; + _Base.Songs.ResetPartySongSung(); + GameData.CurrentRoundNr = 1; + ToScreenMain.CurrentRoundNr = 1; + ToScreenMain.NumPlayerTeam1 = GameData.NumPlayerTeam1; + ToScreenMain.NumPlayerTeam2 = GameData.NumPlayerTeam2; + ToScreenMain.NumFields = GameData.NumFields; + ToScreenMain.ProfileIDsTeam1 = GameData.ProfileIDsTeam1; + ToScreenMain.ProfileIDsTeam2 = GameData.ProfileIDsTeam2; + CreateRounds(); + PrepareSongList(); + SetNumJokers(); + ToScreenMain.Rounds = GameData.Rounds; + ToScreenMain.Songs = GameData.Songs; + ToScreenMain.NumJokerRandom = GameData.NumJokerRandom; + ToScreenMain.NumJokerRetry = GameData.NumJokerRetry; + ToScreenMain.Team = GameData.Team; + UpdateScores(); + Screen.DataToScreen(ToScreenMain); + } + break; + case EStage.Main: + //nothing to do + break; + case EStage.Singing: + _Screens.TryGetValue("PartyScreenTicTacToeMain", out Screen); + if (_Screens != null) + { + UpdateScores(); + if (GameData.Team == 1) + GameData.Team = 0; + else + GameData.Team = 1; + ToScreenMain.CurrentRoundNr = GameData.CurrentRoundNr; + ToScreenMain.NumPlayerTeam1 = GameData.NumPlayerTeam1; + ToScreenMain.NumPlayerTeam2 = GameData.NumPlayerTeam2; + ToScreenMain.NumFields = GameData.NumFields; + ToScreenMain.ProfileIDsTeam1 = GameData.ProfileIDsTeam1; + ToScreenMain.ProfileIDsTeam2 = GameData.ProfileIDsTeam2; + ToScreenMain.Rounds = GameData.Rounds; + ToScreenMain.Songs = GameData.Songs; + ToScreenMain.NumJokerRandom = GameData.NumJokerRandom; + ToScreenMain.NumJokerRetry = GameData.NumJokerRetry; + ToScreenMain.Team = GameData.Team; + Screen.DataToScreen(ToScreenMain); + } + break; + default: + break; + } + + return Screen; + } + + public override EScreens GetStartScreen() + { + return EScreens.ScreenPartyDummy; + } + + public override EScreens GetMainScreen() + { + return EScreens.ScreenPartyDummy; + } + + public override ScreenSongOptions GetScreenSongOptions() + { + _ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting(); + _ScreenSongOptions.Sorting.Tabs = _Base.Config.GetTabs(); + _ScreenSongOptions.Sorting.IgnoreArticles = _Base.Config.GetIgnoreArticles(); + + return _ScreenSongOptions; + } + + public override void OnSongChange(int SongIndex, ref ScreenSongOptions ScreenSongOptions) + { + ScreenSongOptions = _ScreenSongOptions; + } + + public override void OnCategoryChange(int CategoryIndex, ref ScreenSongOptions ScreenSongOptions) + { + ScreenSongOptions = _ScreenSongOptions; + } + + public override void SetSearchString(string SearchString, bool Visible) + { + _ScreenSongOptions.Sorting.SearchString = SearchString; + _ScreenSongOptions.Sorting.SearchStringVisible = Visible; + } + + public override int GetMaxPlayer() + { + return MaxPlayer; + } + + public override int GetMinPlayer() + { + return MinPlayer; + } + + public override int GetMaxTeams() + { + return MaxTeams; + } + + public override int GetMinTeams() + { + return MinTeams; + } + + public override int GetMaxNumRounds() + { + return NumFields; + } + + public override void JokerUsed(int TeamNr) + { + } + + public override void SongSelected(int SongID) + { + + EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + + + _Base.Game.AddSong(SongID, gm); + + _Base.Songs.AddPartySongSung(SongID); + _Base.Graphics.FadeTo(EScreens.ScreenSing); + } + + public override void LeavingHighscore() + { + UpdateScores(); + _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); + } + + public bool UseJoker(int TeamNr, int JokerNum) + { + switch (JokerNum) + { + //Random-Joker + case 0: + if (GameData.NumJokerRandom[TeamNr] > 0) + { + GameData.NumJokerRandom[TeamNr]--; + return true; + } + else + { + return false; + } + + case 1: + if (GameData.NumJokerRetry[TeamNr] > 0) + { + GameData.NumJokerRetry[TeamNr]--; + return true; + } + else + { + return false; + } + } + return false; + } + + private void CreateRounds() + { + //Prepare Player-IDs + List Team1 = new List(); + List Team2 = new List(); + List IDs1 = new List(); + List IDs2 = new List(); + //Add IDs to team-list + while (Team1.Count <= NumFields) + { + if (IDs1.Count == 0) + for (int i = 0; i < GameData.NumPlayerTeam1; i++) + IDs1.Add(i); + if (IDs2.Count == 0) + for (int i = 0; i < GameData.NumPlayerTeam2; i++) + IDs2.Add(i); + if (Team1.Count <= NumFields) + { + Team1.Add(IDs1[_Base.Game.GetRandom(IDs1.Count - 1)]); + IDs1.Remove(Team1[Team1.Count - 1]); + } + if (Team2.Count <= NumFields) + { + Team2.Add(IDs2[_Base.Game.GetRandom(IDs2.Count - 1)]); + IDs2.Remove(Team2[Team2.Count - 1]); + } + } + + for (int i = 0; i < NumFields; i++) + { + Round r = new Round(); + r.SingerTeam1 = Team1[i]; + r.SingerTeam2 = Team2[i]; + GameData.Rounds.Add(r); + } + } + + private void PrepareSongList() + { + while(GameData.Songs.Count < (GameData.NumFields + GameData.NumJokerRandom[0] + GameData.NumJokerRandom[1])){ + List Songs = new List(); + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(GameData.PlaylistID); i++) + { + Songs.Add(_Base.Playlist.GetPlaylistSong(GameData.PlaylistID, i).SongID); + } + while(Songs.Count > 0) + { + GameData.Songs.Add(Songs[_Base.Game.GetRandom(Songs.Count - 1)]); + Songs.Remove(GameData.Songs[GameData.Songs.Count - 1]); + } + } + } + + private void StartRound(int RoundNr) + { + _Base.Game.Reset(); + _Base.Game.ClearSongs(); + + _Base.Game.SetNumPlayer(2); + + SPlayer[] player = _Base.Game.GetPlayer(); + if (player == null) + return; + + if (player.Length < 2) + return; + + SProfile[] profiles = _Base.Profiles.GetProfiles(); + Round r = GameData.Rounds[RoundNr]; + + for (int i = 0; i < 2; i++) + { + //default values + player[i].Name = "foobar"; + player[i].Difficulty = EGameDifficulty.TR_CONFIG_EASY; + player[i].ProfileID = -1; + } + + //try to fill with the right data + if (r != null) + { + if (GameData.ProfileIDsTeam1[r.SingerTeam1] < profiles.Length) + { + player[0].Name = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].PlayerName; + player[0].Difficulty = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].Difficulty; + player[0].ProfileID = GameData.ProfileIDsTeam1[r.SingerTeam1]; + } + if (GameData.ProfileIDsTeam2[r.SingerTeam2] < profiles.Length) + { + player[1].Name = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].PlayerName; + player[1].Difficulty = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].Difficulty; + player[1].ProfileID = GameData.ProfileIDsTeam2[r.SingerTeam2]; + } + SongSelected(r.SongID); + } + else + return; + } + + private void SetNumJokers() + { + switch (GameData.NumFields) + { + case 9: + GameData.NumJokerRandom[0] = 1; + GameData.NumJokerRandom[1] = 1; + GameData.NumJokerRetry[0] = 0; + GameData.NumJokerRetry[1] = 0; + break; + + case 16: + GameData.NumJokerRandom[0] = 2; + GameData.NumJokerRandom[1] = 2; + GameData.NumJokerRetry[0] = 1; + GameData.NumJokerRetry[1] = 1; + break; + + case 25: + GameData.NumJokerRandom[0] = 3; + GameData.NumJokerRandom[1] = 3; + GameData.NumJokerRetry[0] = 2; + GameData.NumJokerRetry[1] = 2; + break; + } + } + + private void UpdateScores() + { + if (!GameData.Rounds[GameData.SingRoundNr].Finished) + GameData.CurrentRoundNr++; + + SPlayer[] results = _Base.Game.GetPlayer(); + if (results == null) + return; + + if (results.Length < 2) + return; + + GameData.Rounds[GameData.SingRoundNr].PointsTeam1 = (int)Math.Round(results[0].Points); + GameData.Rounds[GameData.SingRoundNr].PointsTeam2 = (int)Math.Round(results[1].Points); + GameData.Rounds[GameData.SingRoundNr].Finished = true; + if (GameData.Rounds[GameData.SingRoundNr].PointsTeam1 < GameData.Rounds[GameData.SingRoundNr].PointsTeam2) + { + GameData.Rounds[GameData.SingRoundNr].Winner = 2; + } + else if (GameData.Rounds[GameData.SingRoundNr].PointsTeam1 > GameData.Rounds[GameData.SingRoundNr].PointsTeam2) + { + GameData.Rounds[GameData.SingRoundNr].Winner = 1; + } + else + { + GameData.Rounds[GameData.SingRoundNr].Finished = false; + GameData.CurrentRoundNr--; + } + + } + } +} \ No newline at end of file diff --git a/PartyModeTicTacToe/PartyModeTicTacToe.csproj b/PartyModeTicTacToe/PartyModeTicTacToe.csproj new file mode 100644 index 00000000..ff09b7c4 --- /dev/null +++ b/PartyModeTicTacToe/PartyModeTicTacToe.csproj @@ -0,0 +1,145 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {6F3E1874-F28A-40E9-AFBD-31934D593679} + Library + Properties + PartyModeTicTacToe + PartyModeTicTacToe + v2.0 + + + 512 + + + AnyCPU + true + full + false + ..\Output\PartyModes\TicTacToe\Code + TRACE;DEBUG;WIN + prompt + 4 + Off + + + AnyCPU + none + true + ..\Output\PartyModes\TicTacToe\Code + prompt + 4 + false + WIN + Off + + + AnyCPU + true + full + false + ..\Output\PartyModes\TicTacToe\Code + TRACE;DEBUG;WIN + prompt + 4 + Off + + + AnyCPU + none + true + ..\Output\PartyModes\TicTacToe\Code + prompt + 4 + false + WIN + Off + + + AnyCPU + true + full + false + ..\Output\PartyModes\TicTacToe\Code + TRACE;DEBUG;LINUX + prompt + 4 + Off + + + AnyCPU + none + true + ..\Output\PartyModes\TicTacToe\Code + prompt + 4 + false + LINUX + Off + + + AnyCPU + true + full + false + ..\Output\PartyModes\TicTacToe\Code + TRACE;DEBUG;LINUX + prompt + 4 + Off + + + AnyCPU + none + true + ..\Output\PartyModes\TicTacToe\Code + prompt + 4 + false + LINUX + Off + + + + + + + Always + + + Always + + + Always + + + Always + + + + + {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} + VocaluxeLib + False + + + + + + + + + + + + diff --git a/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs b/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs new file mode 100644 index 00000000..d5b86e20 --- /dev/null +++ b/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs @@ -0,0 +1,230 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +using Vocaluxe.Menu; + +namespace Vocaluxe.PartyModes +{ + public class PartyScreenTicTacToeConfig : CMenuParty + { + // Version number for theme files. Increment it, if you've changed something on the theme files! + const int ScreenVersion = 1; + + const string SelectSlideNumPlayerTeam1 = "SelectSlideNumPlayerTeam1"; + const string SelectSlideNumPlayerTeam2 = "SelectSlideNumPlayerTeam2"; + const string SelectSlideNumFields = "SelectSlideNumFields"; + const string SelectSlidePlaylist = "SelectSlidePlaylist"; + const string ButtonNext = "ButtonNext"; + const string ButtonBack = "ButtonBack"; + + private bool ConfigOk = true; + + DataFromScreen Data; + + public PartyScreenTicTacToeConfig() + { + } + + protected override void Init() + { + base.Init(); + + _ThemeName = "PartyScreenTicTacToeConfig"; + _ThemeSelectSlides = new string[] { SelectSlideNumPlayerTeam1, SelectSlideNumPlayerTeam2, SelectSlideNumFields, SelectSlidePlaylist }; + _ThemeButtons = new string[] { ButtonNext, ButtonBack }; + _ScreenVersion = ScreenVersion; + + Data = new DataFromScreen(); + FromScreenConfig config = new FromScreenConfig(); + config.PlaylistID = 0; + config.NumFields = 9; + config.NumPlayerTeam1 = 2; + config.NumPlayerTeam2 = 2; + Data.ScreenConfig = config; + } + + public override void LoadTheme(string XmlPath) + { + base.LoadTheme(XmlPath); + } + + public override void DataToScreen(object ReceivedData) + { + DataToScreenConfig config = new DataToScreenConfig(); + + try + { + config = (DataToScreenConfig)ReceivedData; + Data.ScreenConfig.NumFields = config.NumFields; + Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1; + Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2; + Data.ScreenConfig.PlaylistID = config.PlaylistID; + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode screen TicTacToe config. Can't cast received data from game mode " + _ThemeName + ". " + e.Message);; + } + + } + + public override bool HandleInput(KeyEvent KeyEvent) + { + base.HandleInput(KeyEvent); + + if (KeyEvent.KeyPressed) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Back: + case Keys.Escape: + Back(); + break; + + case Keys.Enter: + UpdateSlides(); + + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + break; + + case Keys.Left: + UpdateSlides(); + break; + + case Keys.Right: + UpdateSlides(); + break; + } + } + return true; + } + + public override bool HandleMouse(MouseEvent MouseEvent) + { + base.HandleMouse(MouseEvent); + + if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + UpdateSlides(); + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + } + + if (MouseEvent.RB) + { + Back(); + } + + return true; + } + + public override void OnShow() + { + base.OnShow(); + + if (_Base.Config.GetMaxNumMics() >= 2) + ConfigOk = true; + + FillSlides(); + UpdateSlides(); + } + + public override bool UpdateGame() + { + Buttons[htButtons(ButtonNext)].Visible = ConfigOk; + return true; + } + + public override bool Draw() + { + base.Draw(); + return true; + } + + public override void OnClose() + { + base.OnClose(); + } + + private void FillSlides() + { + // build num player slide (min player ... max player); + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Clear(); + for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++) + { + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].AddValue(i.ToString()); + } + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection = Data.ScreenConfig.NumPlayerTeam1 - (_PartyMode.GetMinPlayer()/2); + + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Clear(); + for (int i = _PartyMode.GetMinPlayer()/2; i <= _PartyMode.GetMaxPlayer() / 2; i++) + { + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].AddValue(i.ToString()); + } + SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection = Data.ScreenConfig.NumPlayerTeam2 -( _PartyMode.GetMinPlayer()/2); + + SelectSlides[htSelectSlides(SelectSlideNumFields)].Clear(); + SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("9"); + SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("16"); + SelectSlides[htSelectSlides(SelectSlideNumFields)].AddValue("25"); + if (Data.ScreenConfig.NumFields == 9) + SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 0; + else if (Data.ScreenConfig.NumFields == 16) + SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 1; + else if (Data.ScreenConfig.NumFields == 25) + SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 2; + + string[] _Playlists = _Base.Playlist.GetPlaylistNames(); + SelectSlides[htSelectSlides(SelectSlidePlaylist)].Clear(); + for (int i = 0; i < _Playlists.Length; i++) + { + string value = _Playlists[i] + " (" + _Base.Playlist.GetPlaylistSongCount(i) + " " + _Base.Language.Translate("TR_SONGS", _PartyModeID) + ")"; + SelectSlides[htSelectSlides(SelectSlidePlaylist)].AddValue(value); + } + SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection = Data.ScreenConfig.PlaylistID; + + } + + private void UpdateSlides() + { + Data.ScreenConfig.NumPlayerTeam1 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam1)].Selection + (_PartyMode.GetMinPlayer()/2); + Data.ScreenConfig.NumPlayerTeam2 = SelectSlides[htSelectSlides(SelectSlideNumPlayerTeam2)].Selection + (_PartyMode.GetMinPlayer()/2); + + if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 0) + Data.ScreenConfig.NumFields = 9; + else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 1) + Data.ScreenConfig.NumFields = 16; + else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 2) + Data.ScreenConfig.NumFields = 25; + + Data.ScreenConfig.PlaylistID = SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection; + + if (_Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID) <= 0) + ConfigOk = false; + else + ConfigOk = true; + } + + private void Back() + { + FadeTo(EScreens.ScreenParty); + } + + private void Next() + { + _PartyMode.DataFromScreen(_ThemeName, Data); + } + } +} diff --git a/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs new file mode 100644 index 00000000..562a2913 --- /dev/null +++ b/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -0,0 +1,500 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +using Vocaluxe.Menu; + +namespace Vocaluxe.PartyModes +{ + public class Field + { + public Round Content; + public CButton Button; + } + + public enum EStatus + { + FieldChoosing, + JokerRetry, + FieldSelected, + None + } + + public class PartyScreenTicTacToeMain : CMenuParty + { + // Version number for theme files. Increment it, if you've changed something on the theme files! + const int ScreenVersion = 1; + + const string TextPopupReallyExit = "TextPopupReallyExit"; + const string TextTeamChoosing = "TextTeamChoosing"; + const string TextNextPlayerT1 = "TextNextPlayerT1"; + const string TextNextPlayerT2 = "TextNextPlayerT2"; + const string TextNextPlayerNameT1 = "TextNextPlayerNameT1"; + const string TextNextPlayerNameT2 = "TextNextPlayerNameT2"; + + const string ButtonNextRound = "ButtonNextRound"; + const string ButtonBack = "ButtonBack"; + const string ButtonExit = "ButtonExit"; + const string ButtonPopupYes = "ButtonPopupYes"; + const string ButtonPopupNo = "ButtonPopupNo"; + const string ButtonField = "ButtonField"; + + const string ButtonJokerRandomT1 = "ButtonJokerRandomT1"; + const string ButtonJokerRandomT2 = "ButtonJokerRandomT2"; + const string ButtonJokerRetryT1 = "ButtonJokerRetryT1"; + const string ButtonJokerRetryT2 = "ButtonJokerRetryT2"; + + + const string StaticPopupBG = "StaticPopupBG"; + const string StaticAvatarT1 = "StaticAvatarT1"; + const string StaticAvatarT2 = "StaticAvatarT2"; + + private bool ExitPopupVisible = false; + + private DataFromScreen Data; + private DataToScreenMain GameData; + + private List Fields; + private float FieldFirstX = 25; + private float FieldFirstY = 25; + private int FieldSpace = 10; + private float FieldSize = 100; + + private int PreviewStream = -1; + private int SelectedField = -1; + + private EStatus Action; + + public PartyScreenTicTacToeMain() + { + } + + protected override void Init() + { + base.Init(); + + _ThemeName = "PartyScreenTicTacToeMain"; + _ThemeTexts = new string[] { TextPopupReallyExit, TextTeamChoosing, TextNextPlayerT1, TextNextPlayerT2, TextNextPlayerNameT1, TextNextPlayerNameT2 }; + _ThemeButtons = new string[] { ButtonNextRound, ButtonBack, ButtonExit, ButtonPopupYes, ButtonPopupNo, ButtonField, ButtonJokerRandomT1, ButtonJokerRandomT2, ButtonJokerRetryT1, ButtonJokerRetryT2 }; + _ThemeStatics = new string[] { StaticPopupBG, StaticAvatarT1, StaticAvatarT2 }; + _ScreenVersion = ScreenVersion; + + Data = new DataFromScreen(); + FromScreenMain config = new FromScreenMain(); + GameData = new DataToScreenMain(); + config.SingRoundNr = 1; + config.Rounds = new List(); + config.Songs = new List(); + config.FadeToNameSelection = false; + config.FadeToSinging = false; + Data.ScreenMain = config; + + Fields = new List(); + } + + public override void LoadTheme(string XmlPath) + { + base.LoadTheme(XmlPath); + + CreateFields(); + Buttons[htButtons(ButtonField)].Visible = false; + } + + public override void DataToScreen(object ReceivedData) + { + DataToScreenMain config = new DataToScreenMain(); + + try + { + config = (DataToScreenMain)ReceivedData; + GameData = config; + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode screen TicTacToe main. Can't cast received data from game mode " + _ThemeName + ". " + e.Message); ; + } + + } + + public override bool HandleInput(KeyEvent KeyEvent) + { + base.HandleInput(KeyEvent); + + if (KeyEvent.KeyPressed) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Back: + case Keys.Escape: + if (!ExitPopupVisible) + if (GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected) + Back(); + else + ShowPopup(true); + else + ShowPopup(false); + break; + + case Keys.Enter: + if (!ExitPopupVisible) + { + if (Buttons[htButtons(ButtonNextRound)].Selected) + NextRound(); + if (Buttons[htButtons(ButtonBack)].Selected && GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected) + Back(); + if (Buttons[htButtons(ButtonExit)].Selected && (GameData.CurrentRoundNr > 1 || Action == EStatus.FieldSelected)) + ShowPopup(true); + } + else + { + if (Buttons[htButtons(ButtonPopupYes)].Selected) + EndParty(); + if (Buttons[htButtons(ButtonPopupNo)].Selected) + ShowPopup(false); + } + break; + } + } + return true; + } + + public override bool HandleMouse(MouseEvent MouseEvent) + { + base.HandleMouse(MouseEvent); + + if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (!ExitPopupVisible) + { + if (Buttons[htButtons(ButtonNextRound)].Selected) + NextRound(); + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + if (Buttons[htButtons(ButtonExit)].Selected) + ShowPopup(true); + for (int i = 0; i < GameData.NumFields; i++) + { + switch (Action) + { + case EStatus.FieldChoosing: + if (Fields[i].Button.Selected) + { + SelectedField = i; + FieldSelected(); + } + break; + + case EStatus.JokerRetry: + if (Fields[i].Button.Selected) + { + SelectedField = i; + FieldSelected(); + } + break; + } + + } + } + else + { + if (Buttons[htButtons(ButtonPopupYes)].Selected) + EndParty(); + if (Buttons[htButtons(ButtonPopupNo)].Selected) + ShowPopup(false); + } + } + + if (MouseEvent.RB) + { + if (!ExitPopupVisible) + if (GameData.CurrentRoundNr == 1 && Action != EStatus.FieldSelected) + Back(); + else + ShowPopup(true); + else + ShowPopup(false); + } + + if (MouseEvent.Wheel != 0) + { + } + + return true; + } + + public override void OnShow() + { + base.OnShow(); + + PreviewStream = -1; + + if (GameData.CurrentRoundNr == 1) + { + SelectedField = -1; + Buttons[htButtons(ButtonBack)].Visible = true; + Buttons[htButtons(ButtonExit)].Visible = false; + } + else + { + Buttons[htButtons(ButtonBack)].Visible = false; + Buttons[htButtons(ButtonExit)].Visible = true; + } + + if (GameData.CurrentRoundNr <= GameData.NumFields) + { + Action = EStatus.FieldChoosing; + Texts[htTexts(TextTeamChoosing)].Color = _Base.Theme.GetPlayerColor(GameData.Team + 1); + Texts[htTexts(TextTeamChoosing)].Text = _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + _Base.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); + Texts[htTexts(TextNextPlayerT1)].Visible = false; + Texts[htTexts(TextNextPlayerT2)].Visible = false; + Texts[htTexts(TextNextPlayerNameT1)].Visible = false; + Texts[htTexts(TextNextPlayerNameT2)].Visible = false; + Statics[htStatics(StaticAvatarT1)].Visible = false; + Statics[htStatics(StaticAvatarT2)].Visible = false; + Buttons[htButtons(ButtonJokerRandomT1)].Visible = false; + Buttons[htButtons(ButtonJokerRandomT2)].Visible = false; + Buttons[htButtons(ButtonJokerRetryT1)].Visible = false; + Buttons[htButtons(ButtonJokerRetryT2)].Visible = false; + Buttons[htButtons(ButtonNextRound)].Visible = false; + //Texts[htTexts(TextFinishMessage)].Visible = false; + //Texts[htTexts(TextFinishPlayerWin)].Visible = false; + SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); + } + else + { + Action = EStatus.None; + Buttons[htButtons(ButtonNextRound)].Visible = false; + //Texts[htTexts(TextFinishMessage)].Visible = true; + //Texts[htTexts(TextFinishPlayerWin)].Visible = true; + //Texts[htTexts(TextFinishPlayerWin)].Text = GetPlayerWinString(); + SetInteractionToButton(Buttons[htButtons(ButtonExit)]); + } + + UpdateFields(); + UpdateFieldContents(); + + ShowPopup(false); + } + + public override bool UpdateGame() + { + return true; + } + + public override bool Draw() + { + base.Draw(); + return true; + } + + public override void OnClose() + { + base.OnClose(); + _Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f); + } + + private void CreateFields() + { + for (int i = 0; i < 25; i++) + { + Field f = new Field(); + f.Button = GetNewButton(Buttons[htButtons(ButtonField)]); + f.Button.Visible = false; + f.Content = new Round(); + AddButton(f.Button); + Fields.Add(f); + } + } + + private void UpdateFields() + { + int NumOneRow = (int)Math.Sqrt((double)GameData.NumFields); + float FieldSizeY = (_Base.Settings.GetRenderH() - 150 - NumOneRow * FieldSpace) / NumOneRow; + float FieldSizeX = (_Base.Settings.GetRenderW() - 300 - NumOneRow * FieldSpace) / NumOneRow; + if (FieldSizeX < FieldSizeY) + FieldSize = FieldSizeX; + else + FieldSize = FieldSizeY; + FieldFirstX = _Base.Settings.GetRenderW() / 2 - (NumOneRow * FieldSize + (NumOneRow - 1) * FieldSpace) / 2; + FieldFirstY = 140 + (_Base.Settings.GetRenderH() - 140) / 2 - (NumOneRow * FieldSize + NumOneRow * FieldSpace) / 2; + int row = 0; + int column = 0; + float x = FieldFirstX; + float y = FieldFirstY; + for (int i = 0; i < Fields.Count; i++) + { + if (i < GameData.NumFields) + { + Fields[i].Button.Rect.W = FieldSize; + Fields[i].Button.Rect.H = FieldSize; + Fields[i].Button.Rect.X = x; + Fields[i].Button.Rect.Y = y; + Fields[i].Button.Visible = true; + Fields[i].Button.Enabled = true; + column++; + if ((i+1) >= NumOneRow * (row+1)) + { + column = 0; + row++; + y = FieldFirstY + FieldSize * row + FieldSpace * row; + x = FieldFirstX; + } + else + x = FieldFirstX + FieldSize * column + FieldSpace * column; + } + else + { + Fields[i].Button.Visible = false; + Fields[i].Button.Enabled = false; + } + } + } + + private void UpdateFieldContents() + { + for (int i = 0; i < GameData.Rounds.Count; i++) + { + Fields[i].Button.Enabled = true; + Fields[i].Button.Texture = Buttons[htButtons(ButtonField)].Texture; + Fields[i].Button.Color = Buttons[htButtons(ButtonField)].Color; + Fields[i].Button.SColor = Buttons[htButtons(ButtonField)].SColor; + Fields[i].Content = GameData.Rounds[i]; + if (Fields[i].Content.Finished) + { + Fields[i].Button.Enabled = false; + Fields[i].Button.Texture = _Base.Songs.GetSongByID(Fields[i].Content.SongID).CoverTextureBig; + Fields[i].Button.Color = _Base.Theme.GetPlayerColor(Fields[i].Content.Winner); + Fields[i].Button.SColor = _Base.Theme.GetPlayerColor(Fields[i].Content.Winner); + } + if (Action == EStatus.FieldSelected && SelectedField == i) + { + Fields[i].Button.Texture = _Base.Songs.GetSongByID(Fields[i].Content.SongID).CoverTextureBig; + Fields[i].Button.Color = new SColorF(1, 1, 1, 1); + Fields[i].Button.SColor = new SColorF(1, 1, 1, 1); + Fields[i].Button.Enabled = false; + } + if (Action == EStatus.JokerRetry && Fields[i].Content.Finished) + { + Fields[i].Button.Enabled = true; + } + if (Action == EStatus.JokerRetry && !Fields[i].Content.Finished) + { + Fields[i].Button.Enabled = false; + } + if(Action == EStatus.FieldSelected) + { + Fields[i].Button.Enabled = false; + } + } + } + + private void FieldSelected() + { + int SongID = 0; + if (GameData.Songs.Count > 0) + { + SongID = GameData.Songs[0]; + GameData.Songs.RemoveAt(0); + } + Menu.SongMenu.CSong Song = _Base.Songs.GetSongByID(SongID); + if(_Base.BackgroundMusic.IsPlaying()) + _Base.BackgroundMusic.Pause(); + PreviewStream = _Base.Sound.Load(Song.GetMP3(), false); + _Base.Sound.SetPosition(PreviewStream, Song.PreviewStart); + _Base.Sound.SetStreamVolume(PreviewStream, 0f); + _Base.Sound.Play(PreviewStream); + _Base.Sound.Fade(PreviewStream, _Base.Config.GetBackgroundMusicVolume(), 1f); + Action = EStatus.FieldSelected; + Fields[SelectedField].Content.SongID = SongID; + GameData.Rounds[SelectedField].SongID = SongID; + UpdateFieldContents(); + + Texts[htTexts(TextNextPlayerT1)].Visible = true; + Texts[htTexts(TextNextPlayerT2)].Visible = true; + Texts[htTexts(TextNextPlayerNameT1)].Visible = true; + Texts[htTexts(TextNextPlayerNameT2)].Visible = true; + SProfile[] profiles = _Base.Profiles.GetProfiles(); + Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; + Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; + Statics[htStatics(StaticAvatarT1)].Visible = true; + Statics[htStatics(StaticAvatarT2)].Visible = true; + Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; + Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; + + Buttons[htButtons(ButtonJokerRandomT1)].Visible = true; + Buttons[htButtons(ButtonJokerRandomT2)].Visible = true; + Buttons[htButtons(ButtonJokerRandomT1)].Text.Text = GameData.NumJokerRandom[0].ToString(); + Buttons[htButtons(ButtonJokerRandomT2)].Text.Text = GameData.NumJokerRandom[1].ToString(); + Buttons[htButtons(ButtonJokerRetryT1)].Visible = true; + Buttons[htButtons(ButtonJokerRetryT2)].Visible = true; + Buttons[htButtons(ButtonJokerRetryT1)].Text.Text = GameData.NumJokerRetry[0].ToString(); + Buttons[htButtons(ButtonJokerRetryT2)].Text.Text = GameData.NumJokerRetry[1].ToString(); + + Buttons[htButtons(ButtonNextRound)].Visible = true; + Buttons[htButtons(ButtonExit)].Visible = true; + Buttons[htButtons(ButtonBack)].Visible = false; + } + + private void NextRound() + { + _Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f); + Data.ScreenMain.Rounds = GameData.Rounds; + Data.ScreenMain.FadeToNameSelection = false; + Data.ScreenMain.FadeToSinging = true; + Data.ScreenMain.Songs = GameData.Songs; + Data.ScreenMain.SingRoundNr = SelectedField; + _PartyMode.DataFromScreen(_ThemeName, Data); + } + + private void EndParty() + { + _Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f); + FadeTo(EScreens.ScreenParty); + } + + private void ShowPopup(bool Visible) + { + ExitPopupVisible = Visible; + + Statics[htStatics(StaticPopupBG)].Visible = ExitPopupVisible; + Texts[htTexts(TextPopupReallyExit)].Visible = ExitPopupVisible; + Buttons[htButtons(ButtonPopupYes)].Visible = ExitPopupVisible; + Buttons[htButtons(ButtonPopupNo)].Visible = ExitPopupVisible; + + if (ExitPopupVisible) + SetInteractionToButton(Buttons[htButtons(ButtonPopupNo)]); + } + + private void Back() + { + _Base.Sound.FadeAndStop(PreviewStream, 0f, 0.5f); + Data.ScreenMain.FadeToNameSelection = true; + Data.ScreenMain.FadeToSinging = false; + Data.ScreenMain.SingRoundNr = SelectedField; + _PartyMode.DataFromScreen(_ThemeName, Data); + } + + private string GetPlayerWinString() + { + string s = ""; + SProfile[] profiles = _Base.Profiles.GetProfiles(); + /** + for (int i = 0; i < GameState.ResultTable.Count; i++) + { + if (i > 0) + s += ", "; + if (GameState.ResultTable[i].Position == 1) + s += profiles[GameState.ResultTable[i].PlayerID].PlayerName; + else + break; + } + **/ + return s; + } + } +} diff --git a/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs b/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs new file mode 100644 index 00000000..a566b568 --- /dev/null +++ b/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs @@ -0,0 +1,640 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +using Vocaluxe.Menu; + +namespace Vocaluxe.PartyModes +{ + public class PartyScreenTicTacToeNames : CMenuParty + { + // Version number for theme files. Increment it, if you've changed something on the theme files! + const int ScreenVersion = 1; + + const string ButtonNext = "ButtonNext"; + const string ButtonBack = "ButtonBack"; + const string ButtonPlayerDestination = "ButtonPlayerDestination"; + const string ButtonPlayerChoose = "ButtonPlayerChoose"; + + private List PlayerChooseButtons; + private List PlayerDestinationButtons; + //PlayerDestinationButtons-Option + private const int PlayerDestinationButtonsNumH = 10; + private const int PlayerDestinationButtonsNumW = 2; + private const int PlayerDestinationButtonsFirstX = 58; + private const int PlayerDestinationButtonsFirstY = 400; + private const int PlayerDestinationButtonsSpaceH = 15; + private const int PlayerDestinationButtonsSpaceW = 25; + //PlayerChooseButtons-Option + private List PlayerChooseButtonsVisibleProfiles; + private const int PlayerChooseButtonsNumH = 10; + private const int PlayerChooseButtonsNumW = 2; + private const int PlayerChooseButtonsFirstX = 58; + private const int PlayerChooseButtonsFirstY = 105; + private const int PlayerChooseButtonsSpaceH = 15; + private const int PlayerChooseButtonsSpaceW = 25; + private int PlayerChooseButtonsOffset = 0; + + private CStatic chooseAvatarStatic; + private bool SelectingMouseActive = false; + private int OldMouseX = 0; + private int OldMouseY = 0; + private int SelectedPlayerNr = -1; + private bool ButtonsAdded = false; + + private int NumPlayerTeam1 = 2; + private int NumPlayerTeam2 = 2; + + private DataFromScreen Data; + + private class CPlayerChooseButton + { + public CButton Button; + public int ProfileID; + } + + public PartyScreenTicTacToeNames() + { + } + + protected override void Init() + { + base.Init(); + + chooseAvatarStatic = GetNewStatic(); + chooseAvatarStatic.Visible = false; + + PlayerChooseButtonsVisibleProfiles = new List(); + + Data.ScreenNames.ProfileIDsTeam1 = new List(); + Data.ScreenNames.ProfileIDsTeam2 = new List(); + + _ThemeName = "PartyScreenTicTacToeNames"; + List buttons = new List(); + _ThemeButtons = new string[] { ButtonBack, ButtonNext, ButtonPlayerDestination, ButtonPlayerChoose }; + _ScreenVersion = ScreenVersion; + + Data = new DataFromScreen(); + FromScreenNames names = new FromScreenNames(); + names.FadeToConfig = false; + names.FadeToMain = false; + names.ProfileIDsTeam1 = new List(); + names.ProfileIDsTeam2 = new List(); + Data.ScreenNames = names; + } + + public override void LoadTheme(string XmlPath) + { + base.LoadTheme(XmlPath); + } + + public override void DataToScreen(object ReceivedData) + { + DataToScreenNames config = new DataToScreenNames(); + + try + { + config = (DataToScreenNames)ReceivedData; + Data.ScreenNames.ProfileIDsTeam1 = config.ProfileIDsTeam1; + Data.ScreenNames.ProfileIDsTeam2 = config.ProfileIDsTeam2; + if (Data.ScreenNames.ProfileIDsTeam1 == null) + Data.ScreenNames.ProfileIDsTeam1 = new List(); + if (Data.ScreenNames.ProfileIDsTeam2 == null) + Data.ScreenNames.ProfileIDsTeam2 = new List(); + + NumPlayerTeam1 = config.NumPlayerTeam1; + NumPlayerTeam2 = config.NumPlayerTeam2; + + while (Data.ScreenNames.ProfileIDsTeam1.Count > NumPlayerTeam1) + { + Data.ScreenNames.ProfileIDsTeam1.RemoveAt(Data.ScreenNames.ProfileIDsTeam1.Count - 1); + } + while (Data.ScreenNames.ProfileIDsTeam2.Count > NumPlayerTeam2) + { + Data.ScreenNames.ProfileIDsTeam2.RemoveAt(Data.ScreenNames.ProfileIDsTeam2.Count - 1); + } + + + } + catch (Exception e) + { + _Base.Log.LogError("Error in party mode screen TicTacToe names. Can't cast received data from game mode " + _ThemeName + ". " + e.Message); ; + } + + } + + public override bool HandleInput(KeyEvent KeyEvent) + { + base.HandleInput(KeyEvent); + + if (KeyEvent.KeyPressed) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Back: + case Keys.Escape: + Back(); + break; + + case Keys.Enter: + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + + if (!OnAdd()) + OnRemove(); + break; + + case Keys.Delete: + OnRemove(); + break; + } + } + return true; + } + + public override bool HandleMouse(MouseEvent MouseEvent) + { + base.HandleMouse(MouseEvent); + + + //Check if LeftButton is hold and Select-Mode inactive + if (MouseEvent.LBH && !SelectingMouseActive) + { + //Save mouse-coords + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + //Check if mouse if over tile + for (int i = 0; i < PlayerChooseButtons.Count; i++) + { + if (PlayerChooseButtons[i].Button.Selected) + { + SelectedPlayerNr = PlayerChooseButtons[i].ProfileID; + if (SelectedPlayerNr != -1) + { + //Activate mouse-selecting + SelectingMouseActive = true; + //Update of Drag/Drop-Texture + chooseAvatarStatic.Visible = true; + chooseAvatarStatic.Rect = PlayerChooseButtons[i].Button.Rect; + chooseAvatarStatic.Rect.Z = -100; + chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1); + chooseAvatarStatic.Texture = _Base.Profiles.GetProfiles()[SelectedPlayerNr].Avatar.Texture; + } + } + } + } + + //Check if LeftButton is hold and Select-Mode active + if (MouseEvent.LBH && SelectingMouseActive) + { + //Update coords for Drag/Drop-Texture + chooseAvatarStatic.Rect.X += (MouseEvent.X - OldMouseX); + chooseAvatarStatic.Rect.Y += (MouseEvent.Y - OldMouseY); + OldMouseX = MouseEvent.X; + OldMouseY = MouseEvent.Y; + } + // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar + else if (SelectingMouseActive) + { + //Check if really a player was selected + if (SelectedPlayerNr != -1) + { + //Foreach Drop-Area + for (int i = 0; i < PlayerDestinationButtons.Count; i++) + { + //Check first, if area is "active" + if (PlayerDestinationButtons[i].Visible == true) + { + //Check if Mouse is in area + if (CHelper.IsInBounds(PlayerDestinationButtons[i].Rect, MouseEvent)) + { + int added = -1; + //Add Player-ID to list. + if (i - PlayerDestinationButtonsNumW < 0) + { + if (Data.ScreenNames.ProfileIDsTeam1.Count < (i + 1)) + { + Data.ScreenNames.ProfileIDsTeam1.Add(SelectedPlayerNr); + added = Data.ScreenNames.ProfileIDsTeam1.Count - 1; + } + else if (Data.ScreenNames.ProfileIDsTeam1.Count >= (i + 1)) + { + Data.ScreenNames.ProfileIDsTeam1[i] = SelectedPlayerNr; + added = i; + } + } + else if (i - PlayerDestinationButtonsNumW >= 0) + { + if (Data.ScreenNames.ProfileIDsTeam2.Count < (i + 1)) + { + Data.ScreenNames.ProfileIDsTeam2.Add(SelectedPlayerNr); + added = Data.ScreenNames.ProfileIDsTeam2.Count - 1; + } + else if (Data.ScreenNames.ProfileIDsTeam2.Count >= (i + 1)) + { + Data.ScreenNames.ProfileIDsTeam2[i] = SelectedPlayerNr; + added = i; + } + } + UpdateButtonNext(); + //Update texture and name + PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f); + PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1); + PlayerDestinationButtons[added].Texture = chooseAvatarStatic.Texture; + PlayerDestinationButtons[added].STexture = chooseAvatarStatic.Texture; + PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[SelectedPlayerNr].PlayerName; + //Update Tiles-List + UpdateButtonPlayerChoose(); + } + } + } + SelectedPlayerNr = -1; + } + //Reset variables + SelectingMouseActive = false; + chooseAvatarStatic.Visible = false; + } + + if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (Buttons[htButtons(ButtonBack)].Selected) + Back(); + + if (Buttons[htButtons(ButtonNext)].Selected) + Next(); + + if (!OnAdd()) + OnRemove(); + } + + if (MouseEvent.RB) + { + Back(); + } + + return true; + } + + public override void OnShow() + { + base.OnShow(); + + if (!ButtonsAdded) + { + AddButtonPlayerDestination(); + AddButtonPlayerChoose(); + ButtonsAdded = true; + } + + UpdateButtonPlayerDestination(); + UpdateButtonPlayerChoose(); + + UpdateButtonNext(); + } + + public override bool UpdateGame() + { + return true; + } + + public override bool Draw() + { + base.Draw(); + if (chooseAvatarStatic.Visible) + chooseAvatarStatic.Draw(); + return true; + } + + public override void OnClose() + { + base.OnClose(); + } + + private void AddButtonPlayerDestination() + { + Buttons[htButtons(ButtonPlayerDestination)].Visible = false; + PlayerDestinationButtons = new List(); + int row = 0; + int column = 0; + for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++) + { + CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerDestination)]); + b.Rect.X = PlayerDestinationButtonsFirstX + column * (b.Rect.W + PlayerDestinationButtonsSpaceH); + b.Rect.Y = PlayerDestinationButtonsFirstY + row * (b.Rect.H + PlayerDestinationButtonsSpaceW); + PlayerDestinationButtons.Add(b); + column++; + if (column >= PlayerDestinationButtonsNumH) + { + row++; + column = 0; + } + b.Visible = true; + b.Enabled = false; + AddButton(b); + } + } + + private void AddButtonPlayerChoose() + { + Buttons[htButtons(ButtonPlayerChoose)].Visible = false; + PlayerChooseButtons = new List(); + int row = 0; + int column = 0; + for (int i = 1; i <= PlayerChooseButtonsNumH * PlayerChooseButtonsNumW; i++) + { + CButton b = GetNewButton(Buttons[htButtons(ButtonPlayerChoose)]); + b.Rect.X = PlayerChooseButtonsFirstX + column * (b.Rect.W + PlayerChooseButtonsSpaceH); + b.Rect.Y = PlayerChooseButtonsFirstY + row * (b.Rect.H + PlayerChooseButtonsSpaceW); + CPlayerChooseButton pcb = new CPlayerChooseButton(); + pcb.Button = b; + pcb.ProfileID = -1; + PlayerChooseButtons.Add(pcb); + column++; + if (column >= PlayerChooseButtonsNumH) + { + row++; + column = 0; + } + b.Visible = true; + b.Enabled = false; + AddButton(b); + } + } + + private void UpdateButtonPlayerChoose() + { + UpdateVisibleProfiles(); + if ((PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * (PlayerChooseButtonsOffset + 1) - PlayerChooseButtonsVisibleProfiles.Count >= (PlayerChooseButtonsNumW * PlayerChooseButtonsNumH) * PlayerChooseButtonsOffset) + { + UpdateButtonPlayerChoose(PlayerChooseButtonsOffset - 1); + } + else + { + UpdateButtonPlayerChoose(PlayerChooseButtonsOffset); + } + } + + private void UpdateButtonPlayerChoose(int Offset) + { + int NumButtonPlayerChoose = PlayerChooseButtonsNumW * PlayerChooseButtonsNumH; + if (Offset < 0) + Offset = 0; + + if (NumButtonPlayerChoose * (Offset + 1) - PlayerChooseButtonsVisibleProfiles.Count <= NumButtonPlayerChoose) + { + for (int i = 0; i < NumButtonPlayerChoose; i++) + { + if ((i + Offset * NumButtonPlayerChoose) < PlayerChooseButtonsVisibleProfiles.Count) + { + PlayerChooseButtons[i].ProfileID = PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]; + PlayerChooseButtons[i].Button.Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].PlayerName; + PlayerChooseButtons[i].Button.Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture; + PlayerChooseButtons[i].Button.STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtonsVisibleProfiles[i + Offset * NumButtonPlayerChoose]].Avatar.Texture; + PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f); + PlayerChooseButtons[i].Button.SColor = new SColorF(1, 1, 1, 1); + PlayerChooseButtons[i].Button.Enabled = true; + } + else + { + PlayerChooseButtons[i].ProfileID = -1; + PlayerChooseButtons[i].Button.Text.Text = String.Empty; + PlayerChooseButtons[i].Button.Texture = Buttons[htButtons(ButtonPlayerChoose)].Texture; + PlayerChooseButtons[i].Button.STexture = Buttons[htButtons(ButtonPlayerChoose)].STexture; + PlayerChooseButtons[i].Button.Color = Buttons[htButtons(ButtonPlayerChoose)].Color; + PlayerChooseButtons[i].Button.SColor = Buttons[htButtons(ButtonPlayerChoose)].SColor; + PlayerChooseButtons[i].Button.Enabled = false; + } + } + } + } + + private void UpdateVisibleProfiles() + { + PlayerChooseButtonsVisibleProfiles.Clear(); + for (int i = 0; i < _Base.Profiles.GetProfiles().Length; i++) + { + bool visible = false; + //Show profile only if active + if (_Base.Profiles.GetProfiles()[i].Active == EOffOn.TR_CONFIG_ON) + { + visible = true; + + for (int p = 0; p < Data.ScreenNames.ProfileIDsTeam1.Count; p++) + { + //Don't show profile if is selected + if (Data.ScreenNames.ProfileIDsTeam1[p] == i) + { + visible = false; + break; + } + } + + for (int p = 0; p < Data.ScreenNames.ProfileIDsTeam2.Count; p++) + { + //Don't show profile if is selected + if (Data.ScreenNames.ProfileIDsTeam2[p] == i) + { + visible = false; + break; + } + } + } + if (visible) + { + PlayerChooseButtonsVisibleProfiles.Add(i); + } + } + } + + private void UpdateButtonPlayerDestination() + { + for (int i = 0; i < PlayerDestinationButtons.Count / 2; i++) + { + if (NumPlayerTeam1 > i) + { + PlayerDestinationButtons[i].Visible = true; + PlayerDestinationButtons[i].Enabled = true; + } + else + { + PlayerDestinationButtons[i].Visible = false; + PlayerDestinationButtons[i].Enabled = false; + } + } + for (int i = 0; i < PlayerDestinationButtons.Count / 2; i++) + { + if (NumPlayerTeam2 > i) + { + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Visible = true; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = true; + } + else + { + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Visible = false; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = false; + } + } + for (int i = 0; i < NumPlayerTeam1; i++) + { + if (i < Data.ScreenNames.ProfileIDsTeam1.Count) + { + if (Data.ScreenNames.ProfileIDsTeam1[i] != -1) + { + PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f); + PlayerDestinationButtons[i].SColor = new SColorF(1, 1, 1, 1); + PlayerDestinationButtons[i].Texture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].Avatar.Texture; + PlayerDestinationButtons[i].STexture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].Avatar.Texture; + PlayerDestinationButtons[i].Text.Text = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam1[i]].PlayerName; + PlayerDestinationButtons[i].Enabled = true; + } + } + else + { + PlayerDestinationButtons[i].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; + PlayerDestinationButtons[i].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; + PlayerDestinationButtons[i].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; + PlayerDestinationButtons[i].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i].Text.Text = String.Empty; + PlayerDestinationButtons[i].Enabled = false; + } + } + for (int i = 0; i < NumPlayerTeam2; i++) + { + if (i < Data.ScreenNames.ProfileIDsTeam2.Count) + { + if (Data.ScreenNames.ProfileIDsTeam2[i] != -1) + { + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = new SColorF(1, 1, 1, 0.6f); + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = new SColorF(1, 1, 1, 1); + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].Avatar.Texture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].Avatar.Texture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Text.Text = _Base.Profiles.GetProfiles()[Data.ScreenNames.ProfileIDsTeam2[i]].PlayerName; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = true; + } + } + else + { + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Color = Buttons[htButtons(ButtonPlayerDestination)].Color; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].SColor = Buttons[htButtons(ButtonPlayerDestination)].SColor; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Texture = Buttons[htButtons(ButtonPlayerDestination)].Texture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].STexture = Buttons[htButtons(ButtonPlayerDestination)].STexture; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Text.Text = String.Empty; + PlayerDestinationButtons[i + PlayerDestinationButtonsNumH].Enabled = false; + } + } + } + + private void UpdateButtonNext() + { + if (Data.ScreenNames.ProfileIDsTeam1.Count == NumPlayerTeam1 && Data.ScreenNames.ProfileIDsTeam2.Count == NumPlayerTeam2) + { + Buttons[htButtons(ButtonNext)].Visible = true; + SetInteractionToButton(Buttons[htButtons(ButtonNext)]); + } + else + Buttons[htButtons(ButtonNext)].Visible = false; + } + + private bool OnAdd() + { + for (int i = 0; i < PlayerChooseButtons.Count; i++) + { + if (PlayerChooseButtons[i].Button.Selected && PlayerChooseButtons[i].ProfileID != -1) + { + if (Data.ScreenNames.ProfileIDsTeam1.Count < NumPlayerTeam1) + { + Data.ScreenNames.ProfileIDsTeam1.Add(PlayerChooseButtons[i].ProfileID); + int added = Data.ScreenNames.ProfileIDsTeam1.Count - 1; + UpdateButtonNext(); + //Update texture and name + PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f); + PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1); + PlayerDestinationButtons[added].Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; + PlayerDestinationButtons[added].STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; + PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].PlayerName; + PlayerDestinationButtons[added].Enabled = true; + //Update Tiles-List + UpdateButtonPlayerChoose(); + CheckInteraction(); + return true; + } + else if (Data.ScreenNames.ProfileIDsTeam2.Count < NumPlayerTeam2) + { + Data.ScreenNames.ProfileIDsTeam2.Add(PlayerChooseButtons[i].ProfileID); + int added = (Data.ScreenNames.ProfileIDsTeam2.Count - 1) + PlayerDestinationButtonsNumH; + UpdateButtonNext(); + //Update texture and name + PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f); + PlayerDestinationButtons[added].SColor = new SColorF(1, 1, 1, 1); + PlayerDestinationButtons[added].Texture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; + PlayerDestinationButtons[added].STexture = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].Avatar.Texture; + PlayerDestinationButtons[added].Text.Text = _Base.Profiles.GetProfiles()[PlayerChooseButtons[i].ProfileID].PlayerName; + PlayerDestinationButtons[added].Enabled = true; + //Update Tiles-List + UpdateButtonPlayerChoose(); + CheckInteraction(); + return true; + } + } + } + return false; + } + + private bool OnRemove() + { + for (int i = 0; i < PlayerDestinationButtonsNumH; i++) + { + if (PlayerDestinationButtons[i].Selected) + { + if ((i + 1) <= Data.ScreenNames.ProfileIDsTeam1.Count) + { + Data.ScreenNames.ProfileIDsTeam1.RemoveAt(i); + UpdateButtonNext(); + UpdateButtonPlayerDestination(); + UpdateButtonPlayerChoose(); + CheckInteraction(); + return true; + } + } + } + for (int i = PlayerDestinationButtonsNumW; i < PlayerDestinationButtonsNumH*2; i++) + { + if (PlayerDestinationButtons[i].Selected) + { + if (((i-PlayerDestinationButtonsNumW) + 1) <= Data.ScreenNames.ProfileIDsTeam2.Count) + { + Data.ScreenNames.ProfileIDsTeam2.RemoveAt(i); + UpdateButtonNext(); + UpdateButtonPlayerDestination(); + UpdateButtonPlayerChoose(); + CheckInteraction(); + return true; + } + } + } + return false; + } + + private void Back() + { + Data.ScreenNames.FadeToConfig = true; + Data.ScreenNames.FadeToMain = false; + _PartyMode.DataFromScreen(_ThemeName, Data); + } + + private void Next() + { + Data.ScreenNames.FadeToConfig = false; + Data.ScreenNames.FadeToMain = true; + _PartyMode.DataFromScreen(_ThemeName, Data); + } + } +} diff --git a/Vocaluxe.sln b/Vocaluxe.sln index 3f653674..3c53f336 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C# Express 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2012 for Windows Desktop Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocaluxe.csproj", "{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}" ProjectSection(ProjectDependencies) = postProject {6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679} @@ -9,7 +9,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VocaluxeLib", "VocaluxeLib\VocaluxeLib.csproj", "{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "PartyModeChallenge\PartyModeChallenge.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593679}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeTicTacToe", "PartyModeTicTacToe\PartyModeTicTacToe.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593679}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "PartyModeChallenge\PartyModeChallenge.csproj", "{162341B8-965F-46BC-9826-86B9A1E7F984}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -57,6 +59,22 @@ Global {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 {6F3E1874-F28A-40E9-AFBD-31934D593679}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugLinux|x64.ActiveCfg = DebugLinux|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugLinux|x64.Build.0 = DebugLinux|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugLinux|x86.ActiveCfg = DebugLinux|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugLinux|x86.Build.0 = DebugLinux|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugWin|x64.ActiveCfg = DebugWin|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugWin|x64.Build.0 = DebugWin|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugWin|x86.ActiveCfg = DebugWin|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.DebugWin|x86.Build.0 = DebugWin|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseLinux|x64.Build.0 = ReleaseLinux|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseLinux|x86.Build.0 = ReleaseLinux|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseWin|x64.ActiveCfg = ReleaseWin|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseWin|x64.Build.0 = ReleaseWin|x64 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseWin|x86.ActiveCfg = ReleaseWin|x86 + {162341B8-965F-46BC-9826-86B9A1E7F984}.ReleaseWin|x86.Build.0 = ReleaseWin|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index e4bcb757..fd63e4d3 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -746,6 +746,16 @@ namespace Vocaluxe.Base class BPlaylist : IPlaylist { + public string[] GetPlaylistNames() + { + List Names = new List(); + for (int i = 0; i < CPlaylists.Playlists.Length; i++) + { + Names.Add(CPlaylists.Playlists[i].PlaylistName); + } + return Names.ToArray(); + } + public void SetPlaylistName(int PlaylistID, string Name) { CPlaylists.SetPlaylistName(PlaylistID, Name); diff --git a/VocaluxeLib/Menu/IMenu.cs b/VocaluxeLib/Menu/IMenu.cs index f92c2008..1336872f 100644 --- a/VocaluxeLib/Menu/IMenu.cs +++ b/VocaluxeLib/Menu/IMenu.cs @@ -289,6 +289,8 @@ namespace Vocaluxe.Menu public interface IPlaylist { + string[] GetPlaylistNames(); + string GetPlaylistName(int PlaylistID); void SetPlaylistName(int PlaylistID, string Name); void DeletePlaylist(int PlaylistID); @@ -308,6 +310,10 @@ namespace Vocaluxe.Menu CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex); } + public interface IPlaylists + { + } + [Flags] public enum EModifier { From 08b592f7301b82659be442020db363b722956db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Sun, 30 Dec 2012 19:31:25 +0100 Subject: [PATCH 05/14] Added functions to joker-buttons. --- .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 38 +----- .../PartyScreenTicTacToeMain.cs | 109 ++++++++++++++++-- 2 files changed, 106 insertions(+), 41 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index a00fb8db..5811d5a8 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -444,36 +444,6 @@ namespace Vocaluxe.PartyModes _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); } - public bool UseJoker(int TeamNr, int JokerNum) - { - switch (JokerNum) - { - //Random-Joker - case 0: - if (GameData.NumJokerRandom[TeamNr] > 0) - { - GameData.NumJokerRandom[TeamNr]--; - return true; - } - else - { - return false; - } - - case 1: - if (GameData.NumJokerRetry[TeamNr] > 0) - { - GameData.NumJokerRetry[TeamNr]--; - return true; - } - else - { - return false; - } - } - return false; - } - private void CreateRounds() { //Prepare Player-IDs @@ -482,7 +452,7 @@ namespace Vocaluxe.PartyModes List IDs1 = new List(); List IDs2 = new List(); //Add IDs to team-list - while (Team1.Count <= NumFields) + while (Team1.Count <= GameData.NumFields) { if (IDs1.Count == 0) for (int i = 0; i < GameData.NumPlayerTeam1; i++) @@ -490,19 +460,19 @@ namespace Vocaluxe.PartyModes if (IDs2.Count == 0) for (int i = 0; i < GameData.NumPlayerTeam2; i++) IDs2.Add(i); - if (Team1.Count <= NumFields) + if (Team1.Count <= GameData.NumFields) { Team1.Add(IDs1[_Base.Game.GetRandom(IDs1.Count - 1)]); IDs1.Remove(Team1[Team1.Count - 1]); } - if (Team2.Count <= NumFields) + if (Team2.Count <= GameData.NumFields) { Team2.Add(IDs2[_Base.Game.GetRandom(IDs2.Count - 1)]); IDs2.Remove(Team2[Team2.Count - 1]); } } - for (int i = 0; i < NumFields; i++) + for (int i = 0; i < GameData.NumFields; i++) { Round r = new Round(); r.SingerTeam1 = Team1[i]; diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs index 562a2913..ec4a4a59 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -63,6 +63,7 @@ namespace Vocaluxe.PartyModes private int PreviewStream = -1; private int SelectedField = -1; + private int OldSelectedField = -1; private EStatus Action; @@ -193,10 +194,21 @@ namespace Vocaluxe.PartyModes if (Fields[i].Button.Selected) { SelectedField = i; - FieldSelected(); + FieldSelectedAgain(); } break; } + } + if(Action == EStatus.FieldSelected) + { + if (Buttons[htButtons(ButtonJokerRandomT1)].Selected) + UseJoker(0, 0); + if (Buttons[htButtons(ButtonJokerRandomT2)].Selected) + UseJoker(1, 0); + if (Buttons[htButtons(ButtonJokerRetryT1)].Selected) + UseJoker(0, 1); + if (Buttons[htButtons(ButtonJokerRetryT2)].Selected) + UseJoker(1, 1); } } @@ -248,8 +260,7 @@ namespace Vocaluxe.PartyModes if (GameData.CurrentRoundNr <= GameData.NumFields) { Action = EStatus.FieldChoosing; - Texts[htTexts(TextTeamChoosing)].Color = _Base.Theme.GetPlayerColor(GameData.Team + 1); - Texts[htTexts(TextTeamChoosing)].Text = _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + _Base.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); + UpdateTeamChoosingMessage(); Texts[htTexts(TextNextPlayerT1)].Visible = false; Texts[htTexts(TextNextPlayerT2)].Visible = false; Texts[htTexts(TextNextPlayerNameT1)].Visible = false; @@ -380,6 +391,7 @@ namespace Vocaluxe.PartyModes } if (Action == EStatus.JokerRetry && Fields[i].Content.Finished) { + Fields[i].Button.SColor = _Base.Theme.GetPlayerColor(GameData.Team+1); Fields[i].Button.Enabled = true; } if (Action == EStatus.JokerRetry && !Fields[i].Content.Finished) @@ -426,6 +438,93 @@ namespace Vocaluxe.PartyModes Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; + UpdateJokerButtons(); + + Buttons[htButtons(ButtonNextRound)].Visible = true; + Buttons[htButtons(ButtonExit)].Visible = true; + Buttons[htButtons(ButtonBack)].Visible = false; + } + + private void FieldSelectedAgain() + { + int SongID = Fields[SelectedField].Content.SongID; + Menu.SongMenu.CSong Song = _Base.Songs.GetSongByID(SongID); + if (_Base.BackgroundMusic.IsPlaying()) + _Base.BackgroundMusic.Pause(); + PreviewStream = _Base.Sound.Load(Song.GetMP3(), false); + _Base.Sound.SetPosition(PreviewStream, Song.PreviewStart); + _Base.Sound.SetStreamVolume(PreviewStream, 0f); + _Base.Sound.Play(PreviewStream); + _Base.Sound.Fade(PreviewStream, _Base.Config.GetBackgroundMusicVolume(), 1f); + Action = EStatus.FieldSelected; + Fields[SelectedField].Content.SongID = SongID; + GameData.Rounds[SelectedField].SongID = SongID; + GameData.Rounds[SelectedField].SingerTeam1 = GameData.Rounds[OldSelectedField].SingerTeam1; + GameData.Rounds[SelectedField].SingerTeam2 = GameData.Rounds[OldSelectedField].SingerTeam2; + UpdateFieldContents(); + + Texts[htTexts(TextNextPlayerT1)].Visible = true; + Texts[htTexts(TextNextPlayerT2)].Visible = true; + Texts[htTexts(TextNextPlayerNameT1)].Visible = true; + Texts[htTexts(TextNextPlayerNameT2)].Visible = true; + SProfile[] profiles = _Base.Profiles.GetProfiles(); + Texts[htTexts(TextNextPlayerNameT1)].Text = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].PlayerName; + Texts[htTexts(TextNextPlayerNameT2)].Text = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].PlayerName; + Statics[htStatics(StaticAvatarT1)].Visible = true; + Statics[htStatics(StaticAvatarT2)].Visible = true; + Statics[htStatics(StaticAvatarT1)].Texture = profiles[GameData.ProfileIDsTeam1[GameData.Rounds[SelectedField].SingerTeam1]].Avatar.Texture; + Statics[htStatics(StaticAvatarT2)].Texture = profiles[GameData.ProfileIDsTeam2[GameData.Rounds[SelectedField].SingerTeam2]].Avatar.Texture; + + UpdateJokerButtons(); + + Buttons[htButtons(ButtonNextRound)].Visible = true; + Buttons[htButtons(ButtonExit)].Visible = true; + Buttons[htButtons(ButtonBack)].Visible = false; + } + + private void UseJoker(int TeamNr, int JokerNum) + { + switch (JokerNum) + { + //Random-Joker + case 0: + if (GameData.NumJokerRandom[TeamNr] > 0) + { + GameData.NumJokerRandom[TeamNr]--; + if (!_Base.Sound.IsFinished(PreviewStream)) + _Base.Sound.FadeAndStop(PreviewStream, 0, 1); + FieldSelected(); + } + break; + + //Retry-Joker + case 1: + if (GameData.NumJokerRetry[TeamNr] > 0 && GameData.CurrentRoundNr > 1) + { + GameData.NumJokerRetry[TeamNr]--; + GameData.Team = TeamNr; + if (!_Base.Sound.IsFinished(PreviewStream)) + _Base.Sound.FadeAndStop(PreviewStream, 0, 1); + Action = EStatus.JokerRetry; + OldSelectedField = SelectedField; + SelectedField = -1; + UpdateFieldContents(); + } + break; + } + UpdateJokerButtons(); + } + + private void UpdateTeamChoosingMessage() + { + Texts[htTexts(TextTeamChoosing)].Color = _Base.Theme.GetPlayerColor(GameData.Team + 1); + Texts[htTexts(TextTeamChoosing)].Text = _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + _Base.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); + if (Action == EStatus.JokerRetry || Action == EStatus.FieldChoosing) + Texts[htTexts(TextTeamChoosing)].Visible = true; + } + + private void UpdateJokerButtons() + { Buttons[htButtons(ButtonJokerRandomT1)].Visible = true; Buttons[htButtons(ButtonJokerRandomT2)].Visible = true; Buttons[htButtons(ButtonJokerRandomT1)].Text.Text = GameData.NumJokerRandom[0].ToString(); @@ -434,10 +533,6 @@ namespace Vocaluxe.PartyModes Buttons[htButtons(ButtonJokerRetryT2)].Visible = true; Buttons[htButtons(ButtonJokerRetryT1)].Text.Text = GameData.NumJokerRetry[0].ToString(); Buttons[htButtons(ButtonJokerRetryT2)].Text.Text = GameData.NumJokerRetry[1].ToString(); - - Buttons[htButtons(ButtonNextRound)].Visible = true; - Buttons[htButtons(ButtonExit)].Visible = true; - Buttons[htButtons(ButtonBack)].Visible = false; } private void NextRound() From edeb2702f8bc8219365d59c7a7ff353c92c43827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 00:20:44 +0100 Subject: [PATCH 06/14] Added winner-detection. --- .../TicTacToe/Languages/Deutsch.xml | 3 +- .../Screens/PartyScreenTicTacToeMain.xml | 29 ++++++ .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 7 +- .../PartyScreenTicTacToeMain.cs | 95 +++++++++++++++---- 4 files changed, 108 insertions(+), 26 deletions(-) diff --git a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml index 8a8c359e..89814bc5 100644 --- a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml +++ b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml @@ -30,6 +30,7 @@ Wählt ein Feld aus. Nächster Spieler Challenge-Mode wirklich beenden? - Alle Runden wurden gesungen! Und der Gewinner ist... + Und der Gewinner ist... + In dieser Runde gibt es keinen Gewinner... diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml index bd7bfefe..b7eea81e 100644 --- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml @@ -251,6 +251,35 @@ + + + 640 + 90 + + 0,00 + + 40 + + + + StaticColor + + + TextSColor + + Center + + Center + + + + Outline + + + + + + 640 diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index 5811d5a8..94a3153b 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -325,7 +325,6 @@ namespace Vocaluxe.PartyModes ToScreenMain.NumJokerRandom = GameData.NumJokerRandom; ToScreenMain.NumJokerRetry = GameData.NumJokerRetry; ToScreenMain.Team = GameData.Team; - UpdateScores(); Screen.DataToScreen(ToScreenMain); } break; @@ -336,7 +335,6 @@ namespace Vocaluxe.PartyModes _Screens.TryGetValue("PartyScreenTicTacToeMain", out Screen); if (_Screens != null) { - UpdateScores(); if (GameData.Team == 1) GameData.Team = 0; else @@ -593,11 +591,12 @@ namespace Vocaluxe.PartyModes { GameData.Rounds[GameData.SingRoundNr].Winner = 1; } - else + /**else { GameData.Rounds[GameData.SingRoundNr].Finished = false; GameData.CurrentRoundNr--; - } + }**/ + GameData.Rounds[GameData.SingRoundNr].Winner = 1; } } diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs index ec4a4a59..f4601882 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -28,6 +28,7 @@ namespace Vocaluxe.PartyModes const string TextPopupReallyExit = "TextPopupReallyExit"; const string TextTeamChoosing = "TextTeamChoosing"; + const string TextFinishMessage = "TextFinishMessage"; const string TextNextPlayerT1 = "TextNextPlayerT1"; const string TextNextPlayerT2 = "TextNextPlayerT2"; const string TextNextPlayerNameT1 = "TextNextPlayerNameT1"; @@ -65,6 +66,7 @@ namespace Vocaluxe.PartyModes private int SelectedField = -1; private int OldSelectedField = -1; + private int[,] Possibilities; private EStatus Action; public PartyScreenTicTacToeMain() @@ -76,7 +78,7 @@ namespace Vocaluxe.PartyModes base.Init(); _ThemeName = "PartyScreenTicTacToeMain"; - _ThemeTexts = new string[] { TextPopupReallyExit, TextTeamChoosing, TextNextPlayerT1, TextNextPlayerT2, TextNextPlayerNameT1, TextNextPlayerNameT2 }; + _ThemeTexts = new string[] { TextPopupReallyExit, TextTeamChoosing, TextFinishMessage, TextNextPlayerT1, TextNextPlayerT2, TextNextPlayerNameT1, TextNextPlayerNameT2 }; _ThemeButtons = new string[] { ButtonNextRound, ButtonBack, ButtonExit, ButtonPopupYes, ButtonPopupNo, ButtonField, ButtonJokerRandomT1, ButtonJokerRandomT2, ButtonJokerRetryT1, ButtonJokerRetryT2 }; _ThemeStatics = new string[] { StaticPopupBG, StaticAvatarT1, StaticAvatarT2 }; _ScreenVersion = ScreenVersion; @@ -247,6 +249,7 @@ namespace Vocaluxe.PartyModes if (GameData.CurrentRoundNr == 1) { + BuildWinnerPossibilities(); SelectedField = -1; Buttons[htButtons(ButtonBack)].Visible = true; Buttons[htButtons(ButtonExit)].Visible = false; @@ -256,8 +259,8 @@ namespace Vocaluxe.PartyModes Buttons[htButtons(ButtonBack)].Visible = false; Buttons[htButtons(ButtonExit)].Visible = true; } - - if (GameData.CurrentRoundNr <= GameData.NumFields) + int Winner = GetWinner(); + if (GameData.CurrentRoundNr <= GameData.NumFields && Winner == 0) { Action = EStatus.FieldChoosing; UpdateTeamChoosingMessage(); @@ -272,17 +275,24 @@ namespace Vocaluxe.PartyModes Buttons[htButtons(ButtonJokerRetryT1)].Visible = false; Buttons[htButtons(ButtonJokerRetryT2)].Visible = false; Buttons[htButtons(ButtonNextRound)].Visible = false; - //Texts[htTexts(TextFinishMessage)].Visible = false; - //Texts[htTexts(TextFinishPlayerWin)].Visible = false; + Texts[htTexts(TextFinishMessage)].Visible = false; SetInteractionToButton(Buttons[htButtons(ButtonNextRound)]); } else { Action = EStatus.None; Buttons[htButtons(ButtonNextRound)].Visible = false; - //Texts[htTexts(TextFinishMessage)].Visible = true; - //Texts[htTexts(TextFinishPlayerWin)].Visible = true; - //Texts[htTexts(TextFinishPlayerWin)].Text = GetPlayerWinString(); + Texts[htTexts(TextFinishMessage)].Visible = true; + if (Winner > 0) + { + Texts[htTexts(TextFinishMessage)].Color = _Base.Theme.GetPlayerColor(Winner); + Texts[htTexts(TextFinishMessage)].Text = _Base.Language.Translate("TR_SCREENMAIN_WINNER", _PartyModeID) + " " + _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + Winner; + } + else + { + Texts[htTexts(TextFinishMessage)].Color = new SColorF(1, 1, 1, 1); + Texts[htTexts(TextFinishMessage)].Text = _Base.Language.Translate("TR_SCREENMAIN_NOWINNER", _PartyModeID); + } SetInteractionToButton(Buttons[htButtons(ButtonExit)]); } @@ -521,6 +531,8 @@ namespace Vocaluxe.PartyModes Texts[htTexts(TextTeamChoosing)].Text = _Base.Language.Translate("TR_TEAM", _PartyModeID) + " " + (GameData.Team + 1) + "! " + _Base.Language.Translate("TR_SCREENMAIN_TEAM_CHOOSE", _PartyModeID); if (Action == EStatus.JokerRetry || Action == EStatus.FieldChoosing) Texts[htTexts(TextTeamChoosing)].Visible = true; + else + Texts[htTexts(TextTeamChoosing)].Visible = false; } private void UpdateJokerButtons() @@ -574,22 +586,63 @@ namespace Vocaluxe.PartyModes _PartyMode.DataFromScreen(_ThemeName, Data); } - private string GetPlayerWinString() + private int BuildWinnerPossibilities() { - string s = ""; - SProfile[] profiles = _Base.Profiles.GetProfiles(); - /** - for (int i = 0; i < GameState.ResultTable.Count; i++) + int NumOneRow = (int)Math.Sqrt((double)GameData.NumFields); + Possibilities = new int[(NumOneRow * 2) + 2, NumOneRow]; + for (int i = 0; i < Possibilities.GetLength(0); i++) { - if (i > 0) - s += ", "; - if (GameState.ResultTable[i].Position == 1) - s += profiles[GameState.ResultTable[i].PlayerID].PlayerName; - else - break; + if (i < NumOneRow) + { + for(int c = 0; c < NumOneRow; c++){ + Possibilities[i, c] = i * NumOneRow + c; + } + } + else if (i < NumOneRow * 2) + { + for (int c = 0; c < NumOneRow; c++) + { + Possibilities[i, c] = (i-NumOneRow) + (c*NumOneRow); + } + } + else if( i == Possibilities.GetLength(0) - 2) + { + for (int c = 0; c < NumOneRow;c++) + { + Possibilities[i, c] = (NumOneRow + 1) * c; + } + } + else if (i == Possibilities.GetLength(0) - 1) + { + for (int c = 0; c < NumOneRow; c++) + { + Possibilities[i, c] = (NumOneRow + 1) * c + (NumOneRow - 1); + } + } } - **/ - return s; + return 0; + } + + private int GetWinner() + { + for (int i = 0; i < Possibilities.GetLength(0); i++) + { + List Check = new List(); + for (int j = 0; j < Possibilities.GetLength(1); j++) + { + if (Fields[Possibilities[i, j]].Content.Winner > 0) + Check.Add(Fields[Possibilities[i, j]].Content.Winner); + } + if (Check.Count == Possibilities.GetLength(1)) + { + //Check for winner + if (Check.Contains(1) && !Check.Contains(2)) + return 1; + else if (Check.Contains(2) && !Check.Contains(1)) + return 2; + } + } + return 0; } } } From e4c7142a287c57653019c2a03018b3c15cdfb569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 09:09:53 +0100 Subject: [PATCH 07/14] Remove some debug-stuff. --- PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index 94a3153b..5d45a5a2 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -591,13 +591,11 @@ namespace Vocaluxe.PartyModes { GameData.Rounds[GameData.SingRoundNr].Winner = 1; } - /**else + else { GameData.Rounds[GameData.SingRoundNr].Finished = false; GameData.CurrentRoundNr--; - }**/ - GameData.Rounds[GameData.SingRoundNr].Winner = 1; - + } } } } \ No newline at end of file From 3892ee7f308b3f476f45f0880f2d8ec4f53b9358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 09:25:50 +0100 Subject: [PATCH 08/14] Some theme-improvements. --- .../TicTacToe/Languages/Deutsch.xml | 6 +- .../Screens/PartyScreenTicTacToeMain.xml | 6 +- .../Screens/PartyScreenTicTacToeNames.xml | 62 ++++++++++++++++++- .../PartyScreenTicTacToeNames.cs | 2 +- 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml index 89814bc5..10d4d49a 100644 --- a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml +++ b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml @@ -14,7 +14,7 @@ Exit Ja Nein - Nächste Runde + Starten Songs Team @@ -25,11 +25,13 @@ Playlist Tic-Tac-Toe: Spielerwahl + Team 1 + Team 2 Tic-Tac-Toe Wählt ein Feld aus. Nächster Spieler - Challenge-Mode wirklich beenden? + Tic-Tac-Toe wirklich beenden? Und der Gewinner ist... In dieser Runde gibt es keinen Gewinner... diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml index b7eea81e..6f204b14 100644 --- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeMain.xml @@ -513,7 +513,7 @@ Button 1030 - 600 + 625 0,00 150 50 @@ -570,7 +570,7 @@ Button 100 - 600 + 625 0,00 150 50 @@ -627,7 +627,7 @@ Button 100 - 600 + 625 0,00 150 50 diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml index 0ab2b019..15071a58 100644 --- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml @@ -58,6 +58,64 @@ + + + 58 + 375 + + -1,00 + + 22 + + + + Player1 + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENNAMES_TEAM1 + + + + + + + 58 + 500 + + -1,00 + + 22 + + + + Player2 + + + TextSColor + + Center + + Center + + + + Outline + + TR_SCREENNAMES_TEAM2 + + + + Button @@ -65,7 +123,7 @@ Button 985 - 600 + 625 0,00 150 50 @@ -122,7 +180,7 @@ Button 145 - 600 + 625 0,00 150 50 diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs index a566b568..ff94eca0 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs @@ -23,7 +23,7 @@ namespace Vocaluxe.PartyModes private const int PlayerDestinationButtonsNumH = 10; private const int PlayerDestinationButtonsNumW = 2; private const int PlayerDestinationButtonsFirstX = 58; - private const int PlayerDestinationButtonsFirstY = 400; + private const int PlayerDestinationButtonsFirstY = 380; private const int PlayerDestinationButtonsSpaceH = 15; private const int PlayerDestinationButtonsSpaceW = 25; //PlayerChooseButtons-Option From 3155812900525b81fd7aaba627a2300786a36e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 10:02:36 +0100 Subject: [PATCH 09/14] Fixed name-selection, deactivated drag & drop. --- .../PartyScreenTicTacToeNames.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs index ff94eca0..84e79fb0 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeNames.cs @@ -164,7 +164,7 @@ namespace Vocaluxe.PartyModes { base.HandleMouse(MouseEvent); - + /** //Check if LeftButton is hold and Select-Mode inactive if (MouseEvent.LBH && !SelectingMouseActive) { @@ -191,7 +191,7 @@ namespace Vocaluxe.PartyModes } } } - + **/ //Check if LeftButton is hold and Select-Mode active if (MouseEvent.LBH && SelectingMouseActive) { @@ -218,7 +218,7 @@ namespace Vocaluxe.PartyModes { int added = -1; //Add Player-ID to list. - if (i - PlayerDestinationButtonsNumW < 0) + if (i - PlayerDestinationButtonsNumH < 0) { if (Data.ScreenNames.ProfileIDsTeam1.Count < (i + 1)) { @@ -231,7 +231,7 @@ namespace Vocaluxe.PartyModes added = i; } } - else if (i - PlayerDestinationButtonsNumW >= 0) + else if (i - PlayerDestinationButtonsNumH >= 0) { if (Data.ScreenNames.ProfileIDsTeam2.Count < (i + 1)) { @@ -605,13 +605,13 @@ namespace Vocaluxe.PartyModes } } } - for (int i = PlayerDestinationButtonsNumW; i < PlayerDestinationButtonsNumH*2; i++) + for (int i = PlayerDestinationButtonsNumH; i < PlayerDestinationButtonsNumH*2; i++) { if (PlayerDestinationButtons[i].Selected) { - if (((i-PlayerDestinationButtonsNumW) + 1) <= Data.ScreenNames.ProfileIDsTeam2.Count) + if (((i-PlayerDestinationButtonsNumH) + 1) <= Data.ScreenNames.ProfileIDsTeam2.Count) { - Data.ScreenNames.ProfileIDsTeam2.RemoveAt(i); + Data.ScreenNames.ProfileIDsTeam2.RemoveAt(i - PlayerDestinationButtonsNumH); UpdateButtonNext(); UpdateButtonPlayerDestination(); UpdateButtonPlayerChoose(); From f58064d1740fe2e74cbcf144ac82a50ad6ae55f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 10:17:56 +0100 Subject: [PATCH 10/14] Some bugfixes. --- PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs | 1 + PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index 5d45a5a2..b7f047eb 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -444,6 +444,7 @@ namespace Vocaluxe.PartyModes private void CreateRounds() { + GameData.Rounds = new List(); //Prepare Player-IDs List Team1 = new List(); List Team2 = new List(); diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs index f4601882..0b270b58 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -616,7 +616,7 @@ namespace Vocaluxe.PartyModes { for (int c = 0; c < NumOneRow; c++) { - Possibilities[i, c] = (NumOneRow + 1) * c + (NumOneRow - 1); + Possibilities[i, c] = (NumOneRow - 1) * c + (NumOneRow - 1); } } } From f610a708e5d7edff2a966af55ca9664998fb7a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 11:49:05 +0100 Subject: [PATCH 11/14] Added some more config-options: Song-Source (All songs, category (Show tabs must be "on" in game-options!), playlist) and Game-Mode (normal, duet, short-song) --- .../TicTacToe/Languages/Deutsch.xml | 3 + .../Screens/PartyScreenTicTacToeConfig.xml | 228 +++++++++++++++++- .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 100 +++++++- .../PartyScreenTicTacToeConfig.cs | 125 +++++++++- 4 files changed, 446 insertions(+), 10 deletions(-) diff --git a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml index 10d4d49a..d17c34fd 100644 --- a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml +++ b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml @@ -17,6 +17,9 @@ Starten Songs Team + Playlist + Kategorie + Alle Songs Tic-Tac-Toe: Einstellungen Anzahl der Spieler in Team 1 diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml index 22fbe30a..d9330b71 100644 --- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml +++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml @@ -169,11 +169,40 @@ Outline - TR_SCREENCONFIG_PLAYLIST + TR_SCREENCONFIG_SONGSOURCE + + + 75 + 405 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + Center + + + + Outline + + TR_SCREENCONFIG_GAMEMODE + + + + Button @@ -483,7 +512,7 @@ 3 - + Invisible @@ -546,7 +575,202 @@ Bold + 3 + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 340 + 0,00 + 700 + 50 + + 505 + 345 + 0,00 + 40 + 40 + + 1170 + 345 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + 1 + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 340 + 0,00 + 700 + 50 + + 505 + 345 + 0,00 + 40 + 40 + + 1170 + 345 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 1 + + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 400 + 0,00 + 700 + 50 + + 505 + 405 + 0,00 + 40 + 40 + + 1170 + 405 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Outline + + Bold + + 1 + diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index b7f047eb..6a5639d3 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -6,6 +6,20 @@ using Vocaluxe.Menu; namespace Vocaluxe.PartyModes { + public enum ESongSource + { + TR_ALLSONGS, + TR_CATEGORY, + TR_PLAYLIST + } + + public enum EPartyGameMode + { + TR_GAMEMODE_NORMAL, + TR_GAMEMODE_SHORTSONG, + TR_GAMEMODE_DUET + } + public class Round { public int SongID; @@ -23,7 +37,10 @@ namespace Vocaluxe.PartyModes public int NumPlayerTeam1; public int NumPlayerTeam2; public int NumFields; + public ESongSource SongSource; + public int CategoryID; public int PlaylistID; + public EPartyGameMode GameMode; } public struct DataToScreenNames @@ -61,7 +78,10 @@ namespace Vocaluxe.PartyModes public int NumPlayerTeam1; public int NumPlayerTeam2; public int NumFields; + public ESongSource SongSource; + public int CategoryID; public int PlaylistID; + public EPartyGameMode GameMode; } public struct FromScreenNames @@ -109,8 +129,12 @@ namespace Vocaluxe.PartyModes public List ProfileIDsTeam1; public List ProfileIDsTeam2; + public ESongSource SongSource; + public int CategoryID; public int PlaylistID; + public EPartyGameMode GameMode; + public List Rounds; public List Songs; @@ -154,7 +178,10 @@ namespace Vocaluxe.PartyModes GameData.ProfileIDsTeam2 = new List(); GameData.CurrentRoundNr = 0; GameData.SingRoundNr = 0; + GameData.SongSource = ESongSource.TR_ALLSONGS; GameData.PlaylistID = 0; + GameData.CategoryID = 0; + GameData.GameMode = EPartyGameMode.TR_GAMEMODE_NORMAL; GameData.Rounds = new List(); GameData.Songs = new List(); GameData.NumJokerRandom = new int[2]; @@ -193,7 +220,10 @@ namespace Vocaluxe.PartyModes GameData.NumPlayerTeam1 = data.ScreenConfig.NumPlayerTeam1; GameData.NumPlayerTeam2 = data.ScreenConfig.NumPlayerTeam2; GameData.NumFields = data.ScreenConfig.NumFields; + GameData.SongSource = data.ScreenConfig.SongSource; + GameData.CategoryID = data.ScreenConfig.CategoryID; GameData.PlaylistID = data.ScreenConfig.PlaylistID; + GameData.GameMode = data.ScreenConfig.GameMode; _Stage = EStage.Config; _Base.Graphics.FadeTo(EScreens.ScreenPartyDummy); @@ -286,7 +316,10 @@ namespace Vocaluxe.PartyModes ToScreenConfig.NumPlayerTeam1 = GameData.NumPlayerTeam1; ToScreenConfig.NumPlayerTeam2 = GameData.NumPlayerTeam2; ToScreenConfig.NumFields = GameData.NumFields; + ToScreenConfig.SongSource = GameData.SongSource; + ToScreenConfig.CategoryID = GameData.CategoryID; ToScreenConfig.PlaylistID = GameData.PlaylistID; + ToScreenConfig.GameMode = GameData.GameMode; Screen.DataToScreen(ToScreenConfig); } break; @@ -426,10 +459,22 @@ namespace Vocaluxe.PartyModes public override void SongSelected(int SongID) { - EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + switch (GameData.GameMode) + { + case EPartyGameMode.TR_GAMEMODE_NORMAL: + gm = EGameMode.TR_GAMEMODE_NORMAL; + break; + case EPartyGameMode.TR_GAMEMODE_DUET: + gm = EGameMode.TR_GAMEMODE_DUET; + break; + + case EPartyGameMode.TR_GAMEMODE_SHORTSONG: + gm = EGameMode.TR_GAMEMODE_SHORTSONG; + break; + } _Base.Game.AddSong(SongID, gm); _Base.Songs.AddPartySongSung(SongID); @@ -482,11 +527,56 @@ namespace Vocaluxe.PartyModes private void PrepareSongList() { + EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + + switch (GameData.GameMode) + { + case EPartyGameMode.TR_GAMEMODE_NORMAL: + gm = EGameMode.TR_GAMEMODE_NORMAL; + break; + + case EPartyGameMode.TR_GAMEMODE_DUET: + gm = EGameMode.TR_GAMEMODE_DUET; + break; + + case EPartyGameMode.TR_GAMEMODE_SHORTSONG: + gm = EGameMode.TR_GAMEMODE_SHORTSONG; + break; + } + while(GameData.Songs.Count < (GameData.NumFields + GameData.NumJokerRandom[0] + GameData.NumJokerRandom[1])){ List Songs = new List(); - for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(GameData.PlaylistID); i++) + switch (GameData.SongSource) { - Songs.Add(_Base.Playlist.GetPlaylistSong(GameData.PlaylistID, i).SongID); + case ESongSource.TR_PLAYLIST: + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(GameData.PlaylistID); i++) + { + int id = _Base.Playlist.GetPlaylistSong(GameData.PlaylistID, i).SongID; + foreach (EGameMode mode in _Base.Songs.GetSongByID(id).AvailableGameModes) + if (mode == gm) + Songs.Add(id); + } + break; + + case ESongSource.TR_ALLSONGS: + for (int i = 0; i < _Base.Songs.GetNumSongs(); i++) + { + foreach (EGameMode mode in _Base.Songs.GetSongByID(i).AvailableGameModes) + if (mode == gm) + Songs.Add(i); + } + break; + + case ESongSource.TR_CATEGORY: + _Base.Songs.SetCategory(GameData.CategoryID); + for (int i = 0; i < _Base.Songs.NumSongsInCategory(GameData.CategoryID); i++) + { + foreach(EGameMode mode in _Base.Songs.GetVisibleSong(i).AvailableGameModes) + if(mode == gm) + Songs.Add(_Base.Songs.GetVisibleSong(i).ID); + } + _Base.Songs.SetCategory(-1); + break; } while(Songs.Count > 0) { @@ -529,12 +619,16 @@ namespace Vocaluxe.PartyModes player[0].Name = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].PlayerName; player[0].Difficulty = profiles[GameData.ProfileIDsTeam1[r.SingerTeam1]].Difficulty; player[0].ProfileID = GameData.ProfileIDsTeam1[r.SingerTeam1]; + if (GameData.GameMode == EPartyGameMode.TR_GAMEMODE_DUET) + player[0].LineNr = 0; } if (GameData.ProfileIDsTeam2[r.SingerTeam2] < profiles.Length) { player[1].Name = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].PlayerName; player[1].Difficulty = profiles[GameData.ProfileIDsTeam2[r.SingerTeam2]].Difficulty; player[1].ProfileID = GameData.ProfileIDsTeam2[r.SingerTeam2]; + if (GameData.GameMode == EPartyGameMode.TR_GAMEMODE_DUET) + player[1].LineNr = 1; } SongSelected(r.SongID); } diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs index d5b86e20..3b47296c 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeConfig.cs @@ -15,7 +15,10 @@ namespace Vocaluxe.PartyModes const string SelectSlideNumPlayerTeam1 = "SelectSlideNumPlayerTeam1"; const string SelectSlideNumPlayerTeam2 = "SelectSlideNumPlayerTeam2"; const string SelectSlideNumFields = "SelectSlideNumFields"; + const string SelectSlideSongSource = "SelectSlideSongSource"; const string SelectSlidePlaylist = "SelectSlidePlaylist"; + const string SelectSlideCategory = "SelectSlideCategory"; + const string SelectSlideGameMode = "SelectSlideGameMode"; const string ButtonNext = "ButtonNext"; const string ButtonBack = "ButtonBack"; @@ -32,7 +35,7 @@ namespace Vocaluxe.PartyModes base.Init(); _ThemeName = "PartyScreenTicTacToeConfig"; - _ThemeSelectSlides = new string[] { SelectSlideNumPlayerTeam1, SelectSlideNumPlayerTeam2, SelectSlideNumFields, SelectSlidePlaylist }; + _ThemeSelectSlides = new string[] { SelectSlideNumPlayerTeam1, SelectSlideNumPlayerTeam2, SelectSlideNumFields, SelectSlideSongSource, SelectSlidePlaylist, SelectSlideCategory, SelectSlideGameMode }; _ThemeButtons = new string[] { ButtonNext, ButtonBack }; _ScreenVersion = ScreenVersion; @@ -42,6 +45,9 @@ namespace Vocaluxe.PartyModes config.NumFields = 9; config.NumPlayerTeam1 = 2; config.NumPlayerTeam2 = 2; + config.GameMode = EPartyGameMode.TR_GAMEMODE_NORMAL; + config.CategoryID = 0; + config.SongSource = ESongSource.TR_ALLSONGS; Data.ScreenConfig = config; } @@ -61,6 +67,9 @@ namespace Vocaluxe.PartyModes Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1; Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2; Data.ScreenConfig.PlaylistID = config.PlaylistID; + Data.ScreenConfig.CategoryID = config.CategoryID; + Data.ScreenConfig.SongSource = config.SongSource; + Data.ScreenConfig.GameMode = config.GameMode; } catch (Exception e) { @@ -186,6 +195,9 @@ namespace Vocaluxe.PartyModes else if (Data.ScreenConfig.NumFields == 25) SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection = 2; + SelectSlides[htSelectSlides(SelectSlideSongSource)].Clear(); + SelectSlides[htSelectSlides(SelectSlideSongSource)].SetValues((int)Data.ScreenConfig.SongSource); + string[] _Playlists = _Base.Playlist.GetPlaylistNames(); SelectSlides[htSelectSlides(SelectSlidePlaylist)].Clear(); for (int i = 0; i < _Playlists.Length; i++) @@ -194,7 +206,24 @@ namespace Vocaluxe.PartyModes SelectSlides[htSelectSlides(SelectSlidePlaylist)].AddValue(value); } SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection = Data.ScreenConfig.PlaylistID; + SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; + string[] _Categories = new string[_Base.Songs.GetNumCategories()]; + for (int i = 0; i < _Base.Songs.GetNumCategories(); i++ ) + { + _Categories[i] = _Base.Songs.GetCategory(i).Name; + } + SelectSlides[htSelectSlides(SelectSlideCategory)].Clear(); + for (int i = 0; i < _Categories.Length; i++) + { + string value = _Categories[i] + " (" + _Base.Songs.NumSongsInCategory(i) + " " + _Base.Language.Translate("TR_SONGS", _PartyModeID) + ")"; + SelectSlides[htSelectSlides(SelectSlideCategory)].AddValue(value); + } + SelectSlides[htSelectSlides(SelectSlideCategory)].Selection = Data.ScreenConfig.CategoryID; + SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; + + SelectSlides[htSelectSlides(SelectSlideGameMode)].Visible = true; + SelectSlides[htSelectSlides(SelectSlideGameMode)].SetValues((int)Data.ScreenConfig.GameMode); } private void UpdateSlides() @@ -209,12 +238,98 @@ namespace Vocaluxe.PartyModes else if (SelectSlides[htSelectSlides(SelectSlideNumFields)].Selection == 2) Data.ScreenConfig.NumFields = 25; + Data.ScreenConfig.SongSource = (ESongSource)SelectSlides[htSelectSlides(SelectSlideSongSource)].Selection; Data.ScreenConfig.PlaylistID = SelectSlides[htSelectSlides(SelectSlidePlaylist)].Selection; + Data.ScreenConfig.CategoryID = SelectSlides[htSelectSlides(SelectSlideCategory)].Selection; + Data.ScreenConfig.GameMode = (EPartyGameMode)SelectSlides[htSelectSlides(SelectSlideGameMode)].Selection; - if (_Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID) <= 0) - ConfigOk = false; - else - ConfigOk = true; + EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + + switch (Data.ScreenConfig.GameMode) + { + case EPartyGameMode.TR_GAMEMODE_NORMAL: + gm = EGameMode.TR_GAMEMODE_NORMAL; + break; + + case EPartyGameMode.TR_GAMEMODE_DUET: + gm = EGameMode.TR_GAMEMODE_DUET; + break; + + case EPartyGameMode.TR_GAMEMODE_SHORTSONG: + gm = EGameMode.TR_GAMEMODE_SHORTSONG; + break; + } + + if (Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST) + { + if (_Base.Playlist.GetNumPlaylists() > 0) + if (_Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID) > 0) + { + ConfigOk = false; + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(Data.ScreenConfig.PlaylistID); i++) + { + int id = _Base.Playlist.GetPlaylistSong(Data.ScreenConfig.PlaylistID, i).SongID; + foreach (EGameMode mode in _Base.Songs.GetSongByID(id).AvailableGameModes) + if (mode == gm) + { + ConfigOk = true; + break; + } + if (ConfigOk) + break; + } + } + else + ConfigOk = false; + else + ConfigOk = false; + } + if (Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY) + { + if (_Base.Songs.GetNumCategories() > 0) + if (_Base.Songs.NumSongsInCategory(Data.ScreenConfig.CategoryID) > 0) + { + _Base.Songs.SetCategory(Data.ScreenConfig.CategoryID); + ConfigOk = false; + for (int i = 0; i < _Base.Songs.NumSongsInCategory(Data.ScreenConfig.CategoryID); i++) + { + foreach (EGameMode mode in _Base.Songs.GetVisibleSong(i).AvailableGameModes) + if (mode == gm) + { + ConfigOk = true; + break; + } + if (ConfigOk) + break; + } + _Base.Songs.SetCategory(-1); + } + else + ConfigOk = false; + else + ConfigOk = false; + } + if (Data.ScreenConfig.SongSource == ESongSource.TR_ALLSONGS) + { + if (_Base.Songs.GetNumSongs() > 0) + { + for (int i = 0; i < _Base.Songs.GetNumSongs(); i++) + { + foreach (EGameMode mode in _Base.Songs.GetSongByID(i).AvailableGameModes) + if (mode == gm) + { + ConfigOk = true; + break; + } + if (ConfigOk) + break; + } + } + else + ConfigOk = false; + } + SelectSlides[htSelectSlides(SelectSlideCategory)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY; + SelectSlides[htSelectSlides(SelectSlidePlaylist)].Visible = Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; } private void Back() From 95b4bb59c403c2429a63bf63298d9e4520062437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 12:04:44 +0100 Subject: [PATCH 12/14] Language-update. --- .../TicTacToe/Languages/Deutsch.xml | 5 +- .../TicTacToe/Languages/English.xml | 43 ++++++++------- .../PartyModes/TicTacToe/Languages/French.xml | 53 ++++++++++--------- .../TicTacToe/Languages/Spanish.xml | 52 ++++++++++-------- 4 files changed, 85 insertions(+), 68 deletions(-) diff --git a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml index d17c34fd..cfea42fb 100644 --- a/Output/PartyModes/TicTacToe/Languages/Deutsch.xml +++ b/Output/PartyModes/TicTacToe/Languages/Deutsch.xml @@ -7,7 +7,7 @@ Tic-Tac-Toe Spiele Tic-Tac-Toe auf eine besondere Weise! - Für alle, die Spaß am Wettkampf haben. + Für eine lustige Runde mit Strategie, Glück und Können! Weiter Zurück Start @@ -25,7 +25,8 @@ Anzahl der Spieler in Team 1 Anzahl der Spieler in Team 2 Anzahl der Felder - Playlist + Song-Quelle + Spiel-Modus Tic-Tac-Toe: Spielerwahl Team 1 diff --git a/Output/PartyModes/TicTacToe/Languages/English.xml b/Output/PartyModes/TicTacToe/Languages/English.xml index 68f705a8..57c3256f 100644 --- a/Output/PartyModes/TicTacToe/Languages/English.xml +++ b/Output/PartyModes/TicTacToe/Languages/English.xml @@ -5,33 +5,38 @@ - Challenge Mode - Play some challenge rounds. - For all who are interested in duel fights. + Tic-Tac-Toe + Play Tic-Tac-Toe in a special way + Funny rounds with strategy, fortune and skills Next Back Start Exit Yes No - Next Round + Start + Songs + Team + Playlist + Category + All songs - Challenge Mode: Configuration - Number of players - Number of mics - Number of rounds + Tic-Tac-Toe: Configuration + Number of players in team 1 + Number of players in team 2 + Number of fields + Song-Source + Game-Mode - Challenge Mode: Choose Player + Tic-Tac-Toe: Choose Player + Team 1 + Team 2 - Challenge Mode: Overview - Pos - Name - Rounds - Wins - Sing Points - Score - Do you really want to exit? - Player of next round: - All rounds were sung! And the winner is... + Tic-Tac-Toe + Choose a field. + Next player + Really exit Tic-Tac-Toe? + And the winner is... + There is no winner in this round... diff --git a/Output/PartyModes/TicTacToe/Languages/French.xml b/Output/PartyModes/TicTacToe/Languages/French.xml index 2a937376..3192b444 100644 --- a/Output/PartyModes/TicTacToe/Languages/French.xml +++ b/Output/PartyModes/TicTacToe/Languages/French.xml @@ -5,33 +5,38 @@ - TODO: Challenge Mode - TODO: Play some challenge rounds. - TODO: For all who are interested in duel fights. + Tic-Tac-Toe + TODO: Play Tic-Tac-Toe in a special way + TODO: Funny rounds with strategy, fortune and skills TODO: Next - Retour - Démarrer - Quitter - Oui - Non - TODO: Next Round + TODO: Back + TODO: Start + TODO: Exit + TODO: Yes + TODO: No + TODO: Start + TODO: Songs + TODO: Team + TODO: Playlist + TODO: Category + TODO: All songs - TODO: Challenge Mode: Configuration - TODO: Number of players - TODO: Number of mics - TODO: Number of rounds + TODO: Tic-Tac-Toe: Configuration + TODO: Number of players in team 1 + TODO: Number of players in team 2 + TODO: Number of fields + TODO: Song-Source + TODO: Game-Mode - TODO: Challenge Mode: Choose Player + TODO: Tic-Tac-Toe: Choose Player + TODO: Team 1 + TODO: Team 2 - TODO: Challenge Mode: Overview - TODO: Pos - TODO: Name - TODO: Rounds - TODO: Wins - TODO: Sing Points - TODO: Score - TODO: Do you really want to exit? - TODO: Player of next round: - TODO: All rounds were sung! And the winner is... + TODO: Tic-Tac-Toe + TODO: Choose a field. + TODO: Next player + TODO: Really exit Tic-Tac-Toe? + TODO: And the winner is... + TODO: There is no winner in this round... diff --git a/Output/PartyModes/TicTacToe/Languages/Spanish.xml b/Output/PartyModes/TicTacToe/Languages/Spanish.xml index d7ded575..95906a8b 100644 --- a/Output/PartyModes/TicTacToe/Languages/Spanish.xml +++ b/Output/PartyModes/TicTacToe/Languages/Spanish.xml @@ -5,32 +5,38 @@ - TODO: Challenge Mode - TODO: Play some challenge rounds. - TODO: For all who are interested in duel fights. + Tic-Tac-Toe + TODO: Play Tic-Tac-Toe in a special way + TODO: Funny rounds with strategy, fortune and skills TODO: Next - Volver - Comenzar - Salir - Sí - No - TODO: Next Round + TODO: Back + TODO: Start + TODO: Exit + TODO: Yes + TODO: No + TODO: Start + TODO: Songs + TODO: Team + TODO: Playlist + TODO: Category + TODO: All songs - TODO: Challenge Mode: Configuration - TODO: Number of players - TODO: Number of mics - TODO: Number of rounds + TODO: Tic-Tac-Toe: Configuration + TODO: Number of players in team 1 + TODO: Number of players in team 2 + TODO: Number of fields + TODO: Song-Source + TODO: Game-Mode - TODO: Challenge Mode: Choose Player + TODO: Tic-Tac-Toe: Choose Player + TODO: Team 1 + TODO: Team 2 - TODO: Challenge Mode: Overview - TODO: Name - TODO: Rounds - TODO: Wins - TODO: Sing Points - TODO: Score - TODO: Do you really want to exit? - TODO: Player of next round: - TODO: All rounds were sung! And the winner is... + TODO: Tic-Tac-Toe + TODO: Choose a field. + TODO: Next player + TODO: Really exit Tic-Tac-Toe? + TODO: And the winner is... + TODO: There is no winner in this round... From 7a3ba952e934117d51dadba37c98a6fb32e45824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 12:18:58 +0100 Subject: [PATCH 13/14] More random to rounds-building. --- .../PartyModeTicTacToe/PartyModeTicTacToe.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs index 6a5639d3..22c3b57e 100644 --- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.cs @@ -495,8 +495,10 @@ namespace Vocaluxe.PartyModes List Team2 = new List(); List IDs1 = new List(); List IDs2 = new List(); + int num = 0; + int random = 0; //Add IDs to team-list - while (Team1.Count <= GameData.NumFields) + while (Team1.Count < GameData.NumFields) { if (IDs1.Count == 0) for (int i = 0; i < GameData.NumPlayerTeam1; i++) @@ -504,14 +506,22 @@ namespace Vocaluxe.PartyModes if (IDs2.Count == 0) for (int i = 0; i < GameData.NumPlayerTeam2; i++) IDs2.Add(i); - if (Team1.Count <= GameData.NumFields) + if (Team1.Count < GameData.NumFields) { - Team1.Add(IDs1[_Base.Game.GetRandom(IDs1.Count - 1)]); + random = _Base.Game.GetRandom((IDs1.Count - 1) * 10); + num = (int)Math.Round((double)random/10); + if (num >= IDs1.Count) + num = IDs1.Count - 1; + Team1.Add(IDs1[num]); IDs1.Remove(Team1[Team1.Count - 1]); } - if (Team2.Count <= GameData.NumFields) + if (Team2.Count < GameData.NumFields) { - Team2.Add(IDs2[_Base.Game.GetRandom(IDs2.Count - 1)]); + random = _Base.Game.GetRandom((IDs2.Count - 1) * 20); + num = (int)Math.Round((double)random / 20); + if (num >= IDs2.Count) + num = IDs2.Count - 1; + Team2.Add(IDs2[num]); IDs2.Remove(Team2[Team2.Count - 1]); } } From e856fafb9680e53a9146ec8885b366134c2f55a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Mon, 31 Dec 2012 13:15:05 +0100 Subject: [PATCH 14/14] Added keyboard-navigation. --- Output/Themes/Ambient/Screens/ScreenScore.xml | 2 +- .../PartyScreenTicTacToeMain.cs | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Output/Themes/Ambient/Screens/ScreenScore.xml b/Output/Themes/Ambient/Screens/ScreenScore.xml index 4f110653..1fa35bda 100644 --- a/Output/Themes/Ambient/Screens/ScreenScore.xml +++ b/Output/Themes/Ambient/Screens/ScreenScore.xml @@ -3759,7 +3759,7 @@ String - Vertical + Horizontal diff --git a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs index 0b270b58..481196fc 100644 --- a/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/PartyScreenTicTacToeMain.cs @@ -152,6 +152,38 @@ namespace Vocaluxe.PartyModes Back(); if (Buttons[htButtons(ButtonExit)].Selected && (GameData.CurrentRoundNr > 1 || Action == EStatus.FieldSelected)) ShowPopup(true); + for (int i = 0; i < GameData.NumFields; i++) + { + switch (Action) + { + case EStatus.FieldChoosing: + if (Fields[i].Button.Selected) + { + SelectedField = i; + FieldSelected(); + } + break; + + case EStatus.JokerRetry: + if (Fields[i].Button.Selected) + { + SelectedField = i; + FieldSelectedAgain(); + } + break; + } + } + if (Action == EStatus.FieldSelected) + { + if (Buttons[htButtons(ButtonJokerRandomT1)].Selected) + UseJoker(0, 0); + if (Buttons[htButtons(ButtonJokerRandomT2)].Selected) + UseJoker(1, 0); + if (Buttons[htButtons(ButtonJokerRetryT1)].Selected) + UseJoker(0, 1); + if (Buttons[htButtons(ButtonJokerRetryT2)].Selected) + UseJoker(1, 1); + } } else {