aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lua/src/base/UThemes.pas19
-rw-r--r--Lua/src/screens/UScreenPartyOptions.pas22
-rw-r--r--Lua/src/screens/UScreenPartyPlayer.pas253
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;