From 81105dec41773cbb503ab071e6819bcd4703f845 Mon Sep 17 00:00:00 2001 From: k-m_schindler Date: Sat, 2 Jan 2016 00:43:45 +0000 Subject: first changes to party mode git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@3167 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/base/UParty.pas | 74 ++++++++++++++++++++++++++++++++++++++++----- src/base/USong.pas | 2 +- src/screens/UScreenSing.pas | 4 +-- src/screens/UScreenSong.pas | 20 +++++++----- 4 files changed, 81 insertions(+), 19 deletions(-) diff --git a/src/base/UParty.pas b/src/base/UParty.pas index bc485dca..cbdaf08d 100644 --- a/src/base/UParty.pas +++ b/src/base/UParty.pas @@ -108,7 +108,6 @@ type TPartyGame = class private - bPartyGame: boolean; //< are we playing party or standard mode CurRound: Integer; //< indicates which of the elements of Rounds is played next (at the moment) bPartyStarted: Boolean; @@ -126,12 +125,16 @@ type procedure SetRankingByScore; public + bPartyGame: boolean; //< are we playing party or standard mode + //Teams: TTeamInfo; Rounds: array of TParty_Round; //< holds info which modes are played in this party game (if started) Teams: array of TParty_TeamInfo; //< holds info of teams playing in current round (private for easy manipulation of lua functions) Modes: array of TParty_ModeInfo; //< holds info of registred party modes + SungPartySongs: array of integer; + property CurrentRound: Integer read CurRound; constructor Create; @@ -206,13 +209,17 @@ type the index stands for the placing, team is the team number (in the team array) rank is correct rank if some teams have the - same score. + same score. } function GetTeamRanking: AParty_TeamRanking; { returns a string like "Team 1 (and Team 2) win" } function GetWinnerString(Round: integer): UTF8String; + procedure SaveSungPartySong(ID: integer); +{ add when Duet is ready + function SongNotSungAndNotDuet(ID, N_DuetSongs: integer): boolean; +} destructor Destroy; override; end; @@ -239,7 +246,7 @@ const PR_First = 1; PR_Second = 2; PR_Third = 3; - + StandardModus = 0; //Modus Id that will be played in non-party mode var @@ -288,6 +295,8 @@ begin // clear times played for I := 0 to High(TimesPlayed) do TimesPlayed[I] := 0; + + SetLength(SungPartySongs, 0); end; { private: some intelligent randomnes for plugins } @@ -821,7 +830,7 @@ begin // we set screen song to party mode // plugin should not have to do this if it // don't want default procedure to be executed - ScreenSong.Mode := smPartyMode; + ScreenSong.Mode := smPartyClassic; // may need to be commented off with Modes[Rounds[CurRound].Mode] do ExecuteDefault := (CallLua(Parent, Functions.BeforeSongSelect)); @@ -873,6 +882,13 @@ begin else ExecuteDefault := true; + //set correct playersplay + if (bPartyGame) then + PlayersPlay := Length(Teams); +{ add when Tournament is ready + if (ScreenSong.Mode = smPartyTournament) then + PlayersPlay := 2; +} // execute default function: if ExecuteDefault then begin @@ -884,10 +900,6 @@ begin sing screen is shown, or it should be called by plugin if it wants to define a custom singscreen start up. } - - //set correct playersplay - if (bPartyGame) then - PlayersPlay := Length(Teams); end; end; @@ -933,7 +945,16 @@ begin // display party score screen Display.FadeTo(@ScreenPartyScore) else //display standard score screen +{ add when Tournament is ready + begin + if (ScreenSong.Mode = smPartyTournament) then + Display.FadeTo(@ScreenPartyTournamentWin) + else +} Display.FadeTo(@ScreenScore); +{ add when Tournament is ready + end; +} end; end; @@ -1023,4 +1044,41 @@ begin Result := Language.Translate('PARTY_NOBODY'); end; +procedure TPartyGame.SaveSungPartySong(ID: integer); +begin + SetLength(SungPartySongs, Length(SungPartySongs) + 1); + SungPartySongs[High(SungPartySongs)] := ID; +end; +{ add when Duet is ready +function TPartyGame.SongNotSungAndNotDuet(ID, N_DuetSongs: integer): boolean; +var + I: integer; + Sung: boolean; +begin + Sung := false; + + if (CatSongs.Song[ID].isDuet) then + begin + Result := false; + Exit; + end; + + for I := 0 to High(SungPartySongs) do + begin + if (SungPartySongs[I] = ID) then + Sung := true; + end; + + if (Sung) then + begin + if (Songs.SongList.Count - High(Party.SungPartySongs) - N_DuetSongs <= 1) then + Result := true + else + Result := false + end + else + Result := true; + +end; +} end. diff --git a/src/base/USong.pas b/src/base/USong.pas index 1dda2825..92d3f82d 100644 --- a/src/base/USong.pas +++ b/src/base/USong.pas @@ -64,7 +64,7 @@ uses type - TSingMode = ( smNormal, smPartyMode, smPlaylistRandom, smMedley ); + TSingMode = ( smNormal, smPartyClassic, smPartyFree, smPartyChallenge, smPartyTournament, smJukebox, smPlaylistRandom , smMedley ); TMedleySource = ( msNone, msCalculated, msTag ); diff --git a/src/screens/UScreenSing.pas b/src/screens/UScreenSing.pas index b339199b..4ce2f1b5 100644 --- a/src/screens/UScreenSing.pas +++ b/src/screens/UScreenSing.pas @@ -634,7 +634,7 @@ begin // error loading song -> go back to previous screen and show some error message Display.AbortScreenChange; // select new song in party mode - if ScreenSong.Mode = smPartyMode then + if ScreenSong.Mode = smPartyClassic then ScreenSong.SelectRandomSong(); if Length(CurrentSong.LastError) > 0 then ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) @@ -665,7 +665,7 @@ begin //Error Loading Song in Medley Mode -> Go back to Song Screen and Show some Error Message Display.AbortScreenChange; // select new song in party mode - if ScreenSong.Mode = smPartyMode then + if ScreenSong.Mode = smPartyClassic then ScreenSong.SelectRandomSong(); if Length(CurrentSong.LastError) > 0 then ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) diff --git a/src/screens/UScreenSong.pas b/src/screens/UScreenSong.pas index 879bcbfc..3b500575 100644 --- a/src/screens/UScreenSong.pas +++ b/src/screens/UScreenSong.pas @@ -592,7 +592,7 @@ begin end; end //When in party Mode then Ask before Close - else if (Mode = smPartyMode) then + else if (Mode = smPartyClassic) then begin AudioPlayback.PlaySound(SoundLib.Back); CheckFadeTo(@ScreenMain,'MSG_END_PARTY'); @@ -635,7 +635,7 @@ begin end; end; end - else if (Mode = smPartyMode) then //PartyMode -> Show Menu + else if (Mode = smPartyClassic) then //PartyMode -> Show Menu begin if (Ini.PartyPopup = 1) then ScreenSongMenu.MenuShow(SM_Party_Main) @@ -1596,7 +1596,7 @@ begin end; end //Party Mode - else if Mode = smPartyMode then + else if Mode = smPartyClassic then begin SelectRandomSong; //Show Menu directly in PartyMode @@ -2006,7 +2006,7 @@ begin else SkipTo(Random(CatSongs.VisibleSongs)); end; - smPartyMode: // one category select category and select random song + smPartyClassic: // one category select category and select random song begin CatSongs.ShowCategoryList; CatSongs.ClickCategoryButton(PlaylistMan.CurPlayList); @@ -2033,7 +2033,7 @@ end; procedure TScreenSong.SetJoker; begin // If Party Mode - if Mode = smPartyMode then //Show Joker that are available + if Mode = smPartyClassic then //Show Joker that are available begin if (Length(Party.Teams) >= 1) then begin @@ -2114,7 +2114,7 @@ var Visible: boolean; begin //Set Visibility of Party Statics and Text - Visible := (Mode = smPartyMode); + Visible := (Mode = smPartyClassic); for I := 0 to High(StaticParty) do Statics[StaticParty[I]].Visible := Visible; @@ -2137,10 +2137,14 @@ end; procedure TScreenSong.StartSong; begin CatSongs.Selected := Interaction; + + if (Mode = smPartyFree) then + Party.SaveSungPartySong(Interaction); + StopMusicPreview(); //Party Mode - if (Mode = smPartyMode) then + if (Mode = smPartyClassic) then begin FadeTo(@ScreenSing); end @@ -2175,7 +2179,7 @@ end; //Team No of Team (0-5) procedure TScreenSong.DoJoker (Team: integer); begin - if (Mode = smPartyMode) and + if (Mode = smPartyClassic) and (High(Party.Teams) >= Team) and (Party.Teams[Team].JokersLeft > 0) then begin -- cgit v1.2.3