diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml
new file mode 100644
index 00000000..704e7696
--- /dev/null
+++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml
@@ -0,0 +1,69 @@
+
+
+
+ 1
+
+
+ Menu
+
+ 49
+ 0
+ 0,00
+ 1181
+ 50
+
+
+ Visible
+
+
+
+
+
+
+ Button
+
+ Button
+
+ 145
+ 2
+ 0,00
+ 150
+ 50
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 2
+
+ 32
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Normal
+
+ TR_SCREENMAIN_BUTTON_SING
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs
index f96e5add..ce018613 100644
--- a/Vocaluxe/Menu/CGraphics.cs
+++ b/Vocaluxe/Menu/CGraphics.cs
@@ -34,6 +34,13 @@ namespace Vocaluxe.Menu
ScreenNull = -1
}
+ enum EPopupScreens
+ {
+ PopupPlayerControl = 0,
+
+ NoPopup = -1
+ }
+
class CCursor
{
private Stopwatch _CursorFadingTimer;
@@ -183,11 +190,12 @@ namespace Vocaluxe.Menu
private static float _GlobalAlpha;
private static float _ZOffset;
- private static EScreens ActualScreen;
- private static EScreens NextScreen;
+ private static EScreens _CurrentScreen;
+ private static EScreens _NextScreen;
+ private static EPopupScreens _CurrentPopupScreen;
- private static List ScreenList = new List();
- private static CMenu[] Screens;
+ private static List _Screens = new List();
+ private static List _PopupScreens = new List();
public static float GlobalAlpha
{
@@ -204,27 +212,28 @@ namespace Vocaluxe.Menu
{
// Add Screens, must be the same order as in EScreens!
CLog.StartBenchmark(1, "Build Screen List");
- ScreenList.Add(new CScreenTest());
- ScreenList.Add(new CScreenLoad());
- ScreenList.Add(new CScreenMain());
- ScreenList.Add(new CScreenSong());
- ScreenList.Add(new CScreenOptions());
- ScreenList.Add(new CScreenSing());
- ScreenList.Add(new CScreenProfiles());
- ScreenList.Add(new CScreenScore());
- ScreenList.Add(new CScreenHighscore());
- ScreenList.Add(new CScreenOptionsGame());
- ScreenList.Add(new CScreenOptionsSound());
- ScreenList.Add(new CScreenOptionsRecord());
- ScreenList.Add(new CScreenOptionsVideo());
- ScreenList.Add(new CScreenOptionsTheme());
- ScreenList.Add(new CScreenNames());
- CLog.StopBenchmark(1, "Build Screen List");
+ _Screens.Add(new CScreenTest());
+ _Screens.Add(new CScreenLoad());
+ _Screens.Add(new CScreenMain());
+ _Screens.Add(new CScreenSong());
+ _Screens.Add(new CScreenOptions());
+ _Screens.Add(new CScreenSing());
+ _Screens.Add(new CScreenProfiles());
+ _Screens.Add(new CScreenScore());
+ _Screens.Add(new CScreenHighscore());
+ _Screens.Add(new CScreenOptionsGame());
+ _Screens.Add(new CScreenOptionsSound());
+ _Screens.Add(new CScreenOptionsRecord());
+ _Screens.Add(new CScreenOptionsVideo());
+ _Screens.Add(new CScreenOptionsTheme());
+ _Screens.Add(new CScreenNames());
- Screens = ScreenList.ToArray();
+ _PopupScreens.Add(new CPopupScreenPlayerControl());
+ CLog.StopBenchmark(1, "Build Screen List");
- ActualScreen = EScreens.ScreenLoad;
- NextScreen = EScreens.ScreenNull;
+ _CurrentScreen = EScreens.ScreenLoad;
+ _NextScreen = EScreens.ScreenNull;
+ _CurrentPopupScreen = EPopupScreens.NoPopup;
_FadingTimer = new Stopwatch();
_GlobalAlpha = 1f;
@@ -244,50 +253,65 @@ namespace Vocaluxe.Menu
CTheme.Cursor.h,
CSettings.zNear);
- for (int i = 0; i < Screens.Length; i++)
+ for (int i = 0; i < _Screens.Count; i++)
{
CLog.StartBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]);
- Screens[i].LoadTheme();
+ _Screens[i].LoadTheme();
CLog.StopBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]);
}
+
+ for (int i = 0; i < _PopupScreens.Count; i++)
+ {
+ _PopupScreens[i].LoadTheme();
+ }
}
public static void ReloadTheme()
{
ReloadCursor();
- for (int i = 0; i < Screens.Length; i++)
+ for (int i = 0; i < _Screens.Count; i++)
{
- Screens[i].ReloadTheme();
+ _Screens[i].ReloadTheme();
}
+
+ for (int i = 0; i < _PopupScreens.Count; i++)
+ {
+ _PopupScreens[i].ReloadTheme();
+ }
}
public static void ReloadSkin()
{
ReloadCursor();
- for (int i = 0; i < Screens.Length; i++)
+ for (int i = 0; i < _Screens.Count; i++)
{
- Screens[i].ReloadTextures();
+ _Screens[i].ReloadTextures();
}
+
+ for (int i = 0; i < _PopupScreens.Count; i++)
+ {
+ _PopupScreens[i].ReloadTextures();
+ }
}
public static void SaveTheme()
{
CTheme.SaveTheme();
- for (int i = 0; i < Screens.Length; i++)
+ for (int i = 0; i < _Screens.Count; i++)
{
- Screens[i].SaveTheme();
+ _Screens[i].SaveTheme();
}
+
+ for (int i = 0; i < _PopupScreens.Count; i++)
+ {
+ _PopupScreens[i].SaveTheme();
+ }
}
public static void InitFirstScreen()
{
- Screens[(int)ActualScreen].OnShow();
- Screens[(int)ActualScreen].OnShowFinish();
- }
-
- public static CMenu GetScreen(int Index)
- {
- return Screens[Index];
+ _Screens[(int)_CurrentScreen].OnShow();
+ _Screens[(int)_CurrentScreen].OnShowFinish();
}
public static bool UpdateGameLogic(CKeys Keys, CMouse Mouse)
@@ -301,7 +325,7 @@ namespace Vocaluxe.Menu
CSound.Update();
CBackgroundMusic.Update();
- if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && ActualScreen != EScreens.ScreenSing)
+ if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing)
CSongs.LoadCover(30L);
if (CSettings.GameState != EGameState.EditTheme)
@@ -320,12 +344,13 @@ namespace Vocaluxe.Menu
public static bool Draw()
{
- if ((NextScreen != EScreens.ScreenNull) && !_Fading)
+ if ((_NextScreen != EScreens.ScreenNull) && !_Fading)
{
_Fading = true;
_FadingTimer.Reset();
_FadingTimer.Start();
- Screens[(int)NextScreen].OnShow();
+ _Screens[(int)_NextScreen].OnShow();
+ HidePopup(EPopupScreens.PopupPlayerControl);
}
if (_Fading)
@@ -342,30 +367,37 @@ namespace Vocaluxe.Menu
_GlobalAlpha = 1f;// -factor / 100f;
_ZOffset = CSettings.zFar/2;
- Screens[(int)ActualScreen].Draw();
+ _Screens[(int)_CurrentScreen].Draw();
_GlobalAlpha = factor;
_ZOffset = 0f;
- Screens[(int)NextScreen].Draw();
+ _Screens[(int)_NextScreen].Draw();
_GlobalAlpha = 1f;
}
else
{
- Screens[(int)ActualScreen].OnClose();
- ActualScreen = NextScreen;
- NextScreen = EScreens.ScreenNull;
- Screens[(int)ActualScreen].OnShowFinish();
- Screens[(int)ActualScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y);
- Screens[(int)ActualScreen].Draw();
+ _Screens[(int)_CurrentScreen].OnClose();
+ _CurrentScreen = _NextScreen;
+ _NextScreen = EScreens.ScreenNull;
+ CBackgroundMusic.Play();
+ _Screens[(int)_CurrentScreen].OnShowFinish();
+ _Screens[(int)_CurrentScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y);
+ _Screens[(int)_CurrentScreen].Draw();
_Fading = false;
_FadingTimer.Stop();
}
}
else
{
- Screens[(int)ActualScreen].Draw();
+ _Screens[(int)_CurrentScreen].Draw();
}
+
+ for (int i = 0; i < _PopupScreens.Count; i++)
+ {
+ _PopupScreens[i].Draw();
+ }
+
_Cursor.Draw();
DrawDebugInfos();
@@ -374,7 +406,23 @@ namespace Vocaluxe.Menu
public static void FadeTo(EScreens Screen)
{
- NextScreen = Screen;
+ _NextScreen = Screen;
+ }
+
+ public static void ShowPopup(EPopupScreens PopupScreen)
+ {
+ _PopupScreens[(int)PopupScreen].OnShow();
+ _PopupScreens[(int)PopupScreen].OnShowFinish();
+ _CurrentPopupScreen = PopupScreen;
+ }
+
+ public static void HidePopup(EPopupScreens PopupScreen)
+ {
+ if (_CurrentPopupScreen != PopupScreen)
+ return;
+
+ _PopupScreens[(int)PopupScreen].OnClose();
+ _CurrentPopupScreen = EPopupScreens.NoPopup;
}
public static void HideCursor()
@@ -403,6 +451,16 @@ namespace Vocaluxe.Menu
CSettings.MouseInacive();
_Cursor.FadeOut();
}
+
+ if (_CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && _CurrentScreen != EScreens.ScreenNames
+ && _CurrentScreen != EScreens.ScreenSong &&
+ KeyEvent.Key == Keys.Tab)
+ {
+ if (_CurrentPopupScreen == EPopupScreens.NoPopup)
+ ShowPopup(EPopupScreens.PopupPlayerControl);
+ else
+ HidePopup(EPopupScreens.PopupPlayerControl);
+ }
if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1))
{
@@ -419,7 +477,14 @@ namespace Vocaluxe.Menu
else
{
if (!_Fading)
- Resume &= Screens[(int)ActualScreen].HandleInput(KeyEvent);
+ {
+ bool handled = false;
+ if (_CurrentPopupScreen != EPopupScreens.NoPopup)
+ handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleInput(KeyEvent);
+
+ if (!handled)
+ Resume &= _Screens[(int)_CurrentScreen].HandleInput(KeyEvent);
+ }
}
}
@@ -433,8 +498,12 @@ namespace Vocaluxe.Menu
UpdateMousePosition(MouseEvent.X, MouseEvent.Y);
- if (!_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB))
- Resume &= Screens[(int)ActualScreen].HandleMouse(MouseEvent);
+ bool handled = false;
+ if (_CurrentPopupScreen != EPopupScreens.NoPopup)
+ handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent);
+
+ if (!handled && !_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB))
+ Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent);
}
return Resume;
}
@@ -449,7 +518,7 @@ namespace Vocaluxe.Menu
if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1))
{
CSettings.GameState = EGameState.Normal;
- Screens[(int)ActualScreen].NextInteraction();
+ _Screens[(int)_CurrentScreen].NextInteraction();
}
else if (KeyEvent.ModALT && (KeyEvent.Key == Keys.Enter))
{
@@ -462,14 +531,14 @@ namespace Vocaluxe.Menu
else
{
if (!_Fading)
- Screens[(int)ActualScreen].HandleInputThemeEditor(KeyEvent);
+ _Screens[(int)_CurrentScreen].HandleInputThemeEditor(KeyEvent);
}
}
while (Mouse.PollEvent(ref MouseEvent))
{
if (!_Fading)
- Screens[(int)ActualScreen].HandleMouseThemeEditor(MouseEvent);
+ _Screens[(int)_CurrentScreen].HandleMouseThemeEditor(MouseEvent);
UpdateMousePosition(MouseEvent.X, MouseEvent.Y);
}
@@ -483,7 +552,7 @@ namespace Vocaluxe.Menu
private static bool Update()
{
- return Screens[(int)ActualScreen].UpdateGame();
+ return _Screens[(int)_CurrentScreen].UpdateGame();
}
private static void DrawDebugInfos()
diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs
index 282fb865..b8c5332e 100644
--- a/Vocaluxe/Menu/CMenu.cs
+++ b/Vocaluxe/Menu/CMenu.cs
@@ -862,13 +862,12 @@ namespace Vocaluxe.Menu
{
ResumeBG();
_Active = true;
- CBackgroundMusic.Play();
}
public virtual void OnClose()
{
PauseBG();
- CBackgroundMusic.Pause();
+ _Active = false;
}
#endregion MenuHandler
diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs
new file mode 100644
index 00000000..141d5703
--- /dev/null
+++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Windows.Forms;
+
+using Vocaluxe.Base;
+using Vocaluxe.Lib.Draw;
+using Vocaluxe.Menu;
+
+namespace Vocaluxe.Screens
+{
+ class CPopupScreenPlayerControl : CMenu
+ {
+ // Version number for theme files. Increment it, if you've changed something on the theme files!
+ const int ScreenVersion = 1;
+
+ private const string StaticBG = "StaticBG";
+
+ private const string ButtonNext = "ButtonNext";
+
+ public CPopupScreenPlayerControl()
+ {
+ Init();
+ }
+
+ protected override void Init()
+ {
+ base.Init();
+
+ _ThemeName = "PopupScreenPlayerControl";
+ _ScreenVersion = ScreenVersion;
+
+ _ThemeStatics = new string[] { StaticBG };
+
+ List buttons = new List();
+ buttons.Add(ButtonNext);
+ _ThemeButtons = buttons.ToArray();
+ }
+
+ public override bool HandleInput(KeyEvent KeyEvent)
+ {
+ if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode))
+ {
+
+ }
+ else
+ {
+ switch (KeyEvent.Key)
+ {
+ case Keys.Escape:
+ case Keys.Back:
+ CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
+ return false;
+
+ case Keys.Enter:
+ if (Buttons[htButtons(ButtonNext)].Selected)
+ CBackgroundMusic.Next();
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ public override bool HandleMouse(MouseEvent MouseEvent)
+ {
+ if (MouseEvent.LB && IsMouseOver(MouseEvent))
+ {
+ if (Buttons[htButtons(ButtonNext)].Selected)
+ CBackgroundMusic.Next();
+
+ } else if (MouseEvent.LB)
+ {
+ CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
+ return false;
+ } else if (MouseEvent.RB)
+ {
+ CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
+ return false;
+ }
+ return true;
+ }
+
+ public override bool UpdateGame()
+ {
+
+ return true;
+ }
+
+ public override void OnShow()
+ {
+ base.OnShow();
+
+ }
+
+ public override bool Draw()
+ {
+ if (!_Active)
+ return false;
+
+ return base.Draw();
+ }
+ }
+}
diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs
index 11ed8670..99c5e824 100644
--- a/Vocaluxe/Screens/CScreenMain.cs
+++ b/Vocaluxe/Screens/CScreenMain.cs
@@ -65,10 +65,6 @@ namespace Vocaluxe.Screens
CGraphics.FadeTo(EScreens.ScreenSong);
break;
- case Keys.T:
- CGraphics.FadeTo(EScreens.ScreenTest);
- break;
-
case Keys.Enter:
if (Buttons[htButtons(ButtonSing)].Selected)
CGraphics.FadeTo(EScreens.ScreenSong);
diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj
index 95aaf2b6..a62154d3 100644
--- a/Vocaluxe/Vocaluxe.csproj
+++ b/Vocaluxe/Vocaluxe.csproj
@@ -187,6 +187,7 @@
Form
+