unit UScreenSongMenu;
interface
uses
UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes;
type
TScreenSongMenu = class(TMenu)
private
CurMenu: Byte; //Num of the cur. Shown Menu
public
Visible: Boolean; //Whether the Menu should be Drawn
constructor Create; override;
function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
procedure onShow; override;
function Draw: boolean; override;
procedure MenuShow(sMenu: Byte);
procedure HandleReturn;
end;
const
SM_Main = 1;
SM_PlayList = 64 or 1;
SM_Party_Main = 128 or 1;
SM_Party_Joker = 128 or 2;
var
ISelections: Array of String;
SelectValue: Integer;
implementation
uses UGraphic, UMain, UIni, UTexture, ULanguage, UParty;
function TScreenSongMenu.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
function IsVisible: Boolean;
begin
Result := True;
if (Interactions[Interaction].Typ = 0) then
begin
Result := Button[Interactions[Interaction].Num].Visible;
end
else if (Interactions[Interaction].Typ = 1) then
begin
//Result := Selects[Interactions[Interaction].Num].Visible;
end
else if (Interactions[Interaction].Typ = 3) then
begin
Result := SelectsS[Interactions[Interaction].Num].Visible;
end;
end;
Procedure SelectNext;
begin
repeat
InteractNext;
until IsVisible;
end;
Procedure SelectPrev;
begin
repeat
InteractPrev;
until IsVisible;
end;
begin
Result := true;
If (PressedDown) Then
begin // Key Down
case PressedKey of
SDLK_Q:
begin
Result := false;
end;
SDLK_ESCAPE :
begin
Music.PlayBack;
Visible := False;
end;
SDLK_RETURN:
begin
HandleReturn;
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: SelectNext;
SDLK_UP: SelectPrev;
SDLK_RIGHT:
begin
if (Interaction=3) then
InteractInc;
end;
SDLK_LEFT:
begin
if (Interaction=3) then
InteractDec;
end;
end;
end
else // Key Up
case PressedKey of
SDLK_RETURN :
begin
end;
end;
end;
constructor TScreenSongMenu.Create;
var
I: integer;
begin
inherited Create;
SetLength(ISelections, 1);
ISelections[0] := 'Dummy';
AddBackground(Theme.SongMenu.Background.Tex);
AddButton(Theme.SongMenu.Button1);
if (Length(Button[0].Text) = 0) then
AddButtonText(14, 20, 'Button 1');
AddButton(Theme.SongMenu.Button2);
if (Length(Button[1].Text) = 0) then
AddButtonText(14, 20, 'Button 2');
AddButton(Theme.SongMenu.Button3);
if (Length(Button[2].Text) = 0) then
AddButtonText(14, 20, 'Button 3');
AddSelectSlide(Theme.SongMenu.SelectSlide3, SelectValue, ISelections);
AddButton(Theme.SongMenu.Button4);
if (Length(Button[3].Text) = 0) then
AddButtonText(14, 20, 'Button 4');
AddText(Theme.SongMenu.TextMenu);
for I := 0 to High(Theme.SongMenu.Static) do
AddStatic(Theme.SongMenu.Static[I]);
for I := 0 to High(Theme.SongMenu.Text) do
AddText(Theme.SongMenu.Text[I]);
Interaction := 0;
end;
function TScreenSongMenu.Draw: boolean;
begin
inherited Draw;
end;
procedure TScreenSongMenu.onShow;
begin
end;
procedure TScreenSongMenu.MenuShow(sMenu: Byte);
begin
Interaction := 0; //Reset Interaction
Case sMenu of
SM_Main:
begin
CurMenu := sMenu;
Text[0].Text := Language.Translate('SONG_MENU_NAME_MAIN');
Button[0].Visible := True;
Button[1].Visible := True;
Button[2].Visible := True;
Button[3].Visible := True;
SelectsS[0].Visible := False;
Button[0].Text[0].Text := Language.Translate('SONG_MENU_PLAY');
Button[1].Text[0].Text := Language.Translate('SONG_MENU_EDIT');
Button[2].Text[0].Text := Language.Translate('SONG_MENU_PLAYMODI');
Button[3].Text[0].Text := Language.Translate('SONG_MENU_CANCEL');
end;
SM_PlayList:
begin
CurMenu := sMenu;
Text[0].Text := Language.Translate('SONG_MENU_NAME_PLAYLIST');
Button[0].Visible := True;
Button[1].Visible := False;
Button[2].Visible := False;
Button[3].Visible := True;
SelectsS[0].Visible := False;
Button[0].Text[0].Text := Language.Translate('SONG_MENU_PLAYLIST_ADD');
Button[1].Text[0].Text := '';
Button[2].Text[0].Text := '';
Button[3].Text[0].Text := Language.Translate('SONG_MENU_CANCEL');
end;
SM_Party_Main:
begin
CurMenu := sMenu;
Text[0].Text := Language.Translate('SONG_MENU_NAME_PARTY_MAIN');
Button[0].Visible := True;
Button[1].Visible := False;
Button[2].Visible := False;
Button[3].Visible := True;
SelectsS[0].Visible := False;
Button[0].Text[0].Text := Language.Translate('SONG_MENU_PLAY');
Button[1].Text[0].Text := Language.Translate('SONG_MENU_JOKER');
Button[2].Text[0].Text := Language.Translate('SONG_MENU_PLAYMODI');
Button[3].Text[0].Text := Language.Translate('SONG_MENU_JOKER');
end;
SM_Party_Joker:
begin
CurMenu := sMenu;
Text[0].Text := Language.Translate('SONG_MENU_NAME_PARTY_JOKER');
Button[0].Visible := (PartySession.Teams.NumTeams >= 1) AND (PartySession.Teams.Teaminfo[0].Joker > 0);
Button[1].Visible := (PartySession.Teams.NumTeams >= 2) AND (PartySession.Teams.Teaminfo[1].Joker > 0);
Button[2].Visible := (PartySession.Teams.NumTeams >= 3) AND (PartySession.Teams.Teaminfo[2].Joker > 0);
Button[3].Visible := True;
SelectsS[0].Visible := False;
Button[0].Text[0].Text := String(PartySession.Teams.Teaminfo[0].Name);
Button[1].Text[0].Text := String(PartySession.Teams.Teaminfo[1].Name);
Button[2].Text[0].Text := String(PartySession.Teams.Teaminfo[2].Name);
Button[3].Text[0].Text := Language.Translate('SONG_MENU_CANCEL');
end;
end;
end;
procedure TScreenSongMenu.HandleReturn;
begin
Case CurMenu of
SM_Main:
begin
Visible := False;
Case Interaction of
0: //Button 1
begin
ScreenSong.StartSong;
end;
1: //Button 2
begin
ScreenSong.OpenEditor;
end;
2: //Button 3
begin
//Todo: Add SingleRound Modi Support
end;
3: //SelectSlide 3
begin
//Dummy
end;
4: //Button 4
begin
//Cancel... (Do Nothing)
end;
end;
end;
SM_PlayList:
begin
Visible := False;
Case Interaction of
0: //Button 1
begin
//
end;
1: //Button 2
begin
//
end;
2: //Button 3
begin
//Todo
end;
3: //SelectSlide 3
begin
//Dummy
end;
4: //Button 4
begin
//
end;
end;
end;
SM_Party_Main:
begin
Case Interaction of
0: //Button 1
begin
//Start Singing
ScreenSong.StartSong;
Visible := False;
end;
4: //Button 4
begin
//Joker
MenuShow(SM_Party_Joker);
end;
end;
end;
SM_Party_Joker:
begin
Visible := False;
Case Interaction of
0: //Button 1
begin
//Joker Team 1
ScreenSong.DoJoker(0);
end;
1: //Button 2
begin
//Joker Team 2
ScreenSong.DoJoker(1);
end;
2: //Button 3
begin
//Joker Team 3
ScreenSong.DoJoker(2);
end;
4: //Button 4
begin
//Cancel... (Fo back to old Menu)
MenuShow(SM_Party_Main);
end;
end;
end;
end;
end;
end.