From dbe444f87b85da27a37f38e80bfd540178b8dde0 Mon Sep 17 00:00:00 2001 From: brunzelchen <brunzelchen@b956fd51-792f-4845-bead-9b4dfca2ff2c> Date: Wed, 1 Sep 2010 14:09:58 +0000 Subject: - fix: position of player 3 and 4 in 4-player-mode on one screen in singscreen - fix: scorescreen for 4-player-mode on one screen - add: tag #CALCMEDLEY:Off => disable calculation of medley for that song - add: sorting RANDOM for party-modes - add: ShuffleMode FULL (play whole file) in fullscreen if video available - add: it possible to select the 2 songs left and right of the random selected song in party mode - add: num song in in party options (in the selected folder/playlist) - fix: dont change line in editor while playing only one line - removed option solmization from lyric option screen - add: play last sung song in party score screen - added some plugins (thx to MasterPhW) git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2629 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Screens/UScreenPartyScore.pas | 209 +++++++++++++++++++++++++++++--- 1 file changed, 194 insertions(+), 15 deletions(-) (limited to 'Game/Code/Screens/UScreenPartyScore.pas') diff --git a/Game/Code/Screens/UScreenPartyScore.pas b/Game/Code/Screens/UScreenPartyScore.pas index cf08018d..01a4349e 100644 --- a/Game/Code/Screens/UScreenPartyScore.pas +++ b/Game/Code/Screens/UScreenPartyScore.pas @@ -6,6 +6,11 @@ uses UMenu, SDL, UDisplay, UMusic, SysUtils, UThemes; type + THandler = record + changed: boolean; + change_time: real; + end; + TScreenPartyScore = class(TMenu) public TextScoreTeam1: Cardinal; @@ -30,12 +35,21 @@ type R, G, B: Real; end; - MaxScore: Word; + MaxScore: Word; + + ActualRound: integer; + Voice: integer; + Fadeout: boolean; + + MP3VolumeHandler: THandler; constructor Create; override; function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override; procedure onShow; override; + function Draw: boolean; override; procedure SetAnimationProgress(Progress: real); override; + procedure StartPreview; + procedure StartVoice; end; const @@ -43,7 +57,7 @@ const implementation -uses UGraphic, UMain, UParty, UScreenSingModi, ULanguage, UTexture, USkins, UHelp, ULog; +uses UGraphic, UDraw, UTime, UMain, UParty, USongs, UScreenSingModi, ULanguage, UTexture, UIni, USkins, UHelp, ULog; function TScreenPartyScore.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; begin @@ -61,26 +75,81 @@ begin Result := false; end; + //MP3-Volume Up + SDLK_PAGEUP: + begin + if (ScreenSong.MP3Volume<100) then + begin + ScreenSong.MP3Volume := ScreenSong.MP3Volume+5; + Music.SetMusicVolume(ScreenSong.MP3Volume); + end; + MP3VolumeHandler.changed := true; + MP3VolumeHandler.change_time := 0; + end; + + //MP3-Volume Down + SDLK_PAGEDOWN: + begin + if (ScreenSong.MP3Volume>0) then + begin + ScreenSong.MP3Volume := ScreenSong.MP3Volume-5; + Music.SetMusicVolume(ScreenSong.MP3Volume); + end; + MP3VolumeHandler.changed := true; + MP3VolumeHandler.change_time := 0; + end; + SDLK_ESCAPE, - SDLK_BACKSPACE : + SDLK_BACKSPACE, + SDLK_RETURN : begin - Music.PlayStart; - if (PartySession.CurRound < High(PartySession.Rounds)) then - FadeTo(@ScreenPartyNewRound) - else + if (not Fadeout) then begin - PartySession.EndRound; - FadeTo(@ScreenPartyWin); + Music.PlayStart; + + if (Ini.SavePlayback=1) then + Music.VoicesClose; + + ScreenSong.SongIndex := -1; + Music.FadeStop(Ini.PreviewFading); + + if (PartySession.CurRound < High(PartySession.Rounds)) then + FadeTo(@ScreenPartyNewRound) + else + begin + PartySession.EndRound; + FadeTo(@ScreenPartyWin); + end; + Fadeout := true; end; end; - SDLK_RETURN: + SDLK_RIGHT: begin - Music.PlayStart; - if (PartySession.CurRound < High(PartySession.Rounds)) then - FadeTo(@ScreenPartyNewRound) - else - FadeTo(@ScreenPartyWin); + if ActualRound<Length(PlaylistMedley.Stats)-1 then + begin + Music.PlayChange; + inc(ActualRound); + //RefreshTexts; + if not (Ini.SavePlayback=1) then + StartPreview + else + StartVoice; + end; + end; + + SDLK_LEFT: + begin + if ActualRound>0 then + begin + Music.PlayChange; + dec(ActualRound); + //RefreshTexts; + if not (Ini.SavePlayback=1) then + StartPreview + else + StartVoice; + end; end; end; end; @@ -164,6 +233,9 @@ begin if Music.VocalRemoverActivated() then Music.DisableVocalRemover; + + ActualRound := 0; + Fadeout := false; //Get Maxscore MaxScore := 0; @@ -285,6 +357,113 @@ begin Static[StaticTeam3BG].Visible := False; Static[StaticTeam3Deco].Visible := False; end; + + MP3VolumeHandler.changed := false; + if not (Ini.SavePlayback=1) then + StartPreview + else + begin + Voice := -1; + StartVoice; + end; +end; + +function TScreenPartyScore.Draw: boolean; +begin + inherited Draw; + + if MP3VolumeHandler.changed and (MP3VolumeHandler.change_time+TimeSkip<3) then + begin + MP3VolumeHandler.change_time := MP3VolumeHandler.change_time + TimeSkip; + DrawVolumeBar(10, 530, 780, 12, ScreenSong.MP3Volume); + end else + MP3VolumeHandler.changed := false; +end; + +procedure TScreenPartyScore.StartPreview; +var + select: integer; + changed: boolean; +begin + //When Music Preview is avtivated -> then Change Music + if (Ini.PreviewVolume <> 0) then + begin + changed := false; + if (ScreenSong.Mode = smMedley) or ScreenSong.PartyMedley then + begin + if (ActualRound<Length(PlaylistMedley.Stats)-1) and (ScreenSong.SongIndex <> PlaylistMedley.Song[ActualRound]) then + begin + select := PlaylistMedley.Song[ActualRound]; + changed := true; + ScreenSong.SongIndex := select; + end; + end else + begin + select := ScreenSong.Interaction; + ScreenSong.SongIndex := select; + changed := true; + end; + + if changed then + begin + Music.Close; + if Music.Open(CatSongs.Song[select].Path + CatSongs.Song[select].Mp3) then + begin + if (CatSongs.Song[select].PreviewStart>0) then + Music.MoveTo(CatSongs.Song[select].PreviewStart) + else + Music.MoveTo(Music.Length / 4); + + //If Song Fading is activated then don't Play directly, and Set Volume to Null, else Play normal + if (Ini.PreviewFading = 0) then + begin + Music.SetMusicVolume (ScreenSong.MP3Volume); + Music.Play; + end else + begin + Music.Fade(0, ScreenSong.MP3Volume, Ini.PreviewFading); + Music.Play; + end; + end; + end; + end; +end; + +procedure TScreenPartyScore.StartVoice; +var + changed: boolean; + files: array of string; + I: integer; + +begin + //Music.Close; + //ScreenSong.SongIndex := -1; + changed := false; + if (ScreenSong.Mode = smMedley) or ScreenSong.PartyMedley then + begin + if (ActualRound<Length(PlaylistMedley.Stats)-1) and (Voice <> ActualRound) then + begin + Voice := ActualRound; + changed := true; + SetLength(files, PlaylistMedley.NumPlayer); + for I := 0 to Length(files) - 1 do + files[I] := PlaylistMedley.Stats[Voice].Player[I].VoiceFile; + end; + end else + begin + Voice := 0; + changed := true; + SetLength(files, PlayersPlay); + for I := 0 to Length(files) - 1 do + files[I] := Player[I].VoiceFile; + end; + + if changed then + begin + Music.VoicesClose; + if (Music.VoicesOpen(files)>0) then + Music.VoicesPlay; + end; end; procedure TScreenPartyScore.SetAnimationProgress(Progress: real); -- cgit v1.2.3