diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs index f0cf4245..f73ad6a8 100644 --- a/Vocaluxe/Base/CGame.cs +++ b/Vocaluxe/Base/CGame.cs @@ -108,38 +108,25 @@ namespace Vocaluxe.Base CConfig.UsePlayers(); } - public static void SetGameMode(EGameMode Mode) + public static void EnterNomalGame() { - switch (Mode) - { - case EGameMode.Normal: - _GameMode = new CGameModeNormal(); - break; - case EGameMode.Medley: - _GameMode = new CGameModeMedley(); - break; - case EGameMode.Duet: - _GameMode = new CGameModeDuet(); - break; - default: - break; - } + _GameMode = new CGameModeNormal(); _GameMode.Init(); } public static EGameMode GameMode { - get { return _GameMode.GetGameMode(); } + get { return _GameMode.GetCurrentGameMode(); } } - public static bool AddVisibleSong(int VisibleIndex) + public static bool AddVisibleSong(int VisibleIndex, EGameMode GameMode) { - return _GameMode.AddVisibleSong(VisibleIndex); + return _GameMode.AddVisibleSong(VisibleIndex, GameMode); } - public static bool AddSong(int AbsoluteIndex) + public static bool AddSong(int AbsoluteIndex, EGameMode GameMode) { - return _GameMode.AddSong(AbsoluteIndex); + return _GameMode.AddSong(AbsoluteIndex, GameMode); } public static bool RemoveVisibleSong(int VisibleIndex) @@ -179,7 +166,7 @@ namespace Vocaluxe.Base public static int RoundNr { - get { return _GameMode.GetActualRoundNr(); } + get { return _GameMode.GetCurrentRoundNr(); } } public static CSong GetSong() diff --git a/Vocaluxe/GameModes/CGameMode.cs b/Vocaluxe/GameModes/CGameMode.cs index 15a534a9..aa3304f3 100644 --- a/Vocaluxe/GameModes/CGameMode.cs +++ b/Vocaluxe/GameModes/CGameMode.cs @@ -7,6 +7,18 @@ using Vocaluxe.Lib.Song; namespace Vocaluxe.GameModes { + struct SongQueque + { + public int SongID; + public EGameMode GameMode; + + public SongQueque(int songID, EGameMode gameMode) + { + SongID = songID; + GameMode = gameMode; + } + } + class CPoints { private SPlayer[,] _Rounds; @@ -90,47 +102,50 @@ namespace Vocaluxe.GameModes abstract class CGameMode : IGameMode { protected bool _Initialized = false; - protected EGameMode _GameMode; - protected List _SongIDs; - protected int _ActualSong; + protected List _SongQueque; + protected int _CurrentSong; protected CPoints _Points; #region Implementation public virtual void Init() { - _SongIDs = new List(); + _SongQueque = new List(); Reset(); } - public virtual EGameMode GetGameMode() + public virtual EGameMode GetCurrentGameMode() { - return _GameMode; + if (_CurrentSong >= 0 && _CurrentSong < _SongQueque.Count) + { + return _SongQueque[_CurrentSong].GameMode; + } + return EGameMode.Normal; } - public virtual bool AddVisibleSong(int VisibleIndex) + public virtual bool AddVisibleSong(int VisibleIndex, EGameMode GameMode) { if (CSongs.VisibleSongs.Length > VisibleIndex) { - //int ID = CSongs.VisibleSongs[VisibleIndex].ID; - //if (!_SongIDs.Exists(delegate(int i) { return (i == ID); })) - //{ - _SongIDs.Add(CSongs.VisibleSongs[VisibleIndex].ID); - return true; - //} + int SongID = CSongs.VisibleSongs[VisibleIndex].ID; + if (GameMode == EGameMode.Duet && !CSongs.GetSong(SongID).IsDuet) + return false; + + _SongQueque.Add(new SongQueque(SongID, GameMode)); + return true; } return false; } - public virtual bool AddSong(int AbsoluteIndex) + public virtual bool AddSong(int AbsoluteIndex, EGameMode GameMode) { if (CSongs.AllSongs.Length > AbsoluteIndex) { - //int ID = CSongs.AllSongs[AbsoluteIndex].ID; - //if (!_SongIDs.Exists(delegate(int i) { return (i == ID); })) - //{ - _SongIDs.Add(CSongs.AllSongs[AbsoluteIndex].ID); + int SongID = CSongs.AllSongs[AbsoluteIndex].ID; + if (GameMode == EGameMode.Duet && !CSongs.GetSong(SongID).IsDuet) + return false; + + _SongQueque.Add(new SongQueque(SongID, GameMode)); return true; - //} } return false; } @@ -139,7 +154,22 @@ namespace Vocaluxe.GameModes { if (CSongs.VisibleSongs.Length > VisibleIndex) { - return _SongIDs.Remove(CSongs.VisibleSongs[VisibleIndex].ID); + int index = -1; + int SongID = CSongs.VisibleSongs[VisibleIndex].ID; + for (int i = 0; i < _SongQueque.Count; i++) + { + if (_SongQueque[i].SongID == SongID) + { + index = i; + break; + } + } + + if (index == -1) + return false; + + _SongQueque.RemoveAt(index); + return true; } return false; } @@ -148,66 +178,86 @@ namespace Vocaluxe.GameModes { if (CSongs.AllSongs.Length > AbsoluteIndex) { - return _SongIDs.Remove(CSongs.AllSongs[AbsoluteIndex].ID); + int index = -1; + int SongID = CSongs.AllSongs[AbsoluteIndex].ID; + for (int i = 0; i < _SongQueque.Count; i++) + { + if (_SongQueque[i].SongID == SongID) + { + index = i; + break; + } + } + + if (index == -1) + return false; + + _SongQueque.RemoveAt(index); + return true; } return false; } public virtual void ClearSongs() { - _SongIDs.Clear(); + _SongQueque.Clear(); } public virtual void Reset() { - _ActualSong = -1; + _CurrentSong = -1; } public virtual void Start(SPlayer[] Player) { - _Points = new CPoints(_SongIDs.Count, Player); + _Points = new CPoints(_SongQueque.Count, Player); } public virtual void NextRound(SPlayer[] Player) { - if (_ActualSong < _SongIDs.Count && _SongIDs.Count > 0) + if (_CurrentSong < _SongQueque.Count && _SongQueque.Count > 0) { - if (_ActualSong > -1) + if (_CurrentSong > -1) { - _Points.SetPoints(_ActualSong, _SongIDs[_ActualSong], Player, _GameMode == EGameMode.Medley, _GameMode == EGameMode.Duet); + _Points.SetPoints( + _CurrentSong, + _SongQueque[_CurrentSong].SongID, + Player, + _SongQueque[_CurrentSong].GameMode == EGameMode.Medley, + _SongQueque[_CurrentSong].GameMode == EGameMode.Duet); } - _ActualSong++; + _CurrentSong++; } } public virtual bool IsFinished() { - return (_ActualSong == _SongIDs.Count || _SongIDs.Count == 0); + return (_CurrentSong == _SongQueque.Count || _SongQueque.Count == 0); } - public virtual int GetActualRoundNr() + public virtual int GetCurrentRoundNr() { - return _ActualSong + 1; + return _CurrentSong + 1; } public virtual CSong GetSong() { - if (_ActualSong >= 0 && _ActualSong < _SongIDs.Count) + if (_CurrentSong >= 0 && _CurrentSong < _SongQueque.Count) { - return CSongs.GetSong(_SongIDs[_ActualSong]); + return CSongs.GetSong(_SongQueque[_CurrentSong].SongID); } return null; } public virtual int GetNumSongs() { - return _SongIDs.Count; + return _SongQueque.Count; } public virtual CSong GetSong(int Num) { - if (Num - 1 < _SongIDs.Count) - return CSongs.GetSong(_SongIDs[Num - 1]); + if (Num - 1 < _SongQueque.Count) + return CSongs.GetSong(_SongQueque[Num - 1].SongID); return null; } diff --git a/Vocaluxe/GameModes/CGameModeDuet.cs b/Vocaluxe/GameModes/CGameModeDuet.cs deleted file mode 100644 index cf105151..00000000 --- a/Vocaluxe/GameModes/CGameModeDuet.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Vocaluxe.GameModes -{ - class CGameModeDuet : CGameMode - { - public override void Init() - { - base.Init(); - - _GameMode = EGameMode.Duet; - _Initialized = true; - } - } -} diff --git a/Vocaluxe/GameModes/CGameModeMedley.cs b/Vocaluxe/GameModes/CGameModeMedley.cs deleted file mode 100644 index 03daef3f..00000000 --- a/Vocaluxe/GameModes/CGameModeMedley.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Vocaluxe.GameModes -{ - class CGameModeMedley : CGameMode - { - public override void Init() - { - base.Init(); - - _GameMode = EGameMode.Medley; - _Initialized = true; - } - } -} diff --git a/Vocaluxe/GameModes/CGameModeNormal.cs b/Vocaluxe/GameModes/CGameModeNormal.cs index 6a27341b..4a66383c 100644 --- a/Vocaluxe/GameModes/CGameModeNormal.cs +++ b/Vocaluxe/GameModes/CGameModeNormal.cs @@ -4,13 +4,13 @@ using System.Text; namespace Vocaluxe.GameModes { + // Nomal singing class CGameModeNormal : CGameMode { public override void Init() { base.Init(); - - _GameMode = EGameMode.Normal; + _Initialized = true; } } diff --git a/Vocaluxe/GameModes/IGameMode.cs b/Vocaluxe/GameModes/IGameMode.cs index e7d69afb..6a1572f4 100644 --- a/Vocaluxe/GameModes/IGameMode.cs +++ b/Vocaluxe/GameModes/IGameMode.cs @@ -18,10 +18,10 @@ namespace Vocaluxe.GameModes { void Init(); - EGameMode GetGameMode(); + EGameMode GetCurrentGameMode(); - bool AddVisibleSong(int VisibleIndex); - bool AddSong(int AbsoluteIndex); + bool AddVisibleSong(int VisibleIndex, EGameMode GameMode); + bool AddSong(int AbsoluteIndex, EGameMode GameMode); bool RemoveVisibleSong(int VisibleIndex); bool RemoveSong(int AbsoluteIndex); void ClearSongs(); @@ -30,11 +30,12 @@ namespace Vocaluxe.GameModes void Start(SPlayer[] Player); void NextRound(SPlayer[] Player); bool IsFinished(); - int GetActualRoundNr(); - CSong GetSong(); + int GetCurrentRoundNr(); + CPoints GetPoints(); int GetNumSongs(); + CSong GetSong(); CSong GetSong(int Num); } } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 85e1467d..c7765305 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -5,6 +5,7 @@ using System.Text; using System.Windows.Forms; using Vocaluxe.Base; +using Vocaluxe.GameModes; using Vocaluxe.Lib.Draw; using Vocaluxe.Menu; using Vocaluxe.Lib.Song; @@ -213,14 +214,14 @@ namespace Vocaluxe.Screens { if (SongNr >= 0 && CSongs.SongsLoaded) { - if (Duet) - CGame.SetGameMode(GameModes.EGameMode.Duet); - else - CGame.SetGameMode(GameModes.EGameMode.Normal); - CGame.Reset(); CGame.ClearSongs(); - CGame.AddSong(SongNr); + + EGameMode gm = EGameMode.Normal; + if (CSongs.VisibleSongs[SongNr].IsDuet) + gm = EGameMode.Duet; + + CGame.AddSong(SongNr, gm); CGraphics.FadeTo(EScreens.ScreenNames); } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 7617a044..d5173e12 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -7,6 +7,7 @@ using System.Text; using System.Windows.Forms; using Vocaluxe.Base; +using Vocaluxe.GameModes; using Vocaluxe.Lib.Draw; using Vocaluxe.Menu; using Vocaluxe.Menu.SongMenu; @@ -174,7 +175,7 @@ namespace Vocaluxe.Screens public override void OnShow() { base.OnShow(); - + CGame.EnterNomalGame(); SongMenus[htSongMenus(SongMenu)].OnShow(); } @@ -237,15 +238,14 @@ namespace Vocaluxe.Screens { if ((CSongs.Category >= 0) && (SongNr >= 0)) { - if (CSongs.VisibleSongs[SongNr].IsDuet) - CGame.SetGameMode(GameModes.EGameMode.Duet); - else - CGame.SetGameMode(GameModes.EGameMode.Normal); - CGame.Reset(); CGame.ClearSongs(); - CGame.AddVisibleSong(SongNr); - //CGame.AddSong(SongNr+1); + + EGameMode gm = EGameMode.Normal; + if (CSongs.VisibleSongs[SongNr].IsDuet) + gm = EGameMode.Duet; + + CGame.AddVisibleSong(SongNr, gm); CGraphics.FadeTo(EScreens.ScreenNames); } @@ -255,8 +255,7 @@ namespace Vocaluxe.Screens { CGame.Reset(); CGame.ClearSongs(); - CGame.SetGameMode(GameModes.EGameMode.Normal); - + List IDs = new List(); for (int i = 0; i < CSongs.AllSongs.Length; i++) { @@ -267,10 +266,11 @@ namespace Vocaluxe.Screens { int SongNr = IDs[CGame.Rand.Next(IDs.Count)]; - if (!CSongs.AllSongs[SongNr].IsDuet) - { - CGame.AddSong(SongNr); - } + EGameMode gm = EGameMode.Normal; + if (CSongs.VisibleSongs[SongNr].IsDuet) + gm = EGameMode.Duet; + CGame.AddSong(SongNr, gm); + IDs.Remove(SongNr); } @@ -282,8 +282,7 @@ namespace Vocaluxe.Screens { CGame.Reset(); CGame.ClearSongs(); - CGame.SetGameMode(GameModes.EGameMode.Normal); - + List IDs = new List(); for (int i = 0; i < CSongs.VisibleSongs.Length; i++) { @@ -294,10 +293,12 @@ namespace Vocaluxe.Screens { int SongNr = IDs[CGame.Rand.Next(IDs.Count)]; - if (!CSongs.AllSongs[SongNr].IsDuet) - { - CGame.AddSong(SongNr); - } + EGameMode gm = EGameMode.Normal; + if (CSongs.VisibleSongs[SongNr].IsDuet) + gm = EGameMode.Duet; + + CGame.AddSong(SongNr, gm); + IDs.Remove(SongNr); } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 459146bf..b991ec98 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -132,9 +132,9 @@ - - - + + Code + Form