added possibility to add individual game modes for each song

This commit is contained in:
Alexander Eckart committed 2012-06-17 17:20:27 +02:00
1 parent e85a3426a5
commit 6afc0f64bb
9 files changed
+133 -127

No files matched your search

+8 -21
View File
@@ -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()
+86 -36
View File
@@ -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<int> _SongIDs;
protected int _ActualSong;
protected List<SongQueque> _SongQueque;
protected int _CurrentSong;
protected CPoints _Points;
#region Implementation
public virtual void Init()
{
_SongIDs = new List<int>();
_SongQueque = new List<SongQueque>();
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;
}
-17
View File
@@ -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;
}
}
}
-17
View File
@@ -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;
}
}
}
+2 -2
View File
@@ -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;
}
}
+6 -5
View File
@@ -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);
}
}
@@ -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);
}
+21 -20
View File
@@ -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<int> IDs = new List<int>();
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<int> IDs = new List<int>();
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);
}
+3 -3
View File
@@ -132,9 +132,9 @@
<Compile Include="Base\CTheme.cs" />
<Compile Include="Base\CVideo.cs" />
<Compile Include="GameModes\CGameMode.cs" />
<Compile Include="GameModes\CGameModeDuet.cs" />
<Compile Include="GameModes\CGameModeMedley.cs" />
<Compile Include="GameModes\CGameModeNormal.cs" />
<Compile Include="GameModes\CGameModeNormal.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="GameModes\IGameMode.cs" />
<Compile Include="Lib\Draw\CDirect3D.cs">
<SubType>Form</SubType>