diff options
Diffstat (limited to 'Game/Code/Screens/UScreenSing.pas')
-rw-r--r-- | Game/Code/Screens/UScreenSing.pas | 772 |
1 files changed, 394 insertions, 378 deletions
diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas index fc21f684..f6c7adb5 100644 --- a/Game/Code/Screens/UScreenSing.pas +++ b/Game/Code/Screens/UScreenSing.pas @@ -10,21 +10,21 @@ interface uses UMenu, - UMusic, - SDL, - SysUtils, - UFiles, - UTime, - USongs, - UIni, - ULog, - UTexture, - ULyrics, - TextGL, - gl, - UThemes, - UGraphicClasses, - USingScores; + UMusic, + SDL, + SysUtils, + UFiles, + UTime, + USongs, + UIni, + ULog, + UTexture, + ULyrics, + TextGL, + gl, + UThemes, + UGraphicClasses, + USingScores; type TLyricsSyncSource = class(TSyncSource) @@ -33,153 +33,155 @@ type type TScreenSing = class(TMenu) - protected - Paused: boolean; //Pause Mod - LyricsSync: TLyricsSyncSource; - NumEmptySentences: integer; - public - //TextTime: integer; + protected + Paused: boolean; //Pause Mod + LyricsSync: TLyricsSyncSource; + NumEmptySentences: integer; + public + //TextTime: integer; - // TimeBar fields - StaticTimeProgress: integer; - TextTimeText: integer; + // TimeBar fields + StaticTimeProgress: integer; + TextTimeText: integer; - StaticP1: integer; - TextP1: integer; + StaticP1: integer; + TextP1: integer; - //shown when game is in 2/4 player modus - StaticP1TwoP: integer; - TextP1TwoP: integer; + //shown when game is in 2/4 player modus + StaticP1TwoP: integer; + TextP1TwoP: integer; - //shown when game is in 3/6 player modus - StaticP1ThreeP: integer; - TextP1ThreeP: integer; + //shown when game is in 3/6 player modus + StaticP1ThreeP: integer; + TextP1ThreeP: integer; - StaticP2R: integer; - TextP2R: integer; + StaticP2R: integer; + TextP2R: integer; - StaticP2M: integer; - TextP2M: integer; + StaticP2M: integer; + TextP2M: integer; - StaticP3R: integer; - TextP3R: integer; + StaticP3R: integer; + TextP3R: integer; - StaticPausePopup: integer; + StaticPausePopup: integer; - Tex_Background: TTexture; - FadeOut: boolean; - Lyrics: TLyricEngine; + Tex_Background: TTexture; + FadeOut: boolean; + Lyrics: TLyricEngine; - //Score Manager: - Scores: TSingScores; + //Score Manager: + Scores: TSingScores; - fShowVisualization : boolean; - fCurrentVideoPlaybackEngine : IVideoPlayback; + fShowVisualization: boolean; + fCurrentVideoPlaybackEngine: IVideoPlayback; - constructor Create; override; - procedure onShow; override; - procedure onShowFinish; override; + constructor Create; override; + procedure onShow; override; + procedure onShowFinish; override; - function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override; - function Draw: boolean; override; + function ParseInput(PressedKey: cardinal; CharCode: widechar; + PressedDown: boolean): boolean; override; + function Draw: boolean; override; - procedure Finish; virtual; - procedure Pause; // Toggle Pause + procedure Finish; virtual; + procedure Pause; // Toggle Pause - procedure OnSentenceEnd(SentenceIndex: Cardinal); // for LineBonus + Singbar - procedure OnSentenceChange(SentenceIndex: Cardinal); // for Golden Notes + procedure OnSentenceEnd(SentenceIndex: cardinal); // for LineBonus + Singbar + procedure OnSentenceChange(SentenceIndex: cardinal); // for Golden Notes end; implementation uses UGraphic, - UDraw, - UMain, - USong, - Classes, - URecord, - ULanguage, - math; - -// Method for input parsing. If False is returned, GetNextWindow -// should be checked to know the next window to load; -function TScreenSing.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; + UDraw, + UMain, + USong, + Classes, + URecord, + ULanguage, + Math; + + // Method for input parsing. If False is returned, GetNextWindow + // should be checked to know the next window to load; +function TScreenSing.ParseInput(PressedKey: cardinal; CharCode: widechar; + PressedDown: boolean): boolean; begin - Result := true; - If (PressedDown) Then + Result := True; + if (PressedDown) then begin // Key Down - // check normal keys + // check normal keys case WideCharUpperCase(CharCode)[1] of 'Q': - begin - //When not ask before Exit then Finish now - if (Ini.AskbeforeDel <> 1) then - Finish - //else just Pause and let the Popup make the Work - else if not Paused then - Pause; - - Result := false; - Exit; - end; + begin + //When not ask before Exit then Finish now + if (Ini.AskbeforeDel <> 1) then + Finish + //else just Pause and let the Popup make the Work + else if not Paused then + Pause; + + Result := False; + Exit; + end; 'V': //Show Visualization - begin - fShowVisualization := not fShowVisualization; + begin + fShowVisualization := not fShowVisualization; - if fShowVisualization then - fCurrentVideoPlaybackEngine := Visualization - else - fCurrentVideoPlaybackEngine := VideoPlayback; + if fShowVisualization then + fCurrentVideoPlaybackEngine := Visualization + else + fCurrentVideoPlaybackEngine := VideoPlayback; - if fShowVisualization then - fCurrentVideoPlaybackEngine.play; + if fShowVisualization then + fCurrentVideoPlaybackEngine.play; - Exit; - end; + Exit; + end; 'P': - begin - Pause; - Exit; - end; + begin + Pause; + Exit; + end; end; // check special keys case PressedKey of SDLK_ESCAPE, - SDLK_BACKSPACE : - begin - //Record Sound Hack: - //Sound[0].BufferLong + SDLK_BACKSPACE: + begin + //Record Sound Hack: + //Sound[0].BufferLong - Finish; - AudioPlayback.PlaySound(SoundLib.Back); - FadeTo(@ScreenScore); - end; + Finish; + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenScore); + end; SDLK_SPACE: - begin - Pause; - end; + begin + Pause; + end; SDLK_TAB: //Change Visualization Preset - begin - if fShowVisualization then - fCurrentVideoPlaybackEngine.Position := now; // move to a random position - end; - + begin + if fShowVisualization then + fCurrentVideoPlaybackEngine.Position := now; // move to a random position + end; + SDLK_RETURN: - begin - end; + begin + end; // Up and Down could be done at the same time, // but I don't want to declare variables inside // functions like this one, called so many times - SDLK_DOWN : - begin - end; - SDLK_UP : - begin - end; + SDLK_DOWN: + begin + end; + SDLK_UP: + begin + end; end; end; end; @@ -188,44 +190,46 @@ end; procedure TScreenSing.Pause; begin if (not Paused) then //enable Pause - begin - // pause Time - Paused := true; + begin + // pause Time + Paused := True; - LyricsState.Pause(); + LyricsState.Pause(); - // pause Music - AudioPlayback.Pause; + // pause Music + AudioPlayback.Pause; - // pause Video - if (CurrentSong.Video <> '') and FileExists(CurrentSong.Path + CurrentSong.Video) then - fCurrentVideoPlaybackEngine.Pause; + // pause Video + if (CurrentSong.Video <> '') and FileExists(CurrentSong.Path + + CurrentSong.Video) then + fCurrentVideoPlaybackEngine.Pause; - end + end else //disable Pause - begin - LyricsState.Resume(); + begin + LyricsState.Resume(); - // Play Music - AudioPlayback.Play; + // Play Music + AudioPlayback.Play; - // Video - if (CurrentSong.Video <> '') and FileExists(CurrentSong.Path + CurrentSong.Video) then - fCurrentVideoPlaybackEngine.Pause; + // Video + if (CurrentSong.Video <> '') and FileExists(CurrentSong.Path + + CurrentSong.Video) then + fCurrentVideoPlaybackEngine.Pause; - Paused := false; - end; + Paused := False; + end; end; //Pause Mod End constructor TScreenSing.Create; var - I: integer; - P: integer; + I: integer; + P: integer; begin inherited Create; - fShowVisualization := false; + fShowVisualization := False; fCurrentVideoPlaybackEngine := VideoPlayback; @@ -236,74 +240,73 @@ begin LoadFromTheme(Theme.Sing); //TimeBar - StaticTimeProgress := AddStatic(Theme.Sing.StaticTimeProgress); - TextTimeText := AddText(Theme.Sing.TextTimeText); + StaticTimeProgress := AddStatic(Theme.Sing.StaticTimeProgress); + TextTimeText := AddText(Theme.Sing.TextTimeText); -// 1 player | P1 - StaticP1 := AddStatic(Theme.Sing.StaticP1); - TextP1 := AddText(Theme.Sing.TextP1); + // 1 player | P1 + StaticP1 := AddStatic(Theme.Sing.StaticP1); + TextP1 := AddText(Theme.Sing.TextP1); -// 2 or 4 players | P1 - StaticP1TwoP := AddStatic(Theme.Sing.StaticP1TwoP); - TextP1TwoP := AddText(Theme.Sing.TextP1TwoP); + // 2 or 4 players | P1 + StaticP1TwoP := AddStatic(Theme.Sing.StaticP1TwoP); + TextP1TwoP := AddText(Theme.Sing.TextP1TwoP); // | P2 - StaticP2R := AddStatic(Theme.Sing.StaticP2R); - TextP2R := AddText(Theme.Sing.TextP2R); + StaticP2R := AddStatic(Theme.Sing.StaticP2R); + TextP2R := AddText(Theme.Sing.TextP2R); // 3 or 6 players | P1 - StaticP1ThreeP := AddStatic(Theme.Sing.StaticP1ThreeP); - TextP1ThreeP := AddText(Theme.Sing.TextP1ThreeP); + StaticP1ThreeP := AddStatic(Theme.Sing.StaticP1ThreeP); + TextP1ThreeP := AddText(Theme.Sing.TextP1ThreeP); // | P2 - StaticP2M := AddStatic(Theme.Sing.StaticP2M); - TextP2M := AddText(Theme.Sing.TextP2M); + StaticP2M := AddStatic(Theme.Sing.StaticP2M); + TextP2M := AddText(Theme.Sing.TextP2M); // | P3 - StaticP3R := AddStatic(Theme.Sing.StaticP3R); - TextP3R := AddText(Theme.Sing.TextP3R); + StaticP3R := AddStatic(Theme.Sing.StaticP3R); + TextP3R := AddText(Theme.Sing.TextP3R); - StaticPausePopup := AddStatic(Theme.Sing.PausePopUp); - Static[StaticPausePopup].Visible := false; //Pausepopup is not visibile at the beginning + StaticPausePopup := AddStatic(Theme.Sing.PausePopUp); - if ScreenAct = 2 then begin - //TODO:why is this here? - end; + //<note>Pausepopup is not visibile at the beginning</note> + Static[StaticPausePopup].Visible := False; - Lyrics := TLyricEngine.Create(80,Skin_LyricsT,640,12,80,Skin_LyricsT+36,640,12); + Lyrics := TLyricEngine.Create(80, Skin_LyricsT, 640, 12, 80, Skin_LyricsT + 36, 640, 12); LyricsSync := TLyricsSyncSource.Create(); end; procedure TScreenSing.onShow; var - P: integer; - V1: boolean; - V1TwoP: boolean; //added for ps3 skin - V1ThreeP: boolean; //added for ps3 skin - V2R: boolean; - V2M: boolean; - V3R: boolean; - NR: TRecR; //Line Bonus Mod - + P: integer; + V1: boolean; + V1TwoP: boolean; //Position of ScoreBox in two-player mode + V1ThreeP: boolean; //Position of ScoreBox in three-player mode + V2R: boolean; + V2M: boolean; + V3R: boolean; + NR: TRecR; //Some enlightment of who, how and what this is here please Color: TRGB; - success: boolean; + success: boolean; begin inherited; Log.LogStatus('Begin', 'onShow'); - FadeOut := false; + FadeOut := False; // reset video playback engine, to play Video Clip... fCurrentVideoPlaybackEngine := VideoPlayback; // setup score manager Scores.ClearPlayers; // clear old player values - Color.R := 0; Color.G := 0; Color.B := 0; // dummy atm + Color.R := 0; + Color.G := 0; + Color.B := 0; // dummy atm <- \(O.o)/? B like bummy? // add new players - for P := 0 to PlayersPlay-1 do + for P := 0 to PlayersPlay - 1 do begin Scores.AddPlayer(Tex_ScoreBG[P], Color); end; @@ -312,76 +315,80 @@ begin // prepare players SetLength(Player, PlayersPlay); - //Player[0].ScoreTotalInt := 0; case PlayersPlay of - 1: begin - V1 := true; - V1TwoP := false; - V1ThreeP := false; - V2R := false; - V2M := false; - V3R := false; - end; - 2: begin - V1 := false; - V1TwoP := true; - V1ThreeP := false; - V2R := true; - V2M := false; - V3R := false; - end; - 3: begin - V1 := false; - V1TwoP := false; - V1ThreeP := true; - V2R := false; - V2M := true; - V3R := true; - end; - 4: begin // double screen - V1 := false; - V1TwoP := true; - V1ThreeP := false; - V2R := true; - V2M := false; - V3R := false; - end; - 6: begin // double screen - V1 := false; - V1TwoP := false; - V1ThreeP := true; - V2R := false; - V2M := true; - V3R := true; - end; + 1: + begin + V1 := True; + V1TwoP := False; + V1ThreeP := False; + V2R := False; + V2M := False; + V3R := False; + end; + 2: + begin + V1 := False; + V1TwoP := True; + V1ThreeP := False; + V2R := True; + V2M := False; + V3R := False; + end; + 3: + begin + V1 := False; + V1TwoP := False; + V1ThreeP := True; + V2R := False; + V2M := True; + V3R := True; + end; + 4: + begin // double screen + V1 := False; + V1TwoP := True; + V1ThreeP := False; + V2R := True; + V2M := False; + V3R := False; + end; + 6: + begin // double screen + V1 := False; + V1TwoP := False; + V1ThreeP := True; + V2R := False; + V2M := True; + V3R := True; + end; end; //This one is shown in 1P mode - Static[StaticP1].Visible := V1; - Text[TextP1].Visible := V1; + Static[StaticP1].Visible := V1; + Text[TextP1].Visible := V1; //This one is shown in 2/4P mode - Static[StaticP1TwoP].Visible := V1TwoP; - Text[TextP1TwoP].Visible := V1TwoP; + Static[StaticP1TwoP].Visible := V1TwoP; + Text[TextP1TwoP].Visible := V1TwoP; - Static[StaticP2R].Visible := V2R; - Text[TextP2R].Visible := V2R; + Static[StaticP2R].Visible := V2R; + Text[TextP2R].Visible := V2R; //This one is shown in 3/6P mode - Static[StaticP1ThreeP].Visible := V1ThreeP; - Text[TextP1ThreeP].Visible := V1ThreeP; + Static[StaticP1ThreeP].Visible := V1ThreeP; + Text[TextP1ThreeP].Visible := V1ThreeP; - Static[StaticP2M].Visible := V2M; - Text[TextP2M].Visible := V2M; + Static[StaticP2M].Visible := V2M; + Text[TextP2M].Visible := V2M; - Static[StaticP3R].Visible := V3R; - Text[TextP3R].Visible := V3R; + Static[StaticP3R].Visible := V3R; + Text[TextP3R].Visible := V3R; // FIXME: sets Path and Filename to '' @@ -392,11 +399,12 @@ begin // FIXME: bad style, put the try-except into LoadSong() and not here try // Check if file is XML - if copy(CurrentSong.FileName,length(CurrentSong.FileName)-3,4) = '.xml' - then success := CurrentSong.LoadXMLSong() - else success := CurrentSong.LoadSong(); + if copy(CurrentSong.FileName, length(CurrentSong.FileName) - 3, 4) = '.xml' then + success := CurrentSong.LoadXMLSong() + else + success := CurrentSong.LoadSong(); except - success := false; + success := False; end; if (not success) then @@ -406,7 +414,7 @@ begin // select new song in party mode if ScreenSong.Mode = smPartyMode then ScreenSong.SelectRandomSong(); - ScreenPopupError.ShowPopup (Language.Translate('ERROR_CORRUPT_SONG')); + ScreenPopupError.ShowPopup(Language.Translate('ERROR_CORRUPT_SONG')); // FIXME: do we need this? CurrentSong.Path := CatSongs.Song[CatSongs.Selected].Path; Exit; @@ -417,23 +425,24 @@ begin fCurrentVideoPlaybackEngine := VideoPlayback; // set movie - CurrentSong.VideoLoaded := false; - fShowVisualization := false; + CurrentSong.VideoLoaded := False; + fShowVisualization := False; if (CurrentSong.Video <> '') and FileExists(CurrentSong.Path + CurrentSong.Video) then begin - if (fCurrentVideoPlaybackEngine.Open( CurrentSong.Path + CurrentSong.Video )) then + if (fCurrentVideoPlaybackEngine.Open(CurrentSong.Path + CurrentSong.Video)) then begin fCurrentVideoPlaybackEngine.Position := CurrentSong.VideoGAP + CurrentSong.Start; - CurrentSong.VideoLoaded := true; + CurrentSong.VideoLoaded := True; end; end; // set background - if (CurrentSong.Background <> '') and (CurrentSong.VideoLoaded = false) then + if (CurrentSong.Background <> '') and (CurrentSong.VideoLoaded = False) then try Tex_Background := Texture.LoadTexture(CurrentSong.Path + CurrentSong.Background); except - Log.LogError('Background could not be loaded: ' + CurrentSong.Path + CurrentSong.Background); + Log.LogError('Background could not be loaded: ' + CurrentSong.Path + + CurrentSong.Background); Tex_Background.TexNum := 0; end else @@ -462,78 +471,78 @@ begin ClearScores(P); // main text - Lyrics.Clear (CurrentSong.BPM[0].BPM, CurrentSong.Resolution); + Lyrics.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); // set custom options case Ini.LyricsFont of 0: - begin - Lyrics.UpperLineSize := 14; - Lyrics.LowerLineSize := 14; - Lyrics.FontStyle := 0; - - Lyrics.LineColor_en.R := Skin_FontR; - Lyrics.LineColor_en.G := Skin_FontG; - Lyrics.LineColor_en.B := Skin_FontB; - Lyrics.LineColor_en.A := 1; - - Lyrics.LineColor_dis.R := 0.4; - Lyrics.LineColor_dis.G := 0.4; - Lyrics.LineColor_dis.B := 0.4; - Lyrics.LineColor_dis.A := 1; - - Lyrics.LineColor_act.R := 5/256; - Lyrics.LineColor_act.G := 163/256; - Lyrics.LineColor_act.B := 210/256; - Lyrics.LineColor_act.A := 1; - end; + begin + Lyrics.UpperLineSize := 14; + Lyrics.LowerLineSize := 14; + Lyrics.FontStyle := 0; + + Lyrics.LineColor_en.R := Skin_FontR; + Lyrics.LineColor_en.G := Skin_FontG; + Lyrics.LineColor_en.B := Skin_FontB; + Lyrics.LineColor_en.A := 1; + + Lyrics.LineColor_dis.R := 0.4; + Lyrics.LineColor_dis.G := 0.4; + Lyrics.LineColor_dis.B := 0.4; + Lyrics.LineColor_dis.A := 1; + + Lyrics.LineColor_act.R := 5 / 256; + Lyrics.LineColor_act.G := 163 / 256; + Lyrics.LineColor_act.B := 210 / 256; + Lyrics.LineColor_act.A := 1; + end; 1: - begin - Lyrics.UpperLineSize := 14; - Lyrics.LowerLineSize := 14; - Lyrics.FontStyle := 2; - - Lyrics.LineColor_en.R := 0.75; - Lyrics.LineColor_en.G := 0.75; - Lyrics.LineColor_en.B := 1; - Lyrics.LineColor_en.A := 1; - - Lyrics.LineColor_dis.R := 0.8; - Lyrics.LineColor_dis.G := 0.8; - Lyrics.LineColor_dis.B := 0.8; - Lyrics.LineColor_dis.A := 1; - - Lyrics.LineColor_act.R := 0.5; - Lyrics.LineColor_act.G := 0.5; - Lyrics.LineColor_act.B := 1; - Lyrics.LineColor_act.A := 1; - end; + begin + Lyrics.UpperLineSize := 14; + Lyrics.LowerLineSize := 14; + Lyrics.FontStyle := 2; + + Lyrics.LineColor_en.R := 0.75; + Lyrics.LineColor_en.G := 0.75; + Lyrics.LineColor_en.B := 1; + Lyrics.LineColor_en.A := 1; + + Lyrics.LineColor_dis.R := 0.8; + Lyrics.LineColor_dis.G := 0.8; + Lyrics.LineColor_dis.B := 0.8; + Lyrics.LineColor_dis.A := 1; + + Lyrics.LineColor_act.R := 0.5; + Lyrics.LineColor_act.G := 0.5; + Lyrics.LineColor_act.B := 1; + Lyrics.LineColor_act.A := 1; + end; 2: - begin - Lyrics.UpperLineSize := 12; - Lyrics.LowerLineSize := 12; - Lyrics.FontStyle := 3; - - Lyrics.LineColor_en.R := 0.75; - Lyrics.LineColor_en.G := 0.75; - Lyrics.LineColor_en.B := 1; - Lyrics.LineColor_en.A := 1; - - Lyrics.LineColor_dis.R := 0.8; - Lyrics.LineColor_dis.G := 0.8; - Lyrics.LineColor_dis.B := 0.8; - Lyrics.LineColor_dis.A := 1; - - Lyrics.LineColor_act.R := 0.5; - Lyrics.LineColor_act.G := 0.5; - Lyrics.LineColor_act.B := 1; - Lyrics.LineColor_act.A := 1; - end; + begin + Lyrics.UpperLineSize := 12; + Lyrics.LowerLineSize := 12; + Lyrics.FontStyle := 3; + + Lyrics.LineColor_en.R := 0.75; + Lyrics.LineColor_en.G := 0.75; + Lyrics.LineColor_en.B := 1; + Lyrics.LineColor_en.A := 1; + + Lyrics.LineColor_dis.R := 0.8; + Lyrics.LineColor_dis.G := 0.8; + Lyrics.LineColor_dis.B := 0.8; + Lyrics.LineColor_dis.A := 1; + + Lyrics.LineColor_act.R := 0.5; + Lyrics.LineColor_act.G := 0.5; + Lyrics.LineColor_act.B := 1; + Lyrics.LineColor_act.A := 1; + end; end; // case // Initialize lyrics by filling its queue - while (not Lyrics.IsQueueFull) and - (Lyrics.LineCounter <= High(Lines[0].Line)) do + while (not Lyrics.IsQueueFull) and (Lyrics.LineCounter <= + High(Lines[0].Line)) do begin Lyrics.AddLine(@Lines[0].Line[Lyrics.LineCounter]); end; @@ -548,7 +557,8 @@ begin // set number of empty sentences for Line Bonus NumEmptySentences := 0; for P := Low(Lines[0].Line) to High(Lines[0].Line) do - if Lines[0].Line[P].TotalNotes = 0 then Inc(NumEmptySentences); + if Lines[0].Line[P].TotalNotes = 0 then + Inc(NumEmptySentences); Log.LogStatus('End', 'onShow'); end; @@ -567,37 +577,40 @@ end; function TScreenSing.Draw: boolean; var - Min: integer; - Sec: integer; - Tekst: string; - Flash: real; - S: integer; - T: integer; + Min: integer; + Sec: integer; + Tekst: string; + Flash: real; + S: integer; + T: integer; CurLyricsTime: real; begin - // set player names (for 2 screens and only Singstar skin) - if ScreenAct = 1 then begin - Text[TextP1].Text := 'P1'; - Text[TextP1TwoP].Text := 'P1'; + if ScreenAct = 1 then + begin + Text[TextP1].Text := 'P1'; + Text[TextP1TwoP].Text := 'P1'; Text[TextP1ThreeP].Text := 'P1'; - Text[TextP2R].Text := 'P2'; - Text[TextP2M].Text := 'P2'; - Text[TextP3R].Text := 'P3'; + Text[TextP2R].Text := 'P2'; + Text[TextP2M].Text := 'P2'; + Text[TextP3R].Text := 'P3'; end; - if ScreenAct = 2 then begin + if ScreenAct = 2 then + begin case PlayersPlay of - 4: begin - Text[TextP1TwoP].Text := 'P3'; - Text[TextP2R].Text := 'P4'; - end; - 6: begin - Text[TextP1ThreeP].Text := 'P4'; - Text[TextP2M].Text := 'P5'; - Text[TextP3R].Text := 'P6'; - end; + 4: + begin + Text[TextP1TwoP].Text := 'P3'; + Text[TextP2R].Text := 'P4'; + end; + 6: + begin + Text[TextP1ThreeP].Text := 'P4'; + Text[TextP2M].Text := 'P5'; + Text[TextP3R].Text := 'P6'; + end; end; // case end; // if @@ -610,41 +623,43 @@ begin // will move the statics and texts to the correct screen here. // FIXME: clean up this weird stuff. Commenting this stuff out, nothing // was missing on screen w/ 6 players - so do we even need this stuff? - Static[StaticP1].Texture.X := Static[StaticP1].Texture.X + 10*ScreenX; + Static[StaticP1].Texture.X := Static[StaticP1].Texture.X + 10 * ScreenX; - Text[TextP1].X := Text[TextP1].X + 10*ScreenX; + Text[TextP1].X := Text[TextP1].X + 10 * ScreenX; {Static[StaticP1ScoreBG].Texture.X := Static[StaticP1ScoreBG].Texture.X + 10*ScreenX; Text[TextP1Score].X := Text[TextP1Score].X + 10*ScreenX;} - Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X + 10*ScreenX; + Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X + 10 * ScreenX; - Text[TextP2R].X := Text[TextP2R].X + 10*ScreenX; + Text[TextP2R].X := Text[TextP2R].X + 10 * ScreenX; {Static[StaticP2RScoreBG].Texture.X := Static[StaticP2RScoreBG].Texture.X + 10*ScreenX; Text[TextP2RScore].X := Text[TextP2RScore].X + 10*ScreenX;} // end of weird stuff - Static[1].Texture.X := Static[1].Texture.X + 10*ScreenX; + Static[1].Texture.X := Static[1].Texture.X + 10 * ScreenX; for T := 0 to 1 do - Text[T].X := Text[T].X + 10*ScreenX; + Text[T].X := Text[T].X + 10 * ScreenX; // retrieve current lyrics time, we have to store the value to avoid - // that min- and sec-values do not match + // that min- and sec-values do not match CurLyricsTime := LyricsState.GetCurrentTime(); Min := Round(CurLyricsTime) div 60; Sec := Round(CurLyricsTime) mod 60; // update static menu with time ... Text[TextTimeText].Text := ''; - if Min < 10 then Text[TextTimeText].Text := '0'; + if Min < 10 then + Text[TextTimeText].Text := '0'; Text[TextTimeText].Text := Text[TextTimeText].Text + IntToStr(Min) + ':'; - if Sec < 10 then Text[TextTimeText].Text := Text[TextTimeText].Text + '0'; + if Sec < 10 then + Text[TextTimeText].Text := Text[TextTimeText].Text + '0'; Text[TextTimeText].Text := Text[TextTimeText].Text + IntToStr(Sec); // draw static menu (BG) @@ -655,10 +670,9 @@ begin SingDrawBackground; // update and draw movie - if (ShowFinish and - (CurrentSong.VideoLoaded or fShowVisualization)) then + if (ShowFinish and (CurrentSong.VideoLoaded or fShowVisualization)) then begin - if assigned( fCurrentVideoPlaybackEngine ) then + if assigned(fCurrentVideoPlaybackEngine) then begin fCurrentVideoPlaybackEngine.GetFrame(LyricsState.GetCurrentTime()); fCurrentVideoPlaybackEngine.DrawGL(ScreenAct); @@ -672,8 +686,8 @@ begin //Log.LogError('Check for music finish: ' + BoolToStr(Music.Finished) + ' ' + FloatToStr(LyricsState.CurrentTime*1000) + ' ' + IntToStr(CurrentSong.Finish)); if ShowFinish then begin - if (not AudioPlayback.Finished) and - ((CurrentSong.Finish = 0) or (LyricsState.GetCurrentTime()*1000 <= CurrentSong.Finish)) then + if (not AudioPlayback.Finished) and ((CurrentSong.Finish = 0) or + (LyricsState.GetCurrentTime() * 1000 <= CurrentSong.Finish)) then begin // analyze song if not paused if (not Paused) then @@ -684,7 +698,7 @@ begin if (not FadeOut) then begin Finish; - FadeOut := true; + FadeOut := True; FadeTo(@ScreenScore); end; end; @@ -707,30 +721,30 @@ begin // will move the statics and texts to the correct screen here. // FIXME: clean up this weird stuff - Static[StaticP1].Texture.X := Static[StaticP1].Texture.X - 10*ScreenX; - Text[TextP1].X := Text[TextP1].X - 10*ScreenX; + Static[StaticP1].Texture.X := Static[StaticP1].Texture.X - 10 * ScreenX; + Text[TextP1].X := Text[TextP1].X - 10 * ScreenX; - Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X - 10*ScreenX; - Text[TextP2R].X := Text[TextP2R].X - 10*ScreenX; + Static[StaticP2R].Texture.X := Static[StaticP2R].Texture.X - 10 * ScreenX; + Text[TextP2R].X := Text[TextP2R].X - 10 * ScreenX; //end of weird - Static[1].Texture.X := Static[1].Texture.X - 10*ScreenX; + Static[1].Texture.X := Static[1].Texture.X - 10 * ScreenX; for T := 0 to 1 do - Text[T].X := Text[T].X - 10*ScreenX; + Text[T].X := Text[T].X - 10 * ScreenX; // Draw Pausepopup // FIXME: this is a workaround that the Static is drawn over the Lyrics, Lines, Scores and Effects // maybe someone could find a better solution if Paused then begin - Static[StaticPausePopup].Visible := true; + Static[StaticPausePopup].Visible := True; Static[StaticPausePopup].Draw; - Static[StaticPausePopup].Visible := false; + Static[StaticPausePopup].Visible := False; end; - Result := true; + Result := True; end; procedure TScreenSing.Finish; @@ -739,7 +753,8 @@ begin AudioPlayback.Stop; AudioPlayback.SetSyncSource(nil); - if (Ini.SavePlayback = 1) then begin + if (Ini.SavePlayback = 1) then + begin Log.BenchmarkStart(0); Log.LogVoice(0); Log.LogVoice(1); @@ -751,24 +766,24 @@ begin if CurrentSong.VideoLoaded then begin fCurrentVideoPlaybackEngine.Close; - CurrentSong.VideoLoaded := false; // to prevent drawing closed video + CurrentSong.VideoLoaded := False; // to prevent drawing closed video end; - SetFontItalic (False); + SetFontItalic(False); end; -procedure TScreenSing.OnSentenceEnd(SentenceIndex: Cardinal); +procedure TScreenSing.OnSentenceEnd(SentenceIndex: cardinal); var - PlayerIndex: Integer; + PlayerIndex: integer; CurrentPlayer: PPLayer; - CurrentScore: Real; - Line: PLine; - LinePerfection: Real; // perfection of singing performance on the current line - Rating: integer; - LineScore: Real; - LineBonus: Real; + CurrentScore: real; + Line: PLine; + LinePerfection: real; // perfection of singing performance on the current line + Rating: integer; + LineScore: real; + LineBonus: real; MaxSongScore: integer; // max. points for the song (without line bonus) - MaxLineScore: Real; // max. points for the current line + MaxLineScore: real; // max. points for the current line const // TODO: move this to a better place MAX_LINE_RATING = 8; // max. rating for singing performance @@ -791,7 +806,7 @@ begin for PlayerIndex := 0 to High(Player) do begin CurrentPlayer := @Player[PlayerIndex]; - CurrentScore := CurrentPlayer.Score + CurrentPlayer.ScoreGolden; + CurrentScore := CurrentPlayer.Score + CurrentPlayer.ScoreGolden; // Line Bonus @@ -813,16 +828,17 @@ begin if (Ini.LineBonus > 0) then begin // line-bonus points (same for each line, no matter how long the line is) - LineBonus := MAX_SONG_LINE_BONUS / - (Length(Lines[0].Line) - NumEmptySentences); + LineBonus := MAX_SONG_LINE_BONUS / (Length(Lines[0].Line) - + NumEmptySentences); // apply line-bonus - CurrentPlayer.ScoreLine := CurrentPlayer.ScoreLine + - LineBonus * LinePerfection; + CurrentPlayer.ScoreLine := + CurrentPlayer.ScoreLine + LineBonus * LinePerfection; CurrentPlayer.ScoreLineInt := Round(CurrentPlayer.ScoreLine / 10) * 10; // update total score - CurrentPlayer.ScoreTotalInt := CurrentPlayer.ScoreInt + - CurrentPlayer.ScoreGoldenInt + - CurrentPlayer.ScoreLineInt; + CurrentPlayer.ScoreTotalInt := + CurrentPlayer.ScoreInt + + CurrentPlayer.ScoreGoldenInt + + CurrentPlayer.ScoreLineInt; // spawn rating pop-up Rating := Round(LinePerfection * MAX_LINE_RATING); @@ -830,7 +846,7 @@ begin end; // PerfectLineTwinkle (effect), Part 1 - If (Ini.EffectSing = 1) then + if (Ini.EffectSing = 1) then CurrentPlayer.LastSentencePerfect := (LinePerfection >= 1); // refresh last score @@ -842,9 +858,9 @@ begin GoldenRec.SpawnPerfectLineTwinkle; end; -// Called on sentence change -// SentenceIndex: index of the new active sentence -procedure TScreenSing.OnSentenceChange(SentenceIndex: Cardinal); + // Called on sentence change + // SentenceIndex: index of the new active sentence +procedure TScreenSing.OnSentenceChange(SentenceIndex: cardinal); var LyricEngine: TLyricEngine; begin @@ -853,7 +869,7 @@ begin // Fill lyrics queue and set upper line to the current sentence while (Lyrics.GetUpperLineIndex() < SentenceIndex) or - (not Lyrics.IsQueueFull) do + (not Lyrics.IsQueueFull) do begin // Add the next line to the queue or a dummy if no more lines are available if (Lyrics.LineCounter <= High(Lines[0].Line)) then @@ -867,9 +883,8 @@ begin // This leaves an in invalidated screen. Calling Draw() makes sure, // that the back-buffer stores the sing-screen, when the next // swap between the back- and front-buffer is done (eliminates flickering) - // - // Note: calling AddLine() right before the regular screen update (Display.Draw) - // would be a better solution. + // <note> calling AddLine() right before the regular screen update (Display.Draw) + // would be a better solution.</note> Draw; end; @@ -879,3 +894,4 @@ begin end; end. + |