diff options
-rw-r--r-- | Lua/src/base/UThemes.pas | 19 | ||||
-rw-r--r-- | Lua/src/screens/UScreenPartyOptions.pas | 22 | ||||
-rw-r--r-- | Lua/src/screens/UScreenPartyPlayer.pas | 253 |
3 files changed, 144 insertions, 150 deletions
diff --git a/Lua/src/base/UThemes.pas b/Lua/src/base/UThemes.pas index 4322815e..5cf257a8 100644 --- a/Lua/src/base/UThemes.pas +++ b/Lua/src/base/UThemes.pas @@ -649,16 +649,17 @@ type SelectPlayList: TThemeSelectSlide; SelectPlayList2: TThemeSelectSlide; SelectRounds: TThemeSelectSlide; - SelectTeams: TThemeSelectSlide; - SelectPlayers1: TThemeSelectSlide; - SelectPlayers2: TThemeSelectSlide; - SelectPlayers3: TThemeSelectSlide; {ButtonNext: TThemeButton; ButtonPrev: TThemeButton;} end; TThemePartyPlayer = class(TThemeBasic) + SelectTeams: TThemeSelectSlide; + SelectPlayers1: TThemeSelectSlide; + SelectPlayers2: TThemeSelectSlide; + SelectPlayers3: TThemeSelectSlide; + Team1Name: TThemeButton; Player1Name: TThemeButton; Player2Name: TThemeButton; @@ -1436,16 +1437,18 @@ begin ThemeLoadSelectSlide(PartyOptions.SelectPlayList, 'PartyOptionsSelectPlayList'); ThemeLoadSelectSlide(PartyOptions.SelectPlayList2, 'PartyOptionsSelectPlayList2'); ThemeLoadSelectSlide(PartyOptions.SelectRounds, 'PartyOptionsSelectRounds'); - ThemeLoadSelectSlide(PartyOptions.SelectTeams, 'PartyOptionsSelectTeams'); - ThemeLoadSelectSlide(PartyOptions.SelectPlayers1, 'PartyOptionsSelectPlayers1'); - ThemeLoadSelectSlide(PartyOptions.SelectPlayers2, 'PartyOptionsSelectPlayers2'); - ThemeLoadSelectSlide(PartyOptions.SelectPlayers3, 'PartyOptionsSelectPlayers3'); {ThemeLoadButton (ButtonNext, 'ButtonNext'); ThemeLoadButton (ButtonPrev, 'ButtonPrev');} //Party Player ThemeLoadBasic(PartyPlayer, 'PartyPlayer'); + + ThemeLoadSelectSlide(PartyPlayer.SelectTeams, 'PartyPlayerSelectTeams'); + ThemeLoadSelectSlide(PartyPlayer.SelectPlayers1, 'PartyPlayerSelectPlayers1'); + ThemeLoadSelectSlide(PartyPlayer.SelectPlayers2, 'PartyPlayerSelectPlayers2'); + ThemeLoadSelectSlide(PartyPlayer.SelectPlayers3, 'PartyPlayerSelectPlayers3'); + ThemeLoadButton(PartyPlayer.Team1Name, 'PartyPlayerTeam1Name'); ThemeLoadButton(PartyPlayer.Player1Name, 'PartyPlayerPlayer1Name'); ThemeLoadButton(PartyPlayer.Player2Name, 'PartyPlayerPlayer2Name'); diff --git a/Lua/src/screens/UScreenPartyOptions.pas b/Lua/src/screens/UScreenPartyOptions.pas index 9bca6400..50c31a17 100644 --- a/Lua/src/screens/UScreenPartyOptions.pas +++ b/Lua/src/screens/UScreenPartyOptions.pas @@ -49,10 +49,6 @@ type SelectPlayList: cardinal; SelectPlayList2: cardinal; SelectRounds: cardinal; - SelectTeams: cardinal; - SelectPlayers1: cardinal; - SelectPlayers2: cardinal; - SelectPlayers3: cardinal; PlayList: integer; PlayList2: integer; @@ -188,10 +184,6 @@ begin if (Interaction = 1) then begin SetPlaylist2; - end //Change Team3 Players visibility - else if (Interaction = 4) then - begin - SelectsS[7].Visible := (NumTeams = 1); end; end; SDLK_LEFT: @@ -203,10 +195,6 @@ begin if (Interaction = 1) then begin SetPlaylist2; - end //Change Team3 Players visibility - else if (Interaction = 4) then - begin - SelectsS[7].Visible := (NumTeams = 1); end; end; end; @@ -225,11 +213,7 @@ begin SetLength(IPlaylist2, 1); IPlaylist2[0] := '---'; - //Clear all Selects - NumTeams := 0; - NumPlayer1 := 0; - NumPlayer2 := 0; - NumPlayer3 := 0; + //Clear all Selects Rounds := 5; PlayList := 0; PlayList2 := 0; @@ -241,10 +225,6 @@ begin SelectPlayList := AddSelectSlide(Theme.PartyOptions.SelectPlayList, PlayList, IPlaylist); SelectPlayList2 := AddSelectSlide(Theme.PartyOptions.SelectPlayList2, PlayList2, IPlaylist2); SelectRounds := AddSelectSlide(Theme.PartyOptions.SelectRounds, Rounds, IRounds); - SelectTeams := AddSelectSlide(Theme.PartyOptions.SelectTeams, NumTeams, ITeams); - SelectPlayers1 := AddSelectSlide(Theme.PartyOptions.SelectPlayers1, NumPlayer1, IPlayers); - SelectPlayers2 := AddSelectSlide(Theme.PartyOptions.SelectPlayers2, NumPlayer2, IPlayers); - SelectPlayers3 := AddSelectSlide(Theme.PartyOptions.SelectPlayers3, NumPlayer3, IPlayers); Interaction := 0; diff --git a/Lua/src/screens/UScreenPartyPlayer.pas b/Lua/src/screens/UScreenPartyPlayer.pas index d9afe8a0..7d95bb96 100644 --- a/Lua/src/screens/UScreenPartyPlayer.pas +++ b/Lua/src/screens/UScreenPartyPlayer.pas @@ -44,6 +44,14 @@ uses type TScreenPartyPlayer = class(TMenu) + private + CountTeams: integer; + CountPlayer: array [0..2] of integer; + + SelectTeams: cardinal; + SelectPlayers: array [0..2] of cardinal; + procedure UpdateInterface; + procedure UpdateParty; public Team1Name: cardinal; Player1Name: cardinal; @@ -69,6 +77,10 @@ type procedure SetAnimationProgress(Progress: real); override; end; +const + ITeams: array[0..1] of UTF8String = ('2', '3'); + IPlayers: array[0..3] of UTF8String = ('1', '2', '3', '4'); + implementation uses @@ -81,23 +93,108 @@ uses UScreenPartyOptions, ULanguage; +procedure TScreenPartyPlayer.UpdateInterface; + var + I: integer; + Btn: integer; +begin + SelectsS[SelectPlayers[2]].Visible := (CountTeams = 1); + + Btn := 0; + for I := 0 to 2 do + begin + if (CountTeams + 1 >= I) then + begin + Button[Btn + 0].Visible := true; + Button[Btn + 1].Visible := (CountPlayer[I] + 1 >= 1); + Button[Btn + 2].Visible := (CountPlayer[I] + 1 >= 2); + Button[Btn + 3].Visible := (CountPlayer[I] + 1 >= 3); + Button[Btn + 4].Visible := (CountPlayer[I] + 1 >= 4); + end + else + begin + Button[Btn + 0].Visible := false; + Button[Btn + 1].Visible := false; + Button[Btn + 2].Visible := false; + Button[Btn + 3].Visible := false; + Button[Btn + 4].Visible := false; + end; + Inc(Btn, 5); + end; +end; + +procedure TScreenPartyPlayer.UpdateParty; + var + I, J: integer; + Rounds: ARounds; +begin + {//Save PlayerNames + for I := 0 to PartySession.Teams.NumTeams-1 do + begin + PartySession.Teams.Teaminfo[I].Name := PChar(Button[I*5].Text[0].Text); + for J := 0 to PartySession.Teams.Teaminfo[I].NumPlayers-1 do + begin + PartySession.Teams.Teaminfo[I].Playerinfo[J].Name := PChar(Button[I*5 + J+1].Text[0].Text); + PartySession.Teams.Teaminfo[I].Playerinfo[J].TimesPlayed := 0; + end; + end; } + + // add teams to party + + for I := 0 to CountTeams + 1 do + begin + Party.AddTeam(Button[I * 5].Text[0].Text); + + for J := 0 to CountPlayer[I]-1 do + Party.AddPlayer(I, Button[I * 5 + 1 + J].Text[0].Text); + end; + + if (Party.ModesAvailable) then + begin //mode for current playersetup available + // to - do : add round select screen + // atm just add random rounds to the rounds array + SetLength(Rounds, ScreenPartyOptions.Rounds + 2); + + for I := 0 to High(Rounds) do + Rounds[I] := Party_Round_Random; + + // start party game + if (Party.StartGame(Rounds)) then + begin + FadeTo(@ScreenPartyNewRound, SoundLib.Start); + end + else + begin + //error starting party game + ScreenPopupError.ShowPopup(Language.Translate('ERROR_CAN_NOT_START_PARTY')); + + Party.Clear; + end; + + end + else + begin + // no mode available for current player setup + ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_MODES_FOR_CURRENT_SETUP')); + + Party.Clear; + end; +end; + function TScreenPartyPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var SDL_ModState: word; - I, J: integer; - HighPlayer: Integer; - Rounds: ARounds; procedure IntNext; begin repeat InteractNext; - until Button[Interaction].Visible; + until (Interactions[Interaction].Typ <> iButton) or (Button[Interactions[Interaction].Num].Visible); end; procedure IntPrev; begin repeat InteractPrev; - until Button[Interaction].Visible; + until (Interactions[Interaction].Typ <> iButton) or (Button[Interactions[Interaction].Num].Visible); end; begin Result := true; @@ -247,78 +344,31 @@ begin FadeTo(@ScreenPartyOptions); end; - SDLK_RETURN: - begin - - {//Save PlayerNames - for I := 0 to PartySession.Teams.NumTeams-1 do - begin - PartySession.Teams.Teaminfo[I].Name := PChar(Button[I*5].Text[0].Text); - for J := 0 to PartySession.Teams.Teaminfo[I].NumPlayers-1 do - begin - PartySession.Teams.Teaminfo[I].Playerinfo[J].Name := PChar(Button[I*5 + J+1].Text[0].Text); - PartySession.Teams.Teaminfo[I].Playerinfo[J].TimesPlayed := 0; - end; - end; } - - // add teams to party - - for I := 0 to ScreenPartyOptions.NumTeams + 1 do - begin - Party.AddTeam(Button[I * 5].Text[0].Text); - - case I of - 0: HighPlayer := ScreenPartyOptions.NumPlayer1; - 1: HighPlayer := ScreenPartyOptions.NumPlayer2; - 2: HighPlayer := ScreenPartyOptions.NumPlayer3; - end; - - for J := 0 to HighPlayer do - Party.AddPlayer(I, Button[I * 5 + 1 + J].Text[0].Text); - end; - - if (Party.ModesAvailable) then - begin //mode for current playersetup available - // to - do : add round select screen - // atm just add random rounds to the rounds array - SetLength(Rounds, ScreenPartyOptions.Rounds + 2); - - for I := 0 to High(Rounds) do - Rounds[I] := Party_Round_Random; - - // start party game - if (Party.StartGame(Rounds)) then - begin - FadeTo(@ScreenPartyNewRound, SoundLib.Start); - end - else - begin - //error starting party game - ScreenPopupError.ShowPopup(Language.Translate('ERROR_CAN_NOT_START_PARTY')); - - Party.Clear; - end; - - end - else - begin - // no mode available for current player setup - ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_MODES_FOR_CURRENT_SETUP')); - - Party.Clear; - end; - - - - end; + SDLK_RETURN: UpdateParty; // 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: IntNext; SDLK_UP: IntPrev; - SDLK_RIGHT: IntNext; - SDLK_LEFT: IntPrev; + SDLK_RIGHT: begin + if (Interaction in [0,2,8,14]) then + begin + AudioPlayback.PlaySound(SoundLib.Option); + InteractInc; + + UpdateInterface; + end; + end; + SDLK_LEFT: begin + if (Interaction in [0,2,8,14]) then + begin + AudioPlayback.PlaySound(SoundLib.Option); + InteractDec; + + UpdateInterface; + end; + end; end; end; end; @@ -329,25 +379,36 @@ begin LoadFromTheme(Theme.PartyPlayer); + SelectTeams := AddSelectSlide(Theme.PartyPlayer.SelectTeams, CountTeams, ITeams); + Team1Name := AddButton(Theme.PartyPlayer.Team1Name); + SelectPlayers[0] := AddSelectSlide(Theme.PartyPlayer.SelectPlayers1, CountPlayer[0], IPlayers); AddButton(Theme.PartyPlayer.Player1Name); AddButton(Theme.PartyPlayer.Player2Name); AddButton(Theme.PartyPlayer.Player3Name); AddButton(Theme.PartyPlayer.Player4Name); Team2Name := AddButton(Theme.PartyPlayer.Team2Name); + SelectPlayers[1] := AddSelectSlide(Theme.PartyPlayer.SelectPlayers2, CountPlayer[1], IPlayers); AddButton(Theme.PartyPlayer.Player5Name); AddButton(Theme.PartyPlayer.Player6Name); AddButton(Theme.PartyPlayer.Player7Name); AddButton(Theme.PartyPlayer.Player8Name); Team3Name := AddButton(Theme.PartyPlayer.Team3Name); + SelectPlayers[2] := AddSelectSlide(Theme.PartyPlayer.SelectPlayers3, CountPlayer[2], IPlayers); AddButton(Theme.PartyPlayer.Player9Name); AddButton(Theme.PartyPlayer.Player10Name); AddButton(Theme.PartyPlayer.Player11Name); AddButton(Theme.PartyPlayer.Player12Name); Interaction := 0; + + //Clear Selects + CountTeams := 0; + CountPlayer[0] := 0; + CountPlayer[1] := 0; + CountPlayer[2] := 0; end; procedure TScreenPartyPlayer.OnShow; @@ -370,57 +431,7 @@ begin Button[5].Text[0].Text := Ini.NameTeam[1]; Button[10].Text[0].Text := Ini.NameTeam[2]; // Templates for Names Mod end - - if (ScreenPartyOptions.NumTeams + 2 >= 1) then - begin - Button[0].Visible := true; - Button[1].Visible := (ScreenPartyOptions.NumPlayer1 + 1 >= 1); - Button[2].Visible := (ScreenPartyOptions.NumPlayer1 + 1 >= 2); - Button[3].Visible := (ScreenPartyOptions.NumPlayer1 + 1 >= 3); - Button[4].Visible := (ScreenPartyOptions.NumPlayer1 + 1 >= 4); - end - else - begin - Button[0].Visible := false; - Button[1].Visible := false; - Button[2].Visible := false; - Button[3].Visible := false; - Button[4].Visible := false; - end; - - if (ScreenPartyOptions.NumTeams + 2 >= 2) then - begin - Button[5].Visible := true; - Button[6].Visible := (ScreenPartyOptions.NumPlayer2 + 1 >= 1); - Button[7].Visible := (ScreenPartyOptions.NumPlayer2 + 1 >= 2); - Button[8].Visible := (ScreenPartyOptions.NumPlayer2 + 1 >= 3); - Button[9].Visible := (ScreenPartyOptions.NumPlayer2 + 1 >= 4); - end - else - begin - Button[5].Visible := false; - Button[6].Visible := false; - Button[7].Visible := false; - Button[8].Visible := false; - Button[9].Visible := false; - end; - if (ScreenPartyOptions.NumTeams + 2 >= 3) then - begin - Button[10].Visible := true; - Button[11].Visible := (ScreenPartyOptions.NumPlayer3 + 1 >= 1); - Button[12].Visible := (ScreenPartyOptions.NumPlayer3 + 1 >= 2); - Button[13].Visible := (ScreenPartyOptions.NumPlayer3 + 1 >= 3); - Button[14].Visible := (ScreenPartyOptions.NumPlayer3 + 1 >= 4); - end - else - begin - Button[10].Visible := false; - Button[11].Visible := false; - Button[12].Visible := false; - Button[13].Visible := false; - Button[14].Visible := false; - end; end; |