From 52becec3d23472698fc94be8d015fed8155e4879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Tue, 21 Nov 2017 10:20:15 +0100 Subject: [PATCH 1/4] Restructered screen-sing for better readability --- Vocaluxe/Screens/CScreenSing.cs | 1719 ++++++++++++++++--------------- 1 file changed, 881 insertions(+), 838 deletions(-) diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index d2e4f120..6ec8ea18 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -316,6 +316,73 @@ namespace Vocaluxe.Screens return true; } + #region screen-handling + public override void OnShow() + { + base.OnShow(); + + _InitiatePlayerStatics(); + _InitiatePlayerStrings(); + _InitiateProgressBars(); + if (_StaticsExtra == null) + _CreateExtraStatics(); + if (_TextsExtra == null) + _CreateExtraTexts(); + + _FadeOut = false; + + _CurrentVideo = null; + _CurrentWebcamFrameTexture = null; + _CurrentBeat = -100; + _CurrentTime = 0f; + _FinishTime = 0f; + _Length = -1f; + _TimeToFirstNote = 0f; + _TimeToFirstNoteDuet = 0f; + _SetPause(false); + + _TimeRects.Clear(); + + _SingNotes[_SingBars].Init(0); + _AssignPlayerElements(); + + foreach (CLyric lyric in _Lyrics) + lyric.LyricStyle = CConfig.Config.Theme.LyricStyle; + + for (int p = 0; p < CGame.NumPlayers; p++) + { + _Statics[_PlayerStaticAvatar[p]].Aspect = EAspect.Crop; + _Texts[_PlayerTextScore[p]].Color = new SColorF(CBase.Themes.GetPlayerColor(p + 1), _Texts[_PlayerTextScore[p]].Color.A); + } + + _SetVisibility(); + + _UpdateAvatars(); + _UpdateNames(); + + _CloseSong(); + } + + public override void OnShowFinish() + { + base.OnShowFinish(); + + CGame.Start(); + _NextSong(); + } + + public override void OnClose() + { + base.OnClose(); + _CloseSong(); + if (_Webcam) + CWebcam.Stop(); + CBackgroundMusic.Disabled = false; + } + #endregion + + #region update game + public override bool UpdateGame() { bool finish = false; @@ -412,364 +479,6 @@ namespace Vocaluxe.Screens return true; } - public override void OnShow() - { - base.OnShow(); - - _InitiatePlayerStatics(); - _InitiatePlayerStrings(); - _InitiateProgressBars(); - if (_StaticsExtra == null) - _CreateExtraStatics(); - if (_TextsExtra == null) - _CreateExtraTexts(); - - _FadeOut = false; - - _CurrentVideo = null; - _CurrentWebcamFrameTexture = null; - _CurrentBeat = -100; - _CurrentTime = 0f; - _FinishTime = 0f; - _Length = -1f; - _TimeToFirstNote = 0f; - _TimeToFirstNoteDuet = 0f; - _SetPause(false); - - _TimeRects.Clear(); - - _SingNotes[_SingBars].Init(0); - _AssignPlayerElements(); - - foreach (CLyric lyric in _Lyrics) - lyric.LyricStyle = CConfig.Config.Theme.LyricStyle; - - for (int p = 0; p < CGame.NumPlayers; p++) - { - _Statics[_PlayerStaticAvatar[p]].Aspect = EAspect.Crop; - _Texts[_PlayerTextScore[p]].Color = new SColorF(CBase.Themes.GetPlayerColor(p + 1), _Texts[_PlayerTextScore[p]].Color.A); - } - - _SetVisibility(); - - _UpdateAvatars(); - _UpdateNames(); - - _CloseSong(); - } - - public override void OnShowFinish() - { - base.OnShowFinish(); - - CGame.Start(); - _NextSong(); - } - - public override void Draw() - { - if (_Active) - { - CTextureRef background; - var aspect = EAspect.Crop; - if (_CurrentVideo != null && CConfig.Config.Video.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam) - { - background = _CurrentVideo.Texture; - aspect = _VideoAspect; - } - else if (_Webcam) - { - background = _CurrentWebcamFrameTexture; - aspect = _VideoAspect; - } - else - background = _Background; - if (background != null) - { - SRectF bounds = CSettings.RenderRect; - SRectF rect = CHelper.FitInBounds(bounds, background.OrigAspect, aspect); - CDraw.DrawTexture(background, rect, background.Color, bounds); - } - else if (_SlideShow != null) - _SlideShow.Draw(); - } - - base.Draw(); - - switch (CConfig.Config.Theme.TimerLook) - { - case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: - CDraw.DrawTexture(_Statics[_StaticTimeLine].Texture, _Statics[_StaticTimeLine].Rect, new SColorF(1, 1, 1, 1), _TimeLineRect); - break; - case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: - for (int i = 0; i < _TimeRects.Count; i++) - CDraw.DrawTexture(_TimeRects[i].Rect.Texture, _Statics[_StaticTimeLine].Rect, _TimeRects[i].Rect.Color, _TimeRects[i].Rect.Rect); - break; - } - - _DrawLyricHelper(); - } - - public override void OnClose() - { - base.OnClose(); - _CloseSong(); - if (_Webcam) - CWebcam.Stop(); - CBackgroundMusic.Disabled = false; - } - - private void _CloseSong() - { - if (_CurrentStream > -1) - { - CSound.FadeAndClose(_CurrentStream, 0, 0.5f); - _CurrentStream = -1; - } - CRecord.Stop(); - if (_CurrentVideo != null) - CVideo.Close(ref _CurrentVideo); - CDraw.RemoveTexture(ref _Background); - - if (_SlideShow != null) - _SlideShow.RemoveSlideShowTextures(); - - _Lyrics[_LyricMain].Clear(); - _Lyrics[_LyricSub].Clear(); - _Lyrics[_LyricMainDuet].Clear(); - _Lyrics[_LyricSubDuet].Clear(); - _Lyrics[_LyricMainTop].Clear(); - _Lyrics[_LyricSubTop].Clear(); - _Texts[_TextSongName].Text = String.Empty; - _Texts[_TextDuetName1].Text = String.Empty; - _Texts[_TextDuetName2].Text = String.Empty; - _Texts[_TextMedleyCountdown].Visible = false; - _Texts[_TextMedleyCountdown].Text = String.Empty; - } - - private void _RestartRound() - { - _CloseSong(); - - CGame.ResetPlayer(); - _LoadCurrentSong(); - - _StartSong(); - } - - private void _RestartGame() - { - _CloseSong(); - - CGame.Reset(); - CGame.ResetPlayer(); - CGame.NextRound(); - _LoadCurrentSong(); - - _StartSong(); - } - - private void _NextSong() - { - _CloseSong(); - - CGame.NextRound(); - _LoadCurrentSong(); - - _StartSong(); - } - - private void _LoadCurrentSong() - { - if (CGame.IsFinished()) - { - _FinishedSinging(); - return; - } - - CSong song = CGame.GetSong(); - - if (song == null) - { - CLog.LogError("Critical Error! ScreenSing.LoadNextSong() song is null!"); - return; - } - - string songname = song.Artist + " - " + song.Title; - int rounds = CGame.GetNumSongs(); - if (rounds > 1) - songname += " (" + CGame.RoundNr + "/" + rounds + ")"; - _Texts[_TextSongName].Text = songname; - - _CurrentStream = CSound.Load(song.GetMP3(), false, true, CConfig.Config.Sound.KaraokeEffect == EOffOn.TR_CONFIG_ON ? EAudioEffect.Karaoke : EAudioEffect.None); - CSound.SetStreamVolume(_CurrentStream, 100); - CSound.SetPosition(_CurrentStream, song.Start); - _CurrentTime = song.Start; - _FinishTime = song.Finish; - _TimeToFirstNote = 0f; - _TimeToFirstNoteDuet = 0f; - _Length = -1f; - var voiceAssignments = new int[CGame.NumPlayers]; - if (song.IsDuet) - { - //Save duet-assignment before resetting - for (int i = 0; i < voiceAssignments.Length; i++) - voiceAssignments[i] = CGame.Players[i].VoiceNr; - } - CGame.ResetPlayer(); - - if (!String.IsNullOrEmpty(song.VideoFileName)) - { - _CurrentVideo = CVideo.Load(Path.Combine(song.Folder, song.VideoFileName)); - CVideo.Skip(_CurrentVideo, song.Start, song.VideoGap); - _VideoAspect = song.VideoAspect; - } - - CDraw.RemoveTexture(ref _Background); - if (song.BackgroundFileNames.Count > 1) - { - _SlideShow = GetNewBackground(); - foreach (string bgFile in song.BackgroundFileNames) - _SlideShow.AddSlideShowTexture(Path.Combine(song.Folder, bgFile)); - } - else if (song.BackgroundFileNames.Count == 1) - { - if (!String.IsNullOrEmpty(song.BackgroundFileNames[0])) - _Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileNames[0])); - } - - if (song.IsDuet) - { - //TODO: Show more than 2 voicenames - _Texts[_TextDuetName1].Text = song.Notes.VoiceNames[0]; - _Texts[_TextDuetName2].Text = song.Notes.VoiceNames[1]; - //More than one song: Player is not assigned to line by user - //Otherwise, this is done by CScreenNames - if (CGame.GetNumSongs() > 1) - { - for (int i = 0; i < CGame.NumPlayers; i++) - CGame.Players[i].VoiceNr = (i + 1) % 2; - } - else - { - for (int i = 0; i < CGame.NumPlayers; i++) - CGame.Players[i].VoiceNr = voiceAssignments[i]; - } - } - - //Attention: This needs to be done after player-assignment! - _SingNotes[_SingBars].Init(CGame.NumPlayers, CConfig.Config.Graphics.NumScreens); - - _DynamicLyricsTop = false; - _DynamicLyricsBottom = false; - - foreach (CNoteBars notes in _SingNotes[_SingBars].PlayerNotes) - { - if (notes.Rect.Bottom >= CSettings.RenderH / 2) - _DynamicLyricsBottom = true; - else - _DynamicLyricsTop = true; - } - - for (int p = 0; p < CGame.NumPlayers; p++) - _ProgressBars[_PlayerProgressBarRating[p]].Reset(); - - _SetNormalLyricsVisibility(); - - _TimerSongText.Reset(); - _TimerDuetText1.Reset(); - _TimerDuetText2.Reset(); - - if (!song.IsDuet) - _TimerSongText.Start(); - } - - private void _SetNormalLyricsVisibility() - { - bool bottomLyricsVisible = CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTTOM - || CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH - || (CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsBottom); - - bool topLyricsVisible = CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP - || CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH - || (CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsTop); - - bool duetLyricsVisible = false; - - if (CGame.GetSong() != null && CGame.GetSong().IsDuet) - { - bottomLyricsVisible = true; - topLyricsVisible = false; - duetLyricsVisible = true; - } - - _Lyrics[_LyricMain].Visible = bottomLyricsVisible; - _Lyrics[_LyricSub].Visible = bottomLyricsVisible; - _Statics[_StaticLyrics].Visible = bottomLyricsVisible; - - _Lyrics[_LyricMainTop].Visible = topLyricsVisible; - _Lyrics[_LyricSubTop].Visible = topLyricsVisible; - _Statics[_StaticLyricsTop].Visible = topLyricsVisible; - - _Lyrics[_LyricMainDuet].Visible = duetLyricsVisible; - _Lyrics[_LyricSubDuet].Visible = duetLyricsVisible; - _Statics[_StaticLyricsDuet].Visible = duetLyricsVisible; - } - - private void _StartSong() - { - _PrepareTimeLine(); - CSound.Play(_CurrentStream); - CRecord.Start(); - if (_Webcam) - CWebcam.Start(); - } - - private void _Stop() - { - //Need this to set other songs to points-var - while (!CGame.IsFinished()) - { - CGame.NextRound(); - CGame.ResetPlayer(); - } - - _FinishedSinging(); - } - - private void _FinishedSinging() - { - _FadeOut = true; - CParty.FinishedSinging(); - - if (_Webcam) - CWebcam.Stop(); - } - - private int _FindCurrentLine(CVoice voice, CSongLine[] lines, CSong song) - { - float currentTime = _CurrentTime - song.Gap; - //We are only interested in the last matching line, so either do not check further after line[j].StartBeat > _CurrentBeat or go backwards! - int j = voice.FindPreviousLine(_CurrentBeat); - for (; j >= 0; j--) - { - float firstNoteTime = CGame.GetTimeFromBeats(lines[j].FirstNoteBeat, song.BPM); - //Earlist possible line break is 10s before first note - if (firstNoteTime <= currentTime + 10f) - { - //First line has no predecessor or line has to be shown - if (j == 0 || firstNoteTime - CConfig.Config.Game.MinLineBreakTime <= currentTime) - return j; - float lastNoteTime = CGame.GetTimeFromBeats(lines[j - 1].LastNoteBeat, song.BPM); - //No line break if last line is not fully evaluated (with 50% tolerance -> tested so notes are drawn) - if (lastNoteTime + CConfig.Config.Record.MicDelay / 1000f * 1.5f >= currentTime) - return j - 1; - return j; - } - } - return -1; - } - private void _UpdateLyrics() { if (_FadeOut) @@ -860,7 +569,423 @@ namespace Vocaluxe.Screens } } + private void _UpdateMedleyCountdown() + { + CSong song = CGame.GetSong(); + if (song == null) + return; + float timeToFirstMedleyNote = CGame.GetTimeFromBeats(song.Medley.StartBeat, song.BPM) + song.Gap; + if (_CurrentTime < timeToFirstMedleyNote) + { + float timeDiff = timeToFirstMedleyNote - _CurrentTime + 1; + var fullSeconds = (float)Math.Truncate(timeDiff); + float partSeconds = timeDiff - fullSeconds; + _Texts[_TextMedleyCountdown].Visible = true; + _Texts[_TextMedleyCountdown].Text = fullSeconds.ToString(); + _Texts[_TextMedleyCountdown].Font.Height = partSeconds * CSettings.RenderH; + RectangleF textBounds = CFonts.GetTextBounds(_Texts[_TextMedleyCountdown]); + float x = CSettings.RenderW / 2 - textBounds.Width / 2; + float y = CSettings.RenderH / 2 - textBounds.Height / 2; + _Texts[_TextMedleyCountdown].X = x; + _Texts[_TextMedleyCountdown].Y = y; + } + else + _Texts[_TextMedleyCountdown].Visible = false; + } + + private void _UpdateSongText() + { + if (_TimerSongText.IsRunning && !_Lyrics[_LyricMainDuet].Visible && !_Lyrics[_LyricMainTop].Visible) + { + float t = _TimerSongText.ElapsedMilliseconds / 1000f; + if (t < 10f) + { + _Statics[_StaticSongText].Visible = true; + _Texts[_TextSongName].Visible = true; + + if (t < 7f) + { + _Statics[_StaticSongText].Color.A = 1f; + _Texts[_TextSongName].Color.A = 1f; + } + else + { + _Statics[_StaticSongText].Color.A = (10f - t) / 3f; + _Texts[_TextSongName].Color.A = (10f - t) / 3f; + } + } + else + { + _Statics[_StaticSongText].Visible = false; + _Texts[_TextSongName].Visible = false; + _TimerSongText.Stop(); + } + } + else + { + _Statics[_StaticSongText].Visible = false; + _Texts[_TextSongName].Visible = false; + } + } + + private void _UpdateDuetNames(CText textName, Stopwatch timer) + { + if (timer.IsRunning) + { + float t = timer.ElapsedMilliseconds / 1000f; + if (t < 10f) + { + textName.Visible = true; + + if (t < 3f) + textName.Color.A = t / 3f; + else if (t < 7f) + textName.Color.A = 1f; + else + textName.Color.A = (10f - t) / 3f; + } + else + { + textName.Visible = false; + timer.Stop(); + } + } + else if (!timer.IsRunning && timer.ElapsedMilliseconds == 0 && _Lyrics[_LyricMainDuet].Alpha > 0 && CGame.GetSong().IsDuet) + timer.Start(); + else + textName.Visible = false; + } + + private void _UpdateDuetNames() + { + if (CGame.GetSong() == null) + return; + //Timer for first duet-part + _UpdateDuetNames(_Texts[_TextDuetName1], _TimerDuetText1); + //Timer for second duet-part + if (_TimerDuetText2.IsRunning) + { + float t = _TimerDuetText2.ElapsedMilliseconds / 1000f; + if (t < 10f) + { + _Texts[_TextDuetName2].Visible = true; + + if (t < 3f) + _Texts[_TextDuetName2].Color.A = (3f - (3f - t)) / 3f; + else if (t < 7f) + _Texts[_TextDuetName2].Color.A = 1f; + else + _Texts[_TextDuetName2].Color.A = (3f - (t - 7f)) / 3f; + } + else + { + _Texts[_TextDuetName2].Visible = false; + _TimerDuetText2.Stop(); + } + } + else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && _Lyrics[_LyricMain].Alpha > 0 && CGame.GetSong().IsDuet) + _TimerDuetText2.Start(); + else + _Texts[_TextDuetName2].Visible = false; + } + + private void _UpdateTimeLine() + { + CSong song = CGame.GetSong(); + + if (song == null) + return; + + float totalTime = CSound.GetLength(_CurrentStream); + if (Math.Abs(song.Finish) > 0.001) + totalTime = song.Finish; + + float remainingTime = totalTime - _CurrentTime; + totalTime -= song.Start; + float currentTime = _CurrentTime - song.Start; + + if (_Length < 0 && totalTime > 0) + _PrepareTimeLine(); + + if (totalTime <= 0f) + return; + + switch (CConfig.Config.Game.TimerMode) + { + case ETimerMode.TR_CONFIG_TIMERMODE_CURRENT: + var min = (int)Math.Floor(currentTime / 60f); + var sec = (int)(currentTime - min * 60f); + _Texts[_TextTime].Text = min.ToString("00") + ":" + sec.ToString("00"); + break; + + case ETimerMode.TR_CONFIG_TIMERMODE_REMAINING: + min = (int)Math.Floor(remainingTime / 60f); + sec = (int)(remainingTime - min * 60f); + _Texts[_TextTime].Text = "-" + min.ToString("00") + ":" + sec.ToString("00"); + break; + + case ETimerMode.TR_CONFIG_TIMERMODE_TOTAL: + min = (int)Math.Floor(totalTime / 60f); + sec = (int)(totalTime - min * 60f); + _Texts[_TextTime].Text = "#" + min.ToString("00") + ":" + sec.ToString("00"); + break; + } + + + switch (CConfig.Config.Theme.TimerLook) + { + case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: + _TimeLineRect.W = _Statics[_StaticTimeLine].Rect.W * (currentTime / totalTime); + break; + + case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: + CStatic stat = _Statics[_StaticTimeLine]; + int currentBeat = CGame.CurrentBeat; + for (int i = 0; i < _TimeRects.Count; i++) + { + if (currentBeat >= _TimeRects[i].StartBeat && currentBeat <= _TimeRects[i].EndBeat) + { + _TimeRects[i].Rect.Texture = _Statics[_StaticTimeLineExpandedHighlighted].Texture; + _TimeRects[i].Rect.Color = _Statics[_StaticTimeLineExpandedHighlighted].Color; + } + else + { + _TimeRects[i].Rect.Texture = _Statics[_StaticTimeLineExpandedNormal].Texture; + _TimeRects[i].Rect.Color = _Statics[_StaticTimeLineExpandedNormal].Color; + } + } + _Statics[_StaticTimePointer].X = stat.X + stat.W * (currentTime / totalTime); + break; + } + } + + private void _UpdateRatingBars() + { + for (int i = 0; i < CGame.NumPlayers; i++) + { + _ProgressBars[_PlayerProgressBarRating[i]].Progress = (float)CGame.Players[i].Rating; + } + } + + #endregion + + #region drawing + public override void Draw() + { + if (_Active) + { + CTextureRef background; + var aspect = EAspect.Crop; + if (_CurrentVideo != null && CConfig.Config.Video.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam) + { + background = _CurrentVideo.Texture; + aspect = _VideoAspect; + } + else if (_Webcam) + { + background = _CurrentWebcamFrameTexture; + aspect = _VideoAspect; + } + else + background = _Background; + if (background != null) + { + SRectF bounds = CSettings.RenderRect; + SRectF rect = CHelper.FitInBounds(bounds, background.OrigAspect, aspect); + CDraw.DrawTexture(background, rect, background.Color, bounds); + } + else if (_SlideShow != null) + _SlideShow.Draw(); + } + + base.Draw(); + + switch (CConfig.Config.Theme.TimerLook) + { + case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: + CDraw.DrawTexture(_Statics[_StaticTimeLine].Texture, _Statics[_StaticTimeLine].Rect, new SColorF(1, 1, 1, 1), _TimeLineRect); + break; + case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: + for (int i = 0; i < _TimeRects.Count; i++) + CDraw.DrawTexture(_TimeRects[i].Rect.Texture, _Statics[_StaticTimeLine].Rect, _TimeRects[i].Rect.Color, _TimeRects[i].Rect.Rect); + break; + } + + _DrawLyricHelper(); + } + + private void _DrawLyricHelper() + { + if (_FadeOut) + return; + + if (!CSound.IsPlaying(_CurrentStream) && !CSound.IsPaused(_CurrentStream)) + return; + + CSong song = CGame.GetSong(); + + if (song == null) + return; + + float alpha = (float)((Math.Cos(_CurrentTime * Math.PI * 2) + 1) / 2.0) / 2f + 0.5f; + + if (_TimeToFirstNote > CSettings.LyricHelperMinTime && _RemainingTimeToFirstNote > 0f && _RemainingTimeToFirstNote < CSettings.LyricHelperEnableTime) + { + float time = _RemainingTimeToFirstNote; + float totaltime = CSettings.LyricHelperMoveTime; + + if (totaltime > _TimeToFirstNote) + totaltime = _TimeToFirstNote; + + if (time > totaltime) + time = totaltime; + + if (_Statics[_StaticLyrics].Visible) + { + SRectF rect = _Statics[_StaticLyricHelper].Rect; + var color = new SColorF( + _Statics[_StaticLyricHelper].Color.R, + _Statics[_StaticLyricHelper].Color.G, + _Statics[_StaticLyricHelper].Color.B, + _Statics[_StaticLyricHelper].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha); + + float distance = _Lyrics[_LyricMain].GetCurrentLyricPosX() - rect.X - rect.W; + CDraw.DrawTexture(_Statics[_StaticLyricHelper].Texture, + new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color); + } + + if (_Statics[_StaticLyricsTop].Visible) + { + SRectF rect = _Statics[_StaticLyricHelperTop].Rect; + var color = new SColorF( + _Statics[_StaticLyricHelperTop].Color.R, + _Statics[_StaticLyricHelperTop].Color.G, + _Statics[_StaticLyricHelperTop].Color.B, + _Statics[_StaticLyricHelperTop].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha); + + float distance = _Lyrics[_LyricMainTop].GetCurrentLyricPosX() - rect.X - rect.W; + CDraw.DrawTexture(_Statics[_StaticLyricHelperTop].Texture, + new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color); + } + } + + if (song.IsDuet) + { + if (_TimeToFirstNoteDuet > CSettings.LyricHelperMinTime && _RemainingTimeToFirstNoteDuet > 0f && _RemainingTimeToFirstNoteDuet < CSettings.LyricHelperEnableTime) + { + float time = _RemainingTimeToFirstNoteDuet; + float totaltime = CSettings.LyricHelperMoveTime; + + if (totaltime > _TimeToFirstNoteDuet) + totaltime = _TimeToFirstNoteDuet; + + if (time > totaltime) + time = totaltime; + + SRectF rect = _Statics[_StaticLyricHelperDuet].Rect; + + var color = new SColorF( + _Statics[_StaticLyricHelperDuet].Color.R, + _Statics[_StaticLyricHelperDuet].Color.G, + _Statics[_StaticLyricHelperDuet].Color.B, + _Statics[_StaticLyricHelperDuet].Color.A * _Statics[_StaticLyricHelperDuet].Alpha * alpha); + + float distance = _Lyrics[_LyricMainDuet].GetCurrentLyricPosX() - rect.X - rect.W; + CDraw.DrawTexture(_Statics[_StaticLyricHelperDuet].Texture, + new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), + color); + } + } + } + #endregion + + #region game-handling + + /// + /// Start recording and playing current loaded song. + /// + private void _StartSong() + { + _PrepareTimeLine(); + CSound.Play(_CurrentStream); + CRecord.Start(); + if (_Webcam) + CWebcam.Start(); + } + + /// + /// Stop singing and skip all possible unsung songs. + /// + private void _Stop() + { + _CloseSong(); + + //Need this to set other songs to points-var + while (!CGame.IsFinished()) + { + CGame.NextRound(); + CGame.ResetPlayer(); + } + + _FinishedSinging(); + } + + /// + /// Singing is finished, stop webcam and call PartyMode method. + /// + private void _FinishedSinging() + { + _FadeOut = true; + CParty.FinishedSinging(); + + if (_Webcam) + CWebcam.Stop(); + } + + /// + /// Restart current round: Only sing current song again. + /// + private void _RestartRound() + { + _CloseSong(); + + CGame.ResetPlayer(); + _LoadCurrentSong(); + + _StartSong(); + } + + /// + /// Restart complete game: If there is more than one song, sing every song again. + /// + private void _RestartGame() + { + _CloseSong(); + + CGame.Reset(); + CGame.ResetPlayer(); + CGame.NextRound(); + + _LoadCurrentSong(); + + _StartSong(); + } + + /// + /// Load next song. + /// + private void _NextSong() + { + _CloseSong(); + + CGame.NextRound(); + CGame.ResetPlayer(); + + _LoadCurrentSong(); + + _StartSong(); + } private void _TogglePause() { _SetPause(!_Pause); @@ -870,10 +995,10 @@ namespace Vocaluxe.Screens { _Pause = paused; - foreach(String s in _StaticsPause) + foreach (String s in _StaticsPause) _Statics[s].Visible = _Pause; - foreach(String s in _TextsPause) + foreach (String s in _TextsPause) _Texts[s].Visible = _Pause; _Buttons[_ButtonCancel].Visible = _Pause; @@ -885,7 +1010,386 @@ namespace Vocaluxe.Screens else CSound.Play(_CurrentStream); } + #endregion + #region song-handling + /// + /// Prepare streams and screen for current song. + /// + private void _LoadCurrentSong() + { + if (CGame.IsFinished()) + { + _FinishedSinging(); + return; + } + + CSong song = CGame.GetSong(); + + if (song == null) + { + CLog.LogError("Critical Error! ScreenSing.LoadNextSong() song is null!"); + return; + } + + string songname = song.Artist + " - " + song.Title; + int rounds = CGame.GetNumSongs(); + if (rounds > 1) + songname += " (" + CGame.RoundNr + "/" + rounds + ")"; + _Texts[_TextSongName].Text = songname; + + _CurrentStream = CSound.Load(song.GetMP3(), false, true, CConfig.Config.Sound.KaraokeEffect == EOffOn.TR_CONFIG_ON ? EAudioEffect.Karaoke : EAudioEffect.None); + CSound.SetStreamVolume(_CurrentStream, 100); + CSound.SetPosition(_CurrentStream, song.Start); + _CurrentTime = song.Start; + _FinishTime = song.Finish; + _TimeToFirstNote = 0f; + _TimeToFirstNoteDuet = 0f; + _Length = -1f; + var voiceAssignments = new int[CGame.NumPlayers]; + if (song.IsDuet) + { + //Save duet-assignment before resetting + for (int i = 0; i < voiceAssignments.Length; i++) + voiceAssignments[i] = CGame.Players[i].VoiceNr; + } + + if (!String.IsNullOrEmpty(song.VideoFileName)) + { + _CurrentVideo = CVideo.Load(Path.Combine(song.Folder, song.VideoFileName)); + CVideo.Skip(_CurrentVideo, song.Start, song.VideoGap); + _VideoAspect = song.VideoAspect; + } + + CDraw.RemoveTexture(ref _Background); + if (song.BackgroundFileNames.Count > 1) + { + _SlideShow = GetNewBackground(); + foreach (string bgFile in song.BackgroundFileNames) + _SlideShow.AddSlideShowTexture(Path.Combine(song.Folder, bgFile)); + } + else if (song.BackgroundFileNames.Count == 1) + { + if (!String.IsNullOrEmpty(song.BackgroundFileNames[0])) + _Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileNames[0])); + } + + if (song.IsDuet) + { + //TODO: Show more than 2 voicenames + _Texts[_TextDuetName1].Text = song.Notes.VoiceNames[0]; + _Texts[_TextDuetName2].Text = song.Notes.VoiceNames[1]; + //More than one song: Player is not assigned to line by user + //Otherwise, this is done by CScreenNames + if (CGame.GetNumSongs() > 1) + { + for (int i = 0; i < CGame.NumPlayers; i++) + CGame.Players[i].VoiceNr = (i + 1) % 2; + } + else + { + for (int i = 0; i < CGame.NumPlayers; i++) + CGame.Players[i].VoiceNr = voiceAssignments[i]; + } + } + + //Attention: This needs to be done after player-assignment! + _SingNotes[_SingBars].Init(CGame.NumPlayers, CConfig.Config.Graphics.NumScreens); + + _DynamicLyricsTop = false; + _DynamicLyricsBottom = false; + + foreach (CNoteBars notes in _SingNotes[_SingBars].PlayerNotes) + { + if (notes.Rect.Bottom >= CSettings.RenderH / 2) + _DynamicLyricsBottom = true; + else + _DynamicLyricsTop = true; + } + + for (int p = 0; p < CGame.NumPlayers; p++) + _ProgressBars[_PlayerProgressBarRating[p]].Reset(); + + _SetNormalLyricsVisibility(); + + _TimerSongText.Reset(); + _TimerDuetText1.Reset(); + _TimerDuetText2.Reset(); + + if (!song.IsDuet) + _TimerSongText.Start(); + } + + /// + /// Stop playing audio/video, recording and clear some ui-elements. + /// + private void _CloseSong() + { + if (_CurrentStream > -1) + { + CSound.FadeAndClose(_CurrentStream, 0, 0.5f); + _CurrentStream = -1; + } + CRecord.Stop(); + if (_CurrentVideo != null) + CVideo.Close(ref _CurrentVideo); + CDraw.RemoveTexture(ref _Background); + + if (_SlideShow != null) + _SlideShow.RemoveSlideShowTextures(); + + _Lyrics[_LyricMain].Clear(); + _Lyrics[_LyricSub].Clear(); + _Lyrics[_LyricMainDuet].Clear(); + _Lyrics[_LyricSubDuet].Clear(); + _Lyrics[_LyricMainTop].Clear(); + _Lyrics[_LyricSubTop].Clear(); + _Texts[_TextSongName].Text = String.Empty; + _Texts[_TextDuetName1].Text = String.Empty; + _Texts[_TextDuetName2].Text = String.Empty; + _Texts[_TextMedleyCountdown].Visible = false; + _Texts[_TextMedleyCountdown].Text = String.Empty; + } + #endregion + + #region visibility and fading + private void _SetNormalLyricsVisibility() + { + bool bottomLyricsVisible = CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTTOM + || CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH + || (CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsBottom); + + bool topLyricsVisible = CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP + || CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH + || (CConfig.Config.Game.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsTop); + + bool duetLyricsVisible = false; + + if (CGame.GetSong() != null && CGame.GetSong().IsDuet) + { + bottomLyricsVisible = true; + topLyricsVisible = false; + duetLyricsVisible = true; + } + + _Lyrics[_LyricMain].Visible = bottomLyricsVisible; + _Lyrics[_LyricSub].Visible = bottomLyricsVisible; + _Statics[_StaticLyrics].Visible = bottomLyricsVisible; + + _Lyrics[_LyricMainTop].Visible = topLyricsVisible; + _Lyrics[_LyricSubTop].Visible = topLyricsVisible; + _Statics[_StaticLyricsTop].Visible = topLyricsVisible; + + _Lyrics[_LyricMainDuet].Visible = duetLyricsVisible; + _Lyrics[_LyricSubDuet].Visible = duetLyricsVisible; + _Statics[_StaticLyricsDuet].Visible = duetLyricsVisible; + } + + private void _SetVisibility() + { + _Statics[_StaticLyricsDuet].Visible = false; + _Statics[_StaticLyricHelper].Visible = false; + _Statics[_StaticLyricHelperDuet].Visible = false; + _Statics[_StaticLyricHelperTop].Visible = false; + _Lyrics[_LyricMainDuet].Visible = false; + _Lyrics[_LyricSubDuet].Visible = false; + + _Statics[_StaticSongText].Visible = false; + _Texts[_TextSongName].Visible = false; + _Texts[_TextDuetName1].Visible = false; + _Texts[_TextDuetName2].Visible = false; + + int screenPlayers = CGame.NumPlayers / CConfig.GetNumScreens(); + int remainingScreenPlayers = CGame.NumPlayers - (screenPlayers * CConfig.GetNumScreens()); + + for (int screen = 0; screen < CSettings.MaxNumScreens; screen++) + { + int currentScreenPlayers = screenPlayers; + + if (remainingScreenPlayers > 0) + { + currentScreenPlayers++; + remainingScreenPlayers--; + } + + string curN = "N" + currentScreenPlayers; + string curS = "S" + (screen + 1); + + foreach (string se in _StaticsExtra[screen]) + { + string n = se.Substring(se.Length - 2); + string s = se.Substring(0, 2); + //Make StaticExtra elements with matching player number and active screen visible + if (n == curN && s == curS && screen < CConfig.GetNumScreens()) + _Statics[se].Visible = true; + else + _Statics[se].Visible = false; + } + + foreach (string te in _TextsExtra[screen]) + { + string n = te.Substring(te.Length - 2); + string s = te.Substring(0, 2); + //Make TextExtra elements with matching player number and active screen visible + if (n == curN && s == curS && screen < CConfig.GetNumScreens()) + _Texts[te].Visible = true; + else + _Texts[te].Visible = false; + } + + for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++) + { + for (int player = 0; player < CSettings.MaxNumPlayer && player <= numplayer; player++) + { + _Texts[_TextScores[screen, player, numplayer]].AllMonitors = false; + _Texts[_TextScores[screen, player, numplayer]].Visible = false; + _Texts[_TextNames[screen, player, numplayer]].AllMonitors = false; + _Texts[_TextNames[screen, player, numplayer]].Visible = false; + _Statics[_StaticScores[screen, player, numplayer]].AllMonitors = false; + _Statics[_StaticScores[screen, player, numplayer]].Visible = false; + _Statics[_StaticAvatars[screen, player, numplayer]].AllMonitors = false; + _Statics[_StaticAvatars[screen, player, numplayer]].Visible = false; + _ProgressBars[_ProgressBarsRating[screen, player, numplayer]].AllMonitors = false; + _ProgressBars[_ProgressBarsRating[screen, player, numplayer]].Visible = false; + } + } + } + + for (int player = 0; player < CGame.NumPlayers; player++) + { + _Texts[_PlayerTextScore[player]].Visible = true; + _Texts[_PlayerTextName[player]].Visible = (CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || + CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME); + _Statics[_PlayerStaticScore[player]].Visible = true; + _Statics[_PlayerStaticAvatar[player]].Visible = (CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || + CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR); + _ProgressBars[_PlayerProgressBarRating[player]].Visible = true; + } + + _Lyrics[_LyricMain].Alpha = 0f; + _Lyrics[_LyricSub].Alpha = 0f; + + _Lyrics[_LyricMainTop].Alpha = 0f; + _Lyrics[_LyricSubTop].Alpha = 0f; + + _Statics[_StaticLyrics].Alpha = 0f; + _Statics[_StaticLyricsTop].Alpha = 0f; + + _Statics[_StaticLyricHelper].Alpha = 0f; + _Statics[_StaticLyricHelperTop].Alpha = 0f; + + _Lyrics[_LyricMainDuet].Alpha = 0f; + _Lyrics[_LyricSubDuet].Alpha = 0f; + + _Statics[_StaticLyricsDuet].Alpha = 0f; + _Statics[_StaticLyricHelperDuet].Alpha = 0f; + + _Statics[_StaticTimeLine].Visible = CConfig.Config.Theme.TimerLook == ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL; + _Statics[_StaticTimeLineExpandedHighlighted].Visible = false; + _Statics[_StaticTimeLineExpandedNormal].Visible = false; + } + + private float[] _CalcFadingAlpha() + { + const float dt = 4f; + const float rt = dt * 0.8f; + + CSong song = CGame.GetSong(); + if (song == null || !song.NotesLoaded) + return null; + + var alpha = new float[song.Notes.VoiceCount * 2]; + float currentTime = _CurrentTime - song.Gap; + + for (int i = 0; i < song.Notes.VoiceCount; i++) + { + CVoice voice = song.Notes.GetVoice(i); + CSongLine[] lines = voice.Lines; + + // find current line for lyric sub fading + int currentLineSub = _FindCurrentLine(voice, lines, song); + + // find current line for lyric main fading + int currentLine = 0; + for (int j = 0; j < lines.Length; j++) + { + if (lines[j].FirstNoteBeat <= _CurrentBeat) + currentLine = j; + } + + // default values + alpha[i * 2] = 1f; + alpha[i * 2 + 1] = 1f; + + // main line alpha + if (currentLine == 0 && currentTime < CGame.GetTimeFromBeats(lines[currentLine].FirstNoteBeat, song.BPM)) + { + // first main line and fist note is not reached + // => fade in + float diff = CGame.GetTimeFromBeats(lines[currentLine].FirstNoteBeat, song.BPM) - currentTime; + if (diff > dt) + alpha[i * 2] = 1f - (diff - dt) / rt; + } + else if (currentLine < lines.Length - 1 && CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM) < currentTime && + CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) > currentTime) + { + // current position is between two lines + + // time between the to lines + float diff = CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) - + CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); + + // fade only if there is enough time for fading + if (diff > 3.3f * dt) + { + // time elapsed since last line + float last = currentTime - CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); + + // time to next line + float next = CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) - currentTime; + + if (last < next) + { + // fade out + alpha[i * 2] = 1f - last / rt; + } + else + { + // fade in if it is time for + if (next > dt) + alpha[i * 2] = 1f - (next - dt) / rt; + } + } + } + else if (currentLine == lines.Length - 1 && CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM) < currentTime) + { + // last main line and last note was reached + // => fade out + float diff = currentTime - CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); + alpha[i * 2] = 1f - diff / rt; + } + + // sub + if (currentLineSub < lines.Length - 2) + { + float diff = CGame.GetTimeFromBeats(lines[currentLineSub + 1].FirstNoteBeat, song.BPM) - currentTime; + + if (diff > dt) + alpha[i * 2 + 1] = 1f - (diff - dt) / rt; + } + + if (alpha[i * 2] < 0f) + alpha[i * 2] = 0f; + + if (alpha[i * 2 + 1] < 0f) + alpha[i * 2 + 1] = 0f; + } + + return alpha; + } + #endregion + + #region theme loading private void _BuildTextStrings(List texts) { _TextScores = new string[CSettings.MaxNumScreens, CSettings.MaxNumPlayer, CSettings.MaxNumPlayer]; @@ -1141,483 +1645,30 @@ namespace Vocaluxe.Screens } } + #endregion - private void _SetVisibility() + private int _FindCurrentLine(CVoice voice, CSongLine[] lines, CSong song) { - _Statics[_StaticLyricsDuet].Visible = false; - _Statics[_StaticLyricHelper].Visible = false; - _Statics[_StaticLyricHelperDuet].Visible = false; - _Statics[_StaticLyricHelperTop].Visible = false; - _Lyrics[_LyricMainDuet].Visible = false; - _Lyrics[_LyricSubDuet].Visible = false; - - _Statics[_StaticSongText].Visible = false; - _Texts[_TextSongName].Visible = false; - _Texts[_TextDuetName1].Visible = false; - _Texts[_TextDuetName2].Visible = false; - - int screenPlayers = CGame.NumPlayers / CConfig.GetNumScreens(); - int remainingScreenPlayers = CGame.NumPlayers - (screenPlayers * CConfig.GetNumScreens()); - - for (int screen = 0; screen < CSettings.MaxNumScreens; screen++) - { - int currentScreenPlayers = screenPlayers; - - if (remainingScreenPlayers > 0) - { - currentScreenPlayers++; - remainingScreenPlayers--; - } - - string curN = "N" + currentScreenPlayers; - string curS = "S" + (screen + 1); - - foreach (string se in _StaticsExtra[screen]) - { - string n = se.Substring(se.Length - 2); - string s = se.Substring(0, 2); - //Make StaticExtra elements with matching player number and active screen visible - if (n == curN && s == curS && screen < CConfig.GetNumScreens()) - _Statics[se].Visible = true; - else - _Statics[se].Visible = false; - } - - foreach (string te in _TextsExtra[screen]) - { - string n = te.Substring(te.Length - 2); - string s = te.Substring(0, 2); - //Make TextExtra elements with matching player number and active screen visible - if (n == curN && s == curS && screen < CConfig.GetNumScreens()) - _Texts[te].Visible = true; - else - _Texts[te].Visible = false; - } - - for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++) - { - for (int player = 0; player < CSettings.MaxNumPlayer && player <= numplayer; player++) - { - _Texts[_TextScores[screen, player, numplayer]].AllMonitors = false; - _Texts[_TextScores[screen, player, numplayer]].Visible = false; - _Texts[_TextNames[screen, player, numplayer]].AllMonitors = false; - _Texts[_TextNames[screen, player, numplayer]].Visible = false; - _Statics[_StaticScores[screen, player, numplayer]].AllMonitors = false; - _Statics[_StaticScores[screen, player, numplayer]].Visible = false; - _Statics[_StaticAvatars[screen, player, numplayer]].AllMonitors = false; - _Statics[_StaticAvatars[screen, player, numplayer]].Visible = false; - _ProgressBars[_ProgressBarsRating[screen, player, numplayer]].AllMonitors = false; - _ProgressBars[_ProgressBarsRating[screen, player, numplayer]].Visible = false; - } - } - } - - for (int player = 0; player < CGame.NumPlayers; player++) - { - _Texts[_PlayerTextScore[player]].Visible = true; - _Texts[_PlayerTextName[player]].Visible = (CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || - CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME); - _Statics[_PlayerStaticScore[player]].Visible = true; - _Statics[_PlayerStaticAvatar[player]].Visible = (CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || - CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR); - _ProgressBars[_PlayerProgressBarRating[player]].Visible = true; - } - - _Lyrics[_LyricMain].Alpha = 0f; - _Lyrics[_LyricSub].Alpha = 0f; - - _Lyrics[_LyricMainTop].Alpha = 0f; - _Lyrics[_LyricSubTop].Alpha = 0f; - - _Statics[_StaticLyrics].Alpha = 0f; - _Statics[_StaticLyricsTop].Alpha = 0f; - - _Statics[_StaticLyricHelper].Alpha = 0f; - _Statics[_StaticLyricHelperTop].Alpha = 0f; - - _Lyrics[_LyricMainDuet].Alpha = 0f; - _Lyrics[_LyricSubDuet].Alpha = 0f; - - _Statics[_StaticLyricsDuet].Alpha = 0f; - _Statics[_StaticLyricHelperDuet].Alpha = 0f; - - _Statics[_StaticTimeLine].Visible = CConfig.Config.Theme.TimerLook == ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL; - _Statics[_StaticTimeLineExpandedHighlighted].Visible = false; - _Statics[_StaticTimeLineExpandedNormal].Visible = false; - } - - private void _UpdateMedleyCountdown() - { - CSong song = CGame.GetSong(); - if (song == null) - return; - float timeToFirstMedleyNote = CGame.GetTimeFromBeats(song.Medley.StartBeat, song.BPM) + song.Gap; - if (_CurrentTime < timeToFirstMedleyNote) - { - float timeDiff = timeToFirstMedleyNote - _CurrentTime + 1; - var fullSeconds = (float)Math.Truncate(timeDiff); - float partSeconds = timeDiff - fullSeconds; - _Texts[_TextMedleyCountdown].Visible = true; - _Texts[_TextMedleyCountdown].Text = fullSeconds.ToString(); - _Texts[_TextMedleyCountdown].Font.Height = partSeconds * CSettings.RenderH; - - RectangleF textBounds = CFonts.GetTextBounds(_Texts[_TextMedleyCountdown]); - float x = CSettings.RenderW / 2 - textBounds.Width / 2; - float y = CSettings.RenderH / 2 - textBounds.Height / 2; - _Texts[_TextMedleyCountdown].X = x; - _Texts[_TextMedleyCountdown].Y = y; - } - else - _Texts[_TextMedleyCountdown].Visible = false; - } - - private void _DrawLyricHelper() - { - if (_FadeOut) - return; - - if (!CSound.IsPlaying(_CurrentStream) && !CSound.IsPaused(_CurrentStream)) - return; - - CSong song = CGame.GetSong(); - - if (song == null) - return; - - float alpha = (float)((Math.Cos(_CurrentTime * Math.PI * 2) + 1) / 2.0) / 2f + 0.5f; - - if (_TimeToFirstNote > CSettings.LyricHelperMinTime && _RemainingTimeToFirstNote > 0f && _RemainingTimeToFirstNote < CSettings.LyricHelperEnableTime) - { - float time = _RemainingTimeToFirstNote; - float totaltime = CSettings.LyricHelperMoveTime; - - if (totaltime > _TimeToFirstNote) - totaltime = _TimeToFirstNote; - - if (time > totaltime) - time = totaltime; - - if (_Statics[_StaticLyrics].Visible) - { - SRectF rect = _Statics[_StaticLyricHelper].Rect; - var color = new SColorF( - _Statics[_StaticLyricHelper].Color.R, - _Statics[_StaticLyricHelper].Color.G, - _Statics[_StaticLyricHelper].Color.B, - _Statics[_StaticLyricHelper].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha); - - float distance = _Lyrics[_LyricMain].GetCurrentLyricPosX() - rect.X - rect.W; - CDraw.DrawTexture(_Statics[_StaticLyricHelper].Texture, - new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color); - } - - if (_Statics[_StaticLyricsTop].Visible) - { - SRectF rect = _Statics[_StaticLyricHelperTop].Rect; - var color = new SColorF( - _Statics[_StaticLyricHelperTop].Color.R, - _Statics[_StaticLyricHelperTop].Color.G, - _Statics[_StaticLyricHelperTop].Color.B, - _Statics[_StaticLyricHelperTop].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha); - - float distance = _Lyrics[_LyricMainTop].GetCurrentLyricPosX() - rect.X - rect.W; - CDraw.DrawTexture(_Statics[_StaticLyricHelperTop].Texture, - new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color); - } - } - - if (song.IsDuet) - { - if (_TimeToFirstNoteDuet > CSettings.LyricHelperMinTime && _RemainingTimeToFirstNoteDuet > 0f && _RemainingTimeToFirstNoteDuet < CSettings.LyricHelperEnableTime) - { - float time = _RemainingTimeToFirstNoteDuet; - float totaltime = CSettings.LyricHelperMoveTime; - - if (totaltime > _TimeToFirstNoteDuet) - totaltime = _TimeToFirstNoteDuet; - - if (time > totaltime) - time = totaltime; - - SRectF rect = _Statics[_StaticLyricHelperDuet].Rect; - - var color = new SColorF( - _Statics[_StaticLyricHelperDuet].Color.R, - _Statics[_StaticLyricHelperDuet].Color.G, - _Statics[_StaticLyricHelperDuet].Color.B, - _Statics[_StaticLyricHelperDuet].Color.A * _Statics[_StaticLyricHelperDuet].Alpha * alpha); - - float distance = _Lyrics[_LyricMainDuet].GetCurrentLyricPosX() - rect.X - rect.W; - CDraw.DrawTexture(_Statics[_StaticLyricHelperDuet].Texture, - new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), - color); - } - } - } - - private float[] _CalcFadingAlpha() - { - const float dt = 4f; - const float rt = dt * 0.8f; - - CSong song = CGame.GetSong(); - if (song == null || !song.NotesLoaded) - return null; - - var alpha = new float[song.Notes.VoiceCount * 2]; float currentTime = _CurrentTime - song.Gap; - - for (int i = 0; i < song.Notes.VoiceCount; i++) + //We are only interested in the last matching line, so either do not check further after line[j].StartBeat > _CurrentBeat or go backwards! + int j = voice.FindPreviousLine(_CurrentBeat); + for (; j >= 0; j--) { - CVoice voice = song.Notes.GetVoice(i); - CSongLine[] lines = voice.Lines; - - // find current line for lyric sub fading - int currentLineSub = _FindCurrentLine(voice, lines, song); - - // find current line for lyric main fading - int currentLine = 0; - for (int j = 0; j < lines.Length; j++) + float firstNoteTime = CGame.GetTimeFromBeats(lines[j].FirstNoteBeat, song.BPM); + //Earlist possible line break is 10s before first note + if (firstNoteTime <= currentTime + 10f) { - if (lines[j].FirstNoteBeat <= _CurrentBeat) - currentLine = j; - } - - // default values - alpha[i * 2] = 1f; - alpha[i * 2 + 1] = 1f; - - // main line alpha - if (currentLine == 0 && currentTime < CGame.GetTimeFromBeats(lines[currentLine].FirstNoteBeat, song.BPM)) - { - // first main line and fist note is not reached - // => fade in - float diff = CGame.GetTimeFromBeats(lines[currentLine].FirstNoteBeat, song.BPM) - currentTime; - if (diff > dt) - alpha[i * 2] = 1f - (diff - dt) / rt; - } - else if (currentLine < lines.Length - 1 && CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM) < currentTime && - CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) > currentTime) - { - // current position is between two lines - - // time between the to lines - float diff = CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) - - CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); - - // fade only if there is enough time for fading - if (diff > 3.3f * dt) - { - // time elapsed since last line - float last = currentTime - CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); - - // time to next line - float next = CGame.GetTimeFromBeats(lines[currentLine + 1].FirstNoteBeat, song.BPM) - currentTime; - - if (last < next) - { - // fade out - alpha[i * 2] = 1f - last / rt; - } - else - { - // fade in if it is time for - if (next > dt) - alpha[i * 2] = 1f - (next - dt) / rt; - } - } - } - else if (currentLine == lines.Length - 1 && CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM) < currentTime) - { - // last main line and last note was reached - // => fade out - float diff = currentTime - CGame.GetTimeFromBeats(lines[currentLine].LastNoteBeat, song.BPM); - alpha[i * 2] = 1f - diff / rt; - } - - // sub - if (currentLineSub < lines.Length - 2) - { - float diff = CGame.GetTimeFromBeats(lines[currentLineSub + 1].FirstNoteBeat, song.BPM) - currentTime; - - if (diff > dt) - alpha[i * 2 + 1] = 1f - (diff - dt) / rt; - } - - if (alpha[i * 2] < 0f) - alpha[i * 2] = 0f; - - if (alpha[i * 2 + 1] < 0f) - alpha[i * 2 + 1] = 0f; - } - - return alpha; - } - - private void _UpdateSongText() - { - if (_TimerSongText.IsRunning && !_Lyrics[_LyricMainDuet].Visible && !_Lyrics[_LyricMainTop].Visible) - { - float t = _TimerSongText.ElapsedMilliseconds / 1000f; - if (t < 10f) - { - _Statics[_StaticSongText].Visible = true; - _Texts[_TextSongName].Visible = true; - - if (t < 7f) - { - _Statics[_StaticSongText].Color.A = 1f; - _Texts[_TextSongName].Color.A = 1f; - } - else - { - _Statics[_StaticSongText].Color.A = (10f - t) / 3f; - _Texts[_TextSongName].Color.A = (10f - t) / 3f; - } - } - else - { - _Statics[_StaticSongText].Visible = false; - _Texts[_TextSongName].Visible = false; - _TimerSongText.Stop(); + //First line has no predecessor or line has to be shown + if (j == 0 || firstNoteTime - CConfig.Config.Game.MinLineBreakTime <= currentTime) + return j; + float lastNoteTime = CGame.GetTimeFromBeats(lines[j - 1].LastNoteBeat, song.BPM); + //No line break if last line is not fully evaluated (with 50% tolerance -> tested so notes are drawn) + if (lastNoteTime + CConfig.Config.Record.MicDelay / 1000f * 1.5f >= currentTime) + return j - 1; + return j; } } - else - { - _Statics[_StaticSongText].Visible = false; - _Texts[_TextSongName].Visible = false; - } - } - - private void _UpdateDuetNames(CText textName, Stopwatch timer) - { - if (timer.IsRunning) - { - float t = timer.ElapsedMilliseconds / 1000f; - if (t < 10f) - { - textName.Visible = true; - - if (t < 3f) - textName.Color.A = t / 3f; - else if (t < 7f) - textName.Color.A = 1f; - else - textName.Color.A = (10f - t) / 3f; - } - else - { - textName.Visible = false; - timer.Stop(); - } - } - else if (!timer.IsRunning && timer.ElapsedMilliseconds == 0 && _Lyrics[_LyricMainDuet].Alpha > 0 && CGame.GetSong().IsDuet) - timer.Start(); - else - textName.Visible = false; - } - - private void _UpdateDuetNames() - { - if (CGame.GetSong() == null) - return; - //Timer for first duet-part - _UpdateDuetNames(_Texts[_TextDuetName1], _TimerDuetText1); - //Timer for second duet-part - if (_TimerDuetText2.IsRunning) - { - float t = _TimerDuetText2.ElapsedMilliseconds / 1000f; - if (t < 10f) - { - _Texts[_TextDuetName2].Visible = true; - - if (t < 3f) - _Texts[_TextDuetName2].Color.A = (3f - (3f - t)) / 3f; - else if (t < 7f) - _Texts[_TextDuetName2].Color.A = 1f; - else - _Texts[_TextDuetName2].Color.A = (3f - (t - 7f)) / 3f; - } - else - { - _Texts[_TextDuetName2].Visible = false; - _TimerDuetText2.Stop(); - } - } - else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && _Lyrics[_LyricMain].Alpha > 0 && CGame.GetSong().IsDuet) - _TimerDuetText2.Start(); - else - _Texts[_TextDuetName2].Visible = false; - } - - private void _UpdateTimeLine() - { - CSong song = CGame.GetSong(); - - if (song == null) - return; - - float totalTime = CSound.GetLength(_CurrentStream); - if (Math.Abs(song.Finish) > 0.001) - totalTime = song.Finish; - - float remainingTime = totalTime - _CurrentTime; - totalTime -= song.Start; - float currentTime = _CurrentTime - song.Start; - - if (_Length < 0 && totalTime > 0) - _PrepareTimeLine(); - - if (totalTime <= 0f) - return; - - switch (CConfig.Config.Game.TimerMode) - { - case ETimerMode.TR_CONFIG_TIMERMODE_CURRENT: - var min = (int)Math.Floor(currentTime / 60f); - var sec = (int)(currentTime - min * 60f); - _Texts[_TextTime].Text = min.ToString("00") + ":" + sec.ToString("00"); - break; - - case ETimerMode.TR_CONFIG_TIMERMODE_REMAINING: - min = (int)Math.Floor(remainingTime / 60f); - sec = (int)(remainingTime - min * 60f); - _Texts[_TextTime].Text = "-" + min.ToString("00") + ":" + sec.ToString("00"); - break; - - case ETimerMode.TR_CONFIG_TIMERMODE_TOTAL: - min = (int)Math.Floor(totalTime / 60f); - sec = (int)(totalTime - min * 60f); - _Texts[_TextTime].Text = "#" + min.ToString("00") + ":" + sec.ToString("00"); - break; - } - - - switch (CConfig.Config.Theme.TimerLook) - { - case ETimerLook.TR_CONFIG_TIMERLOOK_NORMAL: - _TimeLineRect.W = _Statics[_StaticTimeLine].Rect.W * (currentTime / totalTime); - break; - - case ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED: - CStatic stat = _Statics[_StaticTimeLine]; - int currentBeat = CGame.CurrentBeat; - for (int i = 0; i < _TimeRects.Count; i++) - { - if (currentBeat >= _TimeRects[i].StartBeat && currentBeat <= _TimeRects[i].EndBeat) - { - _TimeRects[i].Rect.Texture = _Statics[_StaticTimeLineExpandedHighlighted].Texture; - _TimeRects[i].Rect.Color = _Statics[_StaticTimeLineExpandedHighlighted].Color; - } - else - { - _TimeRects[i].Rect.Texture = _Statics[_StaticTimeLineExpandedNormal].Texture; - _TimeRects[i].Rect.Color = _Statics[_StaticTimeLineExpandedNormal].Color; - } - } - _Statics[_StaticTimePointer].X = stat.X + stat.W * (currentTime / totalTime); - break; - } + return -1; } private void _PrepareTimeLine() @@ -1747,13 +1798,5 @@ namespace Vocaluxe.Screens } } } - - private void _UpdateRatingBars() - { - for (int i = 0; i < CGame.NumPlayers; i++) - { - _ProgressBars[_PlayerProgressBarRating[i]].Progress = (float)CGame.Players[i].Rating; - } - } } } \ No newline at end of file From cf049332654871718c976d0985df61df5d4d6766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Thu, 23 Nov 2017 09:33:18 +0100 Subject: [PATCH 2/4] Added buttons to restart game/round, closes #282 --- Output/Languages/English.xml | 2 + .../Themes/Changelog/Changelog_ScreenSing.txt | 4 +- Output/Themes/Genius/Screens/ScreenSing.xml | 82 +++++++++++++++++-- Vocaluxe/Screens/CScreenSing.cs | 23 +++++- 4 files changed, 100 insertions(+), 11 deletions(-) diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 3c758738..b6d55298 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -156,6 +156,8 @@ Stop singing Continue Skip this song + Restart round + Restart game Scores Rating Points diff --git a/Output/Themes/Changelog/Changelog_ScreenSing.txt b/Output/Themes/Changelog/Changelog_ScreenSing.txt index 0a87c825..d86c8747 100644 --- a/Output/Themes/Changelog/Changelog_ScreenSing.txt +++ b/Output/Themes/Changelog/Changelog_ScreenSing.txt @@ -4,7 +4,9 @@ ScreenSing Version 9 Add: - + + + +++++++++ Version 8 diff --git a/Output/Themes/Genius/Screens/ScreenSing.xml b/Output/Themes/Genius/Screens/ScreenSing.xml index 57c09eec..8b6fe781 100644 --- a/Output/Themes/Genius/Screens/ScreenSing.xml +++ b/Output/Themes/Genius/Screens/ScreenSing.xml @@ -1302,8 +1302,8 @@ Button Button - 775 - 450 + 985 + 600 150 50 -2.11 @@ -1337,8 +1337,8 @@ Button Button - 355 - 450 + 145 + 600 150 50 -2.11 @@ -1372,8 +1372,8 @@ Button Button - 565 - 450 + 355 + 600 150 50 -2.11 @@ -1403,6 +1403,76 @@ 10 + + diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 6ec8ea18..ba8cb0c4 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -78,6 +78,8 @@ namespace Vocaluxe.Screens private const string _ButtonCancel = "ButtonCancel"; private const string _ButtonContinue = "ButtonContinue"; + private const string _ButtonRestartRound = "ButtonRestartRound"; + private const string _ButtonRestartGame = "ButtonRestartGame"; private const string _ButtonSkip = "ButtonSkip"; private const string _LyricMain = "LyricMain"; @@ -170,7 +172,7 @@ namespace Vocaluxe.Screens _CreateProgressBars(); _AssignPlayerElements(); - _ThemeButtons = new string[] { _ButtonCancel, _ButtonContinue, _ButtonSkip }; + _ThemeButtons = new string[] { _ButtonCancel, _ButtonContinue, _ButtonRestartGame, _ButtonRestartRound, _ButtonSkip }; _ThemeLyrics = new string[] { _LyricMain, _LyricSub, _LyricMainDuet, _LyricSubDuet, _LyricMainTop, _LyricSubTop }; _ThemeSingNotes = new string[] { _SingBars }; @@ -260,6 +262,10 @@ namespace Vocaluxe.Screens _SetPause(false); if (_Buttons[_ButtonCancel].Selected) _Stop(); + if (_Buttons[_ButtonRestartGame].Selected) + _RestartGame(); + if (_Buttons[_ButtonRestartRound].Selected) + _RestartRound(); if (_Buttons[_ButtonSkip].Selected) { _NextSong(); @@ -301,10 +307,18 @@ namespace Vocaluxe.Screens { if (_Buttons[_ButtonContinue].Selected) _SetPause(false); - if (_Buttons[_ButtonCancel].Selected) _Stop(); - + if (_Buttons[_ButtonRestartGame].Selected) + { + _RestartGame(); + _SetPause(false); + } + if (_Buttons[_ButtonRestartRound].Selected) + { + _RestartRound(); + _SetPause(false); + } if (_Buttons[_ButtonSkip].Selected) { _NextSong(); @@ -312,7 +326,6 @@ namespace Vocaluxe.Screens } } - return true; } @@ -1004,6 +1017,8 @@ namespace Vocaluxe.Screens _Buttons[_ButtonCancel].Visible = _Pause; _Buttons[_ButtonContinue].Visible = _Pause; _Buttons[_ButtonSkip].Visible = _Pause && CGame.NumRounds > CGame.RoundNr && CGame.NumRounds > 1; + _Buttons[_ButtonRestartGame].Visible = _Pause; + _Buttons[_ButtonRestartRound].Visible = _Pause && CGame.NumRounds > 1; if (_Pause) CSound.Pause(_CurrentStream); From 788abcbddbd86beb158bb5b60e963f4caccc1b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Thu, 23 Nov 2017 09:49:38 +0100 Subject: [PATCH 3/4] Adjust pause screen design --- Output/Themes/Genius/01_Standard.xml | 8 +++++++- Output/Themes/Genius/02_Ice_Blue.xml | 8 +++++++- Output/Themes/Genius/03_Crimson_Red.xml | 8 +++++++- Output/Themes/Genius/Pause.png | Bin 116835 -> 0 bytes Output/Themes/Genius/PauseBG.png | Bin 0 -> 4149 bytes Output/Themes/Genius/Screens/ScreenSing.xml | 6 +++--- 6 files changed, 24 insertions(+), 6 deletions(-) delete mode 100644 Output/Themes/Genius/Pause.png create mode 100644 Output/Themes/Genius/PauseBG.png diff --git a/Output/Themes/Genius/01_Standard.xml b/Output/Themes/Genius/01_Standard.xml index bc2c91a0..8147bbdf 100644 --- a/Output/Themes/Genius/01_Standard.xml +++ b/Output/Themes/Genius/01_Standard.xml @@ -296,6 +296,12 @@ 0.027 1.000 + + 1.000 + 1.000 + 1.000 + 0.900 + BG_Default.png @@ -329,7 +335,7 @@ Score.png Star.png SongMenu.png - Pause.png + PauseBG.png EnergyBeam.png SearchBar.png PlaylistBG.png diff --git a/Output/Themes/Genius/02_Ice_Blue.xml b/Output/Themes/Genius/02_Ice_Blue.xml index 0f61be86..0e9d9806 100644 --- a/Output/Themes/Genius/02_Ice_Blue.xml +++ b/Output/Themes/Genius/02_Ice_Blue.xml @@ -296,6 +296,12 @@ 0.027 1.000 + + 1.000 + 1.000 + 1.000 + 0.900 + BG_Default.png @@ -329,7 +335,7 @@ Score.png Star.png SongMenu.png - Pause.png + PauseBG.png EnergyBeam.png SearchBar.png PlaylistBG.png diff --git a/Output/Themes/Genius/03_Crimson_Red.xml b/Output/Themes/Genius/03_Crimson_Red.xml index d9b61b8a..aa3f4cfb 100644 --- a/Output/Themes/Genius/03_Crimson_Red.xml +++ b/Output/Themes/Genius/03_Crimson_Red.xml @@ -296,6 +296,12 @@ 0.027 1.000 + + 1.000 + 1.000 + 1.000 + 0.900 + BG_Default.png @@ -329,7 +335,7 @@ Score.png Star.png SongMenu.png - Pause.png + PauseBG.png EnergyBeam.png SearchBar.png PlaylistBG.png diff --git a/Output/Themes/Genius/Pause.png b/Output/Themes/Genius/Pause.png deleted file mode 100644 index 2ea49e27b43d17d04d7184994b065d2307f9dd3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116835 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 M6ZOZ1a;Cxm2cMzoHUIzs diff --git a/Output/Themes/Genius/PauseBG.png b/Output/Themes/Genius/PauseBG.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9ddba633824ae0d14aa604c50db696b6836e84 GIT binary patch literal 4149 zcmV-55X$d~P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{01ur>L_t(&-ep@+vfM}rlc>Hy z?tfP010?Xgt<)xYnX%j5AS8ha@E;)v1PK5@0iZw#hybK|{jch83lND1 z5>WpD1R$UQ0Tcy65J}+m?*afygdi5E`4O{@qGoXbDNq7lU!IWW(*R5Kk7ugNH(BG4D>;|0iGlDwlN zIj1?R_m_q8g9F4Y53iTz0O?OWUq};O>YW$m#rB@y^%a%l1<^N>I&zrD?5%(_+YF%Q z1m|@657pu3SnhDE33YBf10|@>8036~1(2dI)2n#>+x+T~=JTD&c?i&kXr3?*aCH_CxeP0R5P|zFgC1O=n3b*L+UMHdP;@cc3w&7f-KB z#=6;0sSJ!Y;Y$*Y8`K=Jd`c6vKAcH*br#Q`AxKmsm=bfCqZcaa>&0^-WFC?ewR~bi z#t?$n2rsRx%D2 zmz?WzL<8mT`D2D(80#m;8tW1^v#W1#*9c4>+~(_4o05Y=i}f!c<9gAj>C`mZ9Z*e4 z6ZCM(qr>?n)e{R)4JbG`#3{RkyaD~wKzf$&6W%nAl*_UVvtYv-J8UbDDL=;?RPX$x zn|u+tOt^A%;&ssGaF7B$x#>eDP{svJHIN$XaQ1{EQ3LSheJ9j~j}DLtvI-s#7b3|g ziRXwL!4kln==b8M<~H@1Bc@}aYb;TzZ;b}*dNlhcpTDvs4cY1sgu2XXXGuYAW%~gm6=;i6_7J&@EL`{Shnoly{FHo z4hPK;vjoV1b2AnfJg4q6@+Zh8l}k>to2(?3%TB{@elS}vnE{ICn`&;eGRUc0&huPm zxUA`m^KjVO5HL+~c_HIMX+Y=6$<8EaR~hLf3~$j#?mk-={OcP2$aAszr`KRK>?Q$b z#^6ew>~PT?3jFqfkZmYGapV<1(}O|Y{#)sUHP|#q_zfY14?0Ir6nHY7GuW;&d=5B%Kp=4aAyrk%W*^ z`a!!yc6exzwI6fHA6CP*WTUgX%_r8%!DdG^4;i>f2`n9R$xEv^R*Af2m8JsCE=+>V zOxX~$_1%zHry508G*G*^Z#6{R1V>PZH^Y4yv3w})$Ux_|7Db-#d`U`KF-*d6l)g1& zICW!45P4$l?WHsuiYhJnq|J?@0XjvAvI~dnZk16>3vYavT3DF8p@m12V<-o6$Q;q6 z%|Y7Gn9W(+OB!Xm(wHKj4`Ix?t}>Hk`}JcZgjtc`JJcXVzmX)1{Mn$zR zG&p~af{Eo}m6}I#;8nYOBzBV;g0NB&5?Q^uI;L5qr5H9&EzVN`d=@{}@%UgmGK>TN z$Bmi5VXqTwSlKnwF?l(hK{iqpeH+Qd`A;c9za3bLxkG1GU<2byc86z?tRkzeqW$Cj3HVbvvoE@U5g*C z8#TC@8=2DuuHqy zR;y$~kg+EDiDKMB4g(tllYy0R2HUI3qMnIG_>#bPN=%TfhD4a?t+Tg~+@CLRZbYl2 zj%PO+huozC=87_WF*f(xlv+Eycdq(~$MD8?CYWnyDU6V+va430K3{Pu&=SV~9_0 z!+hz4jtwI1`a6Wu5mRqvXnw*HGK%2C3m#xXu8224@8k-^6 z1U#k_K=@DZN9~#U-=J@9XniCk-=zV6vx^R7TS=pcJ1Hx1m|pI*V7BF{Ik>?$x}gTJ zs5tYS&_!viNu^G-y|08@Z1e4XrSbT(jxAwJ;Xe5uYCfp4kbYVLa;pdt+8w*EO$>WP z)<>&MVv|3uqe)Zpy4d4OztmQx=hTazn*~PdRC^PBd$hi9SGuBoQf=KVug0bCW*kpv ziZA9AwaJxc&_S@rsKvedJDsQL#B&{ToWk_nSI{=5M>z1dhocQc)gyt&=H0$)t>#cg z@m+tHqf)y8bPB&{wE3tZG*6!1H91APJom5$SKH<^{wPvN8Au3ctmXaJreFp(sJZ$( z9-x?M3W%|Yr$P0?363-Q5L@1MIBjIv4C_=X`{(H$wLyi*eF_Pw;-uz9Y+>3^g*!3_vUgtA+fmLTN!crJ@i7{Q%4y+TGwcV>@5c$uK z$LccZ)H)_Bj%V^Ag>%}Y>F;m-aE~wfGUbeS4kryYW;#Si3T?MLl;f+I)JxKOxj3U= zQ5muj%cRXVLLNRoy2AXo85MiqMNe+BYMM32gd_}=C$*a%$ZgaqEyUS*E}?j**}TIo zB0dgBj}=){(jyE+DPnUcG+sv0bVxq7^JW*f3Tt`WkZ>oH&pep4!%XH5$Iu8o9^KJ)QXB00IFg1S-F2Fr zz~+W>qP1QEGkf4UfiY9oY}DeN##dYyJ>GTQmZ4Lz*3@U(yU!$EJI#l;@x5u}g z;Z;(*eS}mQ99Vgn=GQ3+?y4VKZuk;UQ+y{$4iSRwz9S?;o?u`b8+GPV1uTA3eD zmX#5+W2-(V=G0=zyd$T?NFnh|lQo}DchiGC(ueSH(uXz5u|GAJDB;BHcEmiEv(1=F zy__~~SJ*{;TMaJy*r6uOxcJofI#b7ULG6@uodFbDhn5%VnB$la+~H5V?(UJCY`ogOFh!|eM=!1%B*VB?2SX7{k&e%wY-KS^(JtOv!l9r^3c+&bOz#mPH&}r znlr3x26(QawutZi*PGT6nX%o5%35P;&wYr2qEu>nGTZ3Sq^QzewXprtleT$xAj_i$ zo(uZ2lcybig{MItj=SM;v1i-kvYEHji%LAcGezNPi7xtFMoNBW%+lUzvbW?av)SRZ zej7n|0BI-z+db&+rB;kp`nAXEs6DfYF;=22)5Q+Pr#(cn$EIyf}w-Bw&wO8H|P&yppiuaulWsdq-?4F4_wL>59PwUsCo*x5p zqxk~d*bB>TKFb;j37hdw(Xd4-a(sr>19s# zgEkzMSqm!5yQ({9NZpiY3zd_iJ7JUdO_C7-oEEC z;>`C9Ca;gBWA|+%xwoozdRu8&JmW{U-7mZ_6ht1B>d=lI)VwY(ln0RT;y-E|B(?N! z&EoPv*E+CtM=Wib^D@PPwCj;sOjskrDmTMsoXjNB-L6a_-o{^9Dtqbj{3lM?nWm@C z3q{JiQQ2}6sdwI92|3>E&^8In25X9L-<|7O!Si)%+lE9|`eBJ$su(|HN5?m{qm%NE z!@S5ba%>ZJ!7ekpJAywcb0;2Cl6Sf#ZHSMCot`3(0qEUY%AwmxNBNa)N0=vTHl zm*lo%1|1H&(4B<#VB}KJ>*T{Pc^$MqqfYJ=W9K21w&S*#whL^O=T7$2w};E?qplA` z-SPWOeqgNQqlc)^+m8FcNq-%IDx{CVg=WO});Z_m!ETqUZ2+wrn<{hf9KZTPf9Cu> zwwD$RcQj+Cn$P%>gbX3wS2Qv|pV{1x5*5A^(v? 640 - 350 + 450 -2.11 - 40 + 100 0 - + Center Center From 1e90d856e6d58ab5e74d2b6b3e2afb8fd167989b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Sat, 25 Nov 2017 22:10:13 +0100 Subject: [PATCH 4/4] Using target-var in ScreenSing for better readability --- Vocaluxe/Screens/CScreenSing.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index ba8cb0c4..d55e6bc3 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -1440,9 +1440,9 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - string target = "P" + (player + 1) + "N" + (numplayer + 1); - _AddText(GetNewText(), "TextScoreS" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1)); - _AddText(GetNewText(), "TextNameS" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1)); + string target = "S" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1); + _AddText(GetNewText(), "TextScore" + target); + _AddText(GetNewText(), "TextName" + target); } } } @@ -1508,9 +1508,9 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - string target = "P" + (player + 1) + "N" + (numplayer + 1); - _AddStatic(GetNewStatic(), "StaticScoreS" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1)); - _AddStatic(GetNewStatic(), "StaticAvatarS" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1)); + string target = "S" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1); + _AddStatic(GetNewStatic(), "StaticScore" + target); + _AddStatic(GetNewStatic(), "StaticAvatar" + target); } } } @@ -1571,8 +1571,8 @@ namespace Vocaluxe.Screens { if (player <= numplayer) { - string target = "P" + (player + 1) + "N" + (numplayer + 1); - _AddProgressBar(GetNewProgressBar(), "ProgressBarRatingS" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1)); + string target = "S" + (screen + 1) + "P" + (player + 1) + "N" + (numplayer + 1); + _AddProgressBar(GetNewProgressBar(), "ProgressBarRating" + target); } } }