From 2bc1fdaec54eca194f6873589334cf0b649536d4 Mon Sep 17 00:00:00 2001 From: whiteshark0 Date: Wed, 28 Mar 2007 19:01:01 +0000 Subject: Add Jumpto Screen to ThemeAdded Jumpto Ability to SongScreen (Press J) Fixed: Golden Notes are not shown in PartyMode git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@44 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Screens/UScreenSongJumpto.pas | 194 ++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 Game/Code/Screens/UScreenSongJumpto.pas (limited to 'Game') diff --git a/Game/Code/Screens/UScreenSongJumpto.pas b/Game/Code/Screens/UScreenSongJumpto.pas new file mode 100644 index 00000000..449141c3 --- /dev/null +++ b/Game/Code/Screens/UScreenSongJumpto.pas @@ -0,0 +1,194 @@ +unit UScreenSongJumpto; + +interface + +uses + UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes; + +type + TScreenSongJumpto = class(TMenu) + private + Songsfound: String; + NoSongsfound: String; + CatText: String; + public + Visible: Boolean; //Whether the Menu should be Drawn + VisSongs: Integer; + constructor Create; override; + function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override; + procedure onShow; override; + function Draw: boolean; override; + + procedure SetTextFound(const Count: Cardinal); + end; + +var + IType: Array [0..2] of String; + SelectType: Integer; + + +implementation + +uses UGraphic, UMain, UIni, UTexture, ULanguage, UParty, USongs, UScreenSong; + +function TScreenSongJumpto.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_0..SDLK_9, SDLK_A..SDLK_Z, SDLK_SPACE, SDLK_MINUS, SDLK_EXCLAIM, SDLK_COMMA, SDLK_SLASH, SDLK_ASTERISK, SDLK_QUESTION, SDLK_QUOTE, SDLK_QUOTEDBL: + begin + if Interaction = 0 then + begin + Button[0].Text[0].Text := Button[0].Text[0].Text + chr(ScanCode); + SetTextFound(CatSongs.SetFilter(Button[0].Text[0].Text, SelectType)); + end; + end; + + SDLK_BACKSPACE: + begin + if Interaction = 0 then + begin + Delete(Button[0].Text[0].Text, + Length(Button[0].Text[0].Text), 1); + SetTextFound(CatSongs.SetFilter(Button[0].Text[0].Text, SelectType)); + end; + end; + + SDLK_ESCAPE : + begin + Music.PlayBack; + Visible := False; + if VisSongs = 0 then + CatSongs.SetFilter('', 0); + end; + + SDLK_RETURN: + begin + Visible := False; + Music.PlayBack; + if VisSongs = 0 then + CatSongs.SetFilter('', 0); + 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=1) then + InteractInc; + end; + SDLK_LEFT: + begin + if (Interaction=1) then + InteractDec; + end; + end; + end + else // Key Up + case PressedKey of + SDLK_RETURN : + begin + end; + end; +end; + +constructor TScreenSongJumpto.Create; +var + I: integer; +begin + inherited Create; + //Translate Texts //TODO: Port to UTheme (Linebonus and PartyScreens, too + IType[0] := Language.Translate('SONG_JUMPTO_TYPE1'); + IType[1] := Language.Translate('SONG_JUMPTO_TYPE2'); + IType[2] := Language.Translate('SONG_JUMPTO_TYPE3'); + SongsFound := Language.Translate('SONG_JUMPTO_SONGSFOUND'); + NoSongsFound := Language.Translate('SONG_JUMPTO_NOSONGSFOUND'); + CatText := Language.Translate('SONG_JUMPTO_CATTEXT'); + + AddBackground(Theme.SongJumpto.Background.Tex); + + AddButton(Theme.SongJumpto.ButtonSearchText); + if (Length(Button[0].Text) = 0) then + AddButtonText(14, 20, ''); + + SelectType := 0; + AddSelectSlide(Theme.SongJumpto.SelectSlideType, SelectType, IType); + + AddText(Theme.SongJumpto.TextFound); + + for I := 0 to High(Theme.SongJumpto.Static) do + AddStatic(Theme.SongJumpto.Static[I]); + + for I := 0 to High(Theme.SongJumpto.Text) do + AddText(Theme.SongJumpto.Text[I]); + + Interaction := 0; +end; + +procedure TScreenSongJumpto.onShow; +begin + Interaction := 0; + SetTextFound(0); +end; + +function TScreenSongJumpto.Draw: boolean; +begin + Result := inherited Draw; +end; + +procedure TScreenSongJumpto.SetTextFound(const Count: Cardinal); +begin + if (Count = 0) then + Text[0].Text := NoSongsFound + else + Text[0].Text := Format(SongsFound, [Count]); + + //Set CatTopLeftText + ScreenSong.ShowCatTLCustom(Format(CatText, [Button[0].Text[0].Text])); + + //visSongs setzen + VisSongs := Count; + + //Fix SongSelection + ScreenSong.Interaction := 0; + ScreenSong.SelectNext; + ScreenSong.FixSelected; +end; + +end. -- cgit v1.2.3