diff --git a/Output/Themes/Ambient/Screens/ScreenSing.xml b/Output/Themes/Ambient/Screens/ScreenSing.xml
index e5c7c0bf..f42d5a99 100644
--- a/Output/Themes/Ambient/Screens/ScreenSing.xml
+++ b/Output/Themes/Ambient/Screens/ScreenSing.xml
@@ -1,7 +1,7 @@
- 6
+ 7
None
@@ -988,6 +988,36 @@
+
+
+ 640
+ 18
+
+ -1,00
+
+ 32
+
+
+
+
+ TextColor
+
+
+ TextSColor
+
+ Left
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
1214
@@ -2771,4 +2801,4 @@
-
\ No newline at end of file
+
diff --git a/Output/Themes/Changelog/Changelog_ScreenSing.txt b/Output/Themes/Changelog/Changelog_ScreenSing.txt
index 85b859da..51b97fd8 100644
--- a/Output/Themes/Changelog/Changelog_ScreenSing.txt
+++ b/Output/Themes/Changelog/Changelog_ScreenSing.txt
@@ -1,5 +1,11 @@
ScreenSing
++++++++++
+Version 7
+
+Add:
+ !text-position and size will be overwritten by vocaluxe!
+
+++++++++
Version 6
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index e9769d91..89e3cf21 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -16,7 +16,7 @@ namespace Vocaluxe.Screens
// Version number for theme files. Increment it, if you've changed something on the theme files!
protected override int _ScreenVersion
{
- get { return 6; }
+ get { return 7; }
}
private struct STimeRect
@@ -31,6 +31,7 @@ namespace Vocaluxe.Screens
private const string _TextPause = "TextPause";
private const string _TextDuetName1 = "TextDuetName1";
private const string _TextDuetName2 = "TextDuetName2";
+ private const string _TextMedleyCountdown = "TextMedleyCountdown";
private string[,] _TextScores;
private string[,] _TextNames;
@@ -105,6 +106,7 @@ namespace Vocaluxe.Screens
texts.Add(_TextPause);
texts.Add(_TextDuetName1);
texts.Add(_TextDuetName2);
+ texts.Add(_TextMedleyCountdown);
_BuildTextStrings(ref texts);
_ThemeTexts = texts.ToArray();
@@ -435,6 +437,8 @@ namespace Vocaluxe.Screens
{
if (_Active)
{
+ _UpdateMedleyCountdown();
+
if (_CurrentVideo != -1 && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam)
{
RectangleF bounds = new RectangleF(0, 0, CSettings.RenderW, CSettings.RenderH);
@@ -499,6 +503,9 @@ namespace Vocaluxe.Screens
_DrawLyricHelper();
+ if (CGame.GameMode == EGameMode.TR_GAMEMODE_MEDLEY)
+ Texts[_TextMedleyCountdown].Draw();
+
if (_Pause)
{
Statics[_StaticPauseBG].ForceDraw();
@@ -936,6 +943,34 @@ namespace Vocaluxe.Screens
Statics[_StaticLyricHelperDuet].Alpha = 0f;
}
+ private void _UpdateMedleyCountdown()
+ {
+ if (CGame.GetSong() != null)
+ {
+ CSong song = CGame.GetSong();
+ float currentTime = _CurrentTime - song.Start;
+ float timeToFirstMedleyNote = (CGame.GetTimeFromBeats(song.Medley.StartBeat, song.BPM) + song.Gap - song.Start);
+ if (currentTime < timeToFirstMedleyNote && CGame.GameMode == EGameMode.TR_GAMEMODE_MEDLEY)
+ {
+ Texts[_TextMedleyCountdown].Visible = true;
+ float timeDiff = timeToFirstMedleyNote - currentTime + 1;
+ double t = timeDiff - Math.Truncate(timeDiff);
+ float h = (float)(t * CSettings.RenderH);
+ float w = CFonts.GetTextBounds(Texts[_TextMedleyCountdown], h).Width;
+ float x = CSettings.RenderW / 2 - w / 2;
+ float y = CSettings.RenderH / 2 - h / 2 ;
+ Texts[_TextMedleyCountdown].X = x;
+ Texts[_TextMedleyCountdown].Y = y;
+ Texts[_TextMedleyCountdown].Height = h;
+ Texts[_TextMedleyCountdown].Text = Math.Round((decimal)(timeDiff - t)).ToString();
+ }
+ else
+ {
+ Texts[_TextMedleyCountdown].Visible = false;
+ }
+ }
+ }
+
private void _DrawLyricHelper()
{
if (_FadeOut)