added communication methods and structures for party modes

This commit is contained in:
Alexander Eckart committed 2012-12-15 22:18:20 +01:00
1 parent 7151d1ccdf
commit 007ea68a15
13 files changed
+445 -33

No files matched your search

@@ -6,6 +6,36 @@ using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes namespace Vocaluxe.PartyModes
{ {
public struct DataToScreen
{
}
public struct DataFromScreen
{
public FromScreenConfig ScreenConfig;
public FromScreenNames ScreenNames;
public FromScreenMain ScreenMain;
}
public struct FromScreenConfig
{
public int NumPlayers;
public int NumPlayersAtOnce;
public int NumRounds;
}
public struct FromScreenNames
{
public bool FadeToConfig;
public bool FadeToMain;
public List<int> ProfileIDs;
}
public struct FromScreenMain
{
}
public class PartyModeChallenge : CPartyMode public class PartyModeChallenge : CPartyMode
{ {
private const int MaxPlayer = 10; private const int MaxPlayer = 10;
@@ -13,6 +43,16 @@ namespace Vocaluxe.PartyModes
private const int MaxTeams = 0; private const int MaxTeams = 0;
private const int MinTeams = 0; private const int MinTeams = 0;
enum EStage
{
NotStarted,
Config,
Names,
Main,
Singing
}
private EStage _Stage;
public PartyModeChallenge() public PartyModeChallenge()
{ {
@@ -23,15 +63,102 @@ namespace Vocaluxe.PartyModes
_ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchString = String.Empty;
_ScreenSongOptions.Sorting.SearchStringVisible = false; _ScreenSongOptions.Sorting.SearchStringVisible = false;
_Stage = EStage.NotStarted;
} }
public override CMenuParty GetNextPartyScreen() public override bool Init()
{
_Stage = EStage.NotStarted;
return true;
}
public override void DataFromScreen(string ScreenName, Object Data)
{
DataFromScreen data = new DataFromScreen();
switch (ScreenName)
{
case "PartyScreenChallengeConfig":
try
{
data = (DataFromScreen)Data;
_Stage = EStage.Config;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode challenge. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenChallengeNames":
try
{
data = (DataFromScreen)Data;
if (data.ScreenNames.FadeToConfig)
_Stage = EStage.NotStarted;
else
_Stage = EStage.Names;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode challenge. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenChallengeMain":
_Stage = EStage.Singing;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
break;
default:
_Base.Log.LogError("Error in party mode challenge. Wrong screen is sending: " + ScreenName);
break;
}
}
public override CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen)
{ {
CMenuParty Screen = null; CMenuParty Screen = null;
_Screens.TryGetValue("PartyScreenChallengeConfig", out Screen); AlternativeScreen = EScreens.ScreenSong;
switch (_Stage)
{
case EStage.NotStarted:
_Screens.TryGetValue("PartyScreenChallengeConfig", out Screen);
break;
case EStage.Config:
_Screens.TryGetValue("PartyScreenChallengeNames", out Screen);
break;
case EStage.Names:
_Screens.TryGetValue("PartyScreenChallengeMain", out Screen);
break;
case EStage.Main:
AlternativeScreen = EScreens.ScreenSong;
break;
case EStage.Singing:
_Screens.TryGetValue("PartyScreenChallengeMain", out Screen);
break;
default:
break;
}
return Screen; return Screen;
} }
public override EScreens GetStartScreen()
{
return EScreens.ScreenPartyDummy;
}
public override EScreens GetMainScreen()
{
return EScreens.ScreenPartyDummy;
}
public override ScreenSongOptions GetScreenSongOptions() public override ScreenSongOptions GetScreenSongOptions()
{ {
_ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting(); _ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting();
@@ -15,6 +15,8 @@ namespace Vocaluxe.PartyModes
const string ButtonNext = "ButtonNext"; const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack"; const string ButtonBack = "ButtonBack";
DataFromScreen Data;
public PartyScreenChallengeConfig() public PartyScreenChallengeConfig()
{ {
} }
@@ -26,6 +28,13 @@ namespace Vocaluxe.PartyModes
_ThemeName = "PartyScreenChallengeConfig"; _ThemeName = "PartyScreenChallengeConfig";
_ThemeButtons = new string[] { ButtonNext, ButtonBack }; _ThemeButtons = new string[] { ButtonNext, ButtonBack };
_ScreenVersion = ScreenVersion; _ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenConfig config = new FromScreenConfig();
config.NumPlayers = 0;
config.NumPlayersAtOnce = 0;
config.NumRounds = 0;
Data.ScreenConfig = config;
} }
public override void LoadTheme(string XmlPath) public override void LoadTheme(string XmlPath)
@@ -47,7 +56,15 @@ namespace Vocaluxe.PartyModes
{ {
case Keys.Back: case Keys.Back:
case Keys.Escape: case Keys.Escape:
FadeTo(EScreens.ScreenParty); Back();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
break; break;
} }
} }
@@ -60,12 +77,16 @@ namespace Vocaluxe.PartyModes
if (MouseEvent.LB && IsMouseOver(MouseEvent)) if (MouseEvent.LB && IsMouseOver(MouseEvent))
{ {
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
} }
if (MouseEvent.RB) if (MouseEvent.RB)
{ {
FadeTo(EScreens.ScreenParty); Back();
} }
return true; return true;
@@ -91,5 +112,19 @@ namespace Vocaluxe.PartyModes
{ {
base.OnClose(); base.OnClose();
} }
private void Back()
{
FadeTo(EScreens.ScreenParty);
}
private void Next()
{
Data.ScreenConfig.NumPlayers = 4;
Data.ScreenConfig.NumPlayersAtOnce = 2;
Data.ScreenConfig.NumRounds = 8;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
} }
} }
@@ -12,6 +12,11 @@ namespace Vocaluxe.PartyModes
// Version number for theme files. Increment it, if you've changed something on the theme files! // Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1; const int ScreenVersion = 1;
const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack";
private DataFromScreen Data;
public PartyScreenChallengeNames() public PartyScreenChallengeNames()
{ {
} }
@@ -21,7 +26,15 @@ namespace Vocaluxe.PartyModes
base.Init(); base.Init();
_ThemeName = "PartyScreenChallengeNames"; _ThemeName = "PartyScreenChallengeNames";
_ThemeButtons = new string[] { ButtonNext, ButtonBack };
_ScreenVersion = ScreenVersion; _ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenNames names = new FromScreenNames();
names.FadeToConfig = false;
names.FadeToMain = false;
names.ProfileIDs = new List<int>();
Data.ScreenNames = names;
} }
public override void LoadTheme(string XmlPath) public override void LoadTheme(string XmlPath)
@@ -43,7 +56,16 @@ namespace Vocaluxe.PartyModes
{ {
case Keys.Back: case Keys.Back:
case Keys.Escape: case Keys.Escape:
FadeTo(EScreens.ScreenParty); Back();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
break; break;
} }
} }
@@ -56,7 +78,11 @@ namespace Vocaluxe.PartyModes
if (MouseEvent.LB && IsMouseOver(MouseEvent)) if (MouseEvent.LB && IsMouseOver(MouseEvent))
{ {
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
} }
if (MouseEvent.RB) if (MouseEvent.RB)
@@ -87,5 +113,19 @@ namespace Vocaluxe.PartyModes
{ {
base.OnClose(); base.OnClose();
} }
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);
}
} }
} }
@@ -115,7 +115,7 @@
<Height>26</Height> <Height>26</Height>
</SReflection> </SReflection>
</ButtonNext> </ButtonNext>
<ButtonExit> <ButtonBack>
<!--<Skin>: Texture name--> <!--<Skin>: Texture name-->
<Skin>Button</Skin> <Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button--> <!--<SkinSelected>: Texture name for selected button-->
@@ -171,6 +171,6 @@
<Space>10</Space> <Space>10</Space>
<Height>26</Height> <Height>26</Height>
</SReflection> </SReflection>
</ButtonExit> </ButtonBack>
</PartyScreenChallengeNames> </PartyScreenChallengeNames>
</root> </root>
+129 -2
View File
@@ -6,6 +6,36 @@ using Vocaluxe.Menu;
namespace Vocaluxe.PartyModes namespace Vocaluxe.PartyModes
{ {
public struct DataToScreen
{
}
public struct DataFromScreen
{
public FromScreenConfig ScreenConfig;
public FromScreenNames ScreenNames;
public FromScreenMain ScreenMain;
}
public struct FromScreenConfig
{
public int NumPlayers;
public int NumPlayersAtOnce;
public int NumRounds;
}
public struct FromScreenNames
{
public bool FadeToConfig;
public bool FadeToMain;
public List<int> ProfileIDs;
}
public struct FromScreenMain
{
}
public class PartyModeChallenge : CPartyMode public class PartyModeChallenge : CPartyMode
{ {
private const int MaxPlayer = 10; private const int MaxPlayer = 10;
@@ -13,6 +43,16 @@ namespace Vocaluxe.PartyModes
private const int MaxTeams = 0; private const int MaxTeams = 0;
private const int MinTeams = 0; private const int MinTeams = 0;
enum EStage
{
NotStarted,
Config,
Names,
Main,
Singing
}
private EStage _Stage;
public PartyModeChallenge() public PartyModeChallenge()
{ {
@@ -23,15 +63,102 @@ namespace Vocaluxe.PartyModes
_ScreenSongOptions.Sorting.SearchString = String.Empty; _ScreenSongOptions.Sorting.SearchString = String.Empty;
_ScreenSongOptions.Sorting.SearchStringVisible = false; _ScreenSongOptions.Sorting.SearchStringVisible = false;
_Stage = EStage.NotStarted;
} }
public override CMenuParty GetNextPartyScreen() public override bool Init()
{
_Stage = EStage.NotStarted;
return true;
}
public override void DataFromScreen(string ScreenName, Object Data)
{
DataFromScreen data = new DataFromScreen();
switch (ScreenName)
{
case "PartyScreenChallengeConfig":
try
{
data = (DataFromScreen)Data;
_Stage = EStage.Config;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode challenge. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenChallengeNames":
try
{
data = (DataFromScreen)Data;
if (data.ScreenNames.FadeToConfig)
_Stage = EStage.NotStarted;
else
_Stage = EStage.Names;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
}
catch (Exception e)
{
_Base.Log.LogError("Error in party mode challenge. Can't cast received data from screen " + ScreenName + ". " + e.Message);
}
break;
case "PartyScreenChallengeMain":
_Stage = EStage.Singing;
_Base.Graphics.FadeTo(EScreens.ScreenPartyDummy);
break;
default:
_Base.Log.LogError("Error in party mode challenge. Wrong screen is sending: " + ScreenName);
break;
}
}
public override CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen)
{ {
CMenuParty Screen = null; CMenuParty Screen = null;
_Screens.TryGetValue("PartyScreenChallengeConfig", out Screen); AlternativeScreen = EScreens.ScreenSong;
switch (_Stage)
{
case EStage.NotStarted:
_Screens.TryGetValue("PartyScreenChallengeConfig", out Screen);
break;
case EStage.Config:
_Screens.TryGetValue("PartyScreenChallengeNames", out Screen);
break;
case EStage.Names:
_Screens.TryGetValue("PartyScreenChallengeMain", out Screen);
break;
case EStage.Main:
AlternativeScreen = EScreens.ScreenSong;
break;
case EStage.Singing:
_Screens.TryGetValue("PartyScreenChallengeMain", out Screen);
break;
default:
break;
}
return Screen; return Screen;
} }
public override EScreens GetStartScreen()
{
return EScreens.ScreenPartyDummy;
}
public override EScreens GetMainScreen()
{
return EScreens.ScreenPartyDummy;
}
public override ScreenSongOptions GetScreenSongOptions() public override ScreenSongOptions GetScreenSongOptions()
{ {
_ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting(); _ScreenSongOptions.Sorting.SongSorting = _Base.Config.GetSongSorting();
@@ -15,6 +15,8 @@ namespace Vocaluxe.PartyModes
const string ButtonNext = "ButtonNext"; const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack"; const string ButtonBack = "ButtonBack";
DataFromScreen Data;
public PartyScreenChallengeConfig() public PartyScreenChallengeConfig()
{ {
} }
@@ -26,6 +28,13 @@ namespace Vocaluxe.PartyModes
_ThemeName = "PartyScreenChallengeConfig"; _ThemeName = "PartyScreenChallengeConfig";
_ThemeButtons = new string[] { ButtonNext, ButtonBack }; _ThemeButtons = new string[] { ButtonNext, ButtonBack };
_ScreenVersion = ScreenVersion; _ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenConfig config = new FromScreenConfig();
config.NumPlayers = 0;
config.NumPlayersAtOnce = 0;
config.NumRounds = 0;
Data.ScreenConfig = config;
} }
public override void LoadTheme(string XmlPath) public override void LoadTheme(string XmlPath)
@@ -47,7 +56,15 @@ namespace Vocaluxe.PartyModes
{ {
case Keys.Back: case Keys.Back:
case Keys.Escape: case Keys.Escape:
FadeTo(EScreens.ScreenParty); Back();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
break; break;
} }
} }
@@ -60,12 +77,16 @@ namespace Vocaluxe.PartyModes
if (MouseEvent.LB && IsMouseOver(MouseEvent)) if (MouseEvent.LB && IsMouseOver(MouseEvent))
{ {
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
} }
if (MouseEvent.RB) if (MouseEvent.RB)
{ {
FadeTo(EScreens.ScreenParty); Back();
} }
return true; return true;
@@ -91,5 +112,19 @@ namespace Vocaluxe.PartyModes
{ {
base.OnClose(); base.OnClose();
} }
private void Back()
{
FadeTo(EScreens.ScreenParty);
}
private void Next()
{
Data.ScreenConfig.NumPlayers = 4;
Data.ScreenConfig.NumPlayersAtOnce = 2;
Data.ScreenConfig.NumRounds = 8;
_PartyMode.DataFromScreen(_ThemeName, Data);
}
} }
} }
@@ -12,6 +12,11 @@ namespace Vocaluxe.PartyModes
// Version number for theme files. Increment it, if you've changed something on the theme files! // Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1; const int ScreenVersion = 1;
const string ButtonNext = "ButtonNext";
const string ButtonBack = "ButtonBack";
private DataFromScreen Data;
public PartyScreenChallengeNames() public PartyScreenChallengeNames()
{ {
} }
@@ -21,7 +26,15 @@ namespace Vocaluxe.PartyModes
base.Init(); base.Init();
_ThemeName = "PartyScreenChallengeNames"; _ThemeName = "PartyScreenChallengeNames";
_ThemeButtons = new string[] { ButtonNext, ButtonBack };
_ScreenVersion = ScreenVersion; _ScreenVersion = ScreenVersion;
Data = new DataFromScreen();
FromScreenNames names = new FromScreenNames();
names.FadeToConfig = false;
names.FadeToMain = false;
names.ProfileIDs = new List<int>();
Data.ScreenNames = names;
} }
public override void LoadTheme(string XmlPath) public override void LoadTheme(string XmlPath)
@@ -43,7 +56,16 @@ namespace Vocaluxe.PartyModes
{ {
case Keys.Back: case Keys.Back:
case Keys.Escape: case Keys.Escape:
FadeTo(EScreens.ScreenParty); Back();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
break; break;
} }
} }
@@ -56,7 +78,11 @@ namespace Vocaluxe.PartyModes
if (MouseEvent.LB && IsMouseOver(MouseEvent)) if (MouseEvent.LB && IsMouseOver(MouseEvent))
{ {
if (Buttons[htButtons(ButtonBack)].Selected)
Back();
if (Buttons[htButtons(ButtonNext)].Selected)
Next();
} }
if (MouseEvent.RB) if (MouseEvent.RB)
@@ -87,5 +113,19 @@ namespace Vocaluxe.PartyModes
{ {
base.OnClose(); base.OnClose();
} }
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);
}
} }
} }
+10 -1
View File
@@ -453,7 +453,16 @@ namespace Vocaluxe.Base
public static void FadeTo(EScreens Screen) public static void FadeTo(EScreens Screen)
{ {
if (Screen == EScreens.ScreenPartyDummy) if (Screen == EScreens.ScreenPartyDummy)
_Screens[(int)EScreens.ScreenPartyDummy] = CParty.GetNextPartyScreen(); {
EScreens alt;
CMenu scr = CParty.GetNextPartyScreen(out alt);
if (scr == null)
{
_NextScreen = alt;
return;
}
_Screens[(int)EScreens.ScreenPartyDummy] = scr;
}
_NextScreen = Screen; _NextScreen = Screen;
} }
+5 -10
View File
@@ -131,18 +131,13 @@ namespace Vocaluxe.Base
{ {
if (!_PartyModes.TryGetValue(PartyModeID, out _CurrentPartyMode)) if (!_PartyModes.TryGetValue(PartyModeID, out _CurrentPartyMode))
CLog.LogError("CParty: Can't find party mode ID: " + PartyModeID.ToString()); CLog.LogError("CParty: Can't find party mode ID: " + PartyModeID.ToString());
_CurrentPartyMode.PartyMode.Init();
} }
public static CMenu GetNextPartyScreen() public static CMenu GetNextPartyScreen(out EScreens AlternativeScreen)
{ {
CMenu NextScreen = _CurrentPartyMode.PartyMode.GetNextPartyScreen(); return _CurrentPartyMode.PartyMode.GetNextPartyScreen(out AlternativeScreen);
if (NextScreen != null)
return NextScreen;
NextScreen = new CScreenPartyDummy();
NextScreen.Initialize(CMain.Base);
NextScreen.LoadTheme(String.Empty);
return NextScreen;
} }
#endregion public stuff #endregion public stuff
@@ -290,7 +285,7 @@ namespace Vocaluxe.Base
if (Screen != null) if (Screen != null)
{ {
Screen.AssignPartyMode(pm.PartyMode); Screen.AssingPartyMode(pm.PartyMode);
pm.PartyMode.AddScreen(Screen, screenfile); pm.PartyMode.AddScreen(Screen, screenfile);
} }
else else
+5 -1
View File
@@ -25,11 +25,15 @@ namespace Vocaluxe.Menu
return _PartyModeID; return _PartyModeID;
} }
public void AssignPartyMode(IPartyMode PartyMode) public void AssingPartyMode(IPartyMode PartyMode)
{ {
_PartyMode = PartyMode; _PartyMode = PartyMode;
} }
public virtual void DataToScreen(Object Data)
{
}
/* /*
public sealed override void LoadTheme() public sealed override void LoadTheme()
{ {
+2 -1
View File
@@ -49,7 +49,8 @@ namespace Vocaluxe.Menu
void SetPartyModeID(int PartyModeID); void SetPartyModeID(int PartyModeID);
int GetPartyModeID(); int GetPartyModeID();
void AssignPartyMode(IPartyMode PartyMode); void AssingPartyMode(IPartyMode PartyMode);
void DataToScreen(Object Data);
} }
public interface IConfig public interface IConfig
+4 -5
View File
@@ -12,7 +12,6 @@ namespace Vocaluxe.PartyModes
protected ScreenSongOptions _ScreenSongOptions; protected ScreenSongOptions _ScreenSongOptions;
protected Dictionary<string, CMenuParty> _Screens; protected Dictionary<string, CMenuParty> _Screens;
protected string _Folder; protected string _Folder;
protected Delegate _Callback;
public CPartyMode() public CPartyMode()
{ {
@@ -24,7 +23,7 @@ namespace Vocaluxe.PartyModes
} }
#region Implementation #region Implementation
public virtual bool Init(string Folder) public virtual bool Init()
{ {
return false; return false;
} }
@@ -39,13 +38,13 @@ namespace Vocaluxe.PartyModes
_Screens.Add(ScreenName, Screen); _Screens.Add(ScreenName, Screen);
} }
public void SetPartyModeCallback(Delegate Callback) public virtual void DataFromScreen(string ScreenName, Object Data)
{ {
_Callback = Callback;
} }
public virtual CMenuParty GetNextPartyScreen() public virtual CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen)
{ {
AlternativeScreen = EScreens.ScreenMain;
return null; return null;
} }
+3 -3
View File
@@ -51,12 +51,12 @@ namespace Vocaluxe.PartyModes
public interface IPartyMode public interface IPartyMode
{ {
bool Init(string Folder); bool Init();
void Initialize(Basic Base); void Initialize(Basic Base);
void AddScreen(CMenuParty Screen, string ScreenName); void AddScreen(CMenuParty Screen, string ScreenName);
void SetPartyModeCallback(Delegate Callback); void DataFromScreen(string ScreenName, Object Data);
CMenuParty GetNextPartyScreen(); CMenuParty GetNextPartyScreen(out EScreens AlternativeScreen);
EScreens GetStartScreen(); EScreens GetStartScreen();
EScreens GetMainScreen(); EScreens GetMainScreen();
ScreenSongOptions GetScreenSongOptions(); ScreenSongOptions GetScreenSongOptions();