diff options
Diffstat (limited to '')
-rw-r--r-- | Game/Code/Screens/UScreenMain.pas | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/Game/Code/Screens/UScreenMain.pas b/Game/Code/Screens/UScreenMain.pas new file mode 100644 index 00000000..dcd7db26 --- /dev/null +++ b/Game/Code/Screens/UScreenMain.pas @@ -0,0 +1,384 @@ +unit UScreenMain;
+
+interface
+
+uses
+ UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes, ULCD, ULight;
+
+type
+ TScreenMain = class(TMenu)
+ public
+ TextDescription: integer;
+ TextDescriptionLong: integer;
+
+ //Credits Mod
+ Credits_Visible: Boolean;
+ Credits_Y: Real;
+ Credits_Time: Cardinal;
+ Credits_Alpha: Cardinal;
+ procedure DrawCredits;
+ //Credits Mod End
+
+ constructor Create; override;
+ function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
+ procedure onShow; override;
+ procedure InteractNext; override;
+ procedure InteractPrev; override;
+ procedure UpdateLCD;
+ procedure SetAnimationProgress(Progress: real); override;
+ function Draw: boolean; override;
+ end;
+
+const Credits_Text: Array[0..46] of PChar = (
+ ':SPACE:',
+ 'Main Idea: Corvus 5',
+ 'Thank you very much for this great Game',
+ ':SPACE:',
+ 'The Ultrastar Deluxe Team:',
+ ':SPACE:',
+ 'commandi00:',
+ 'Beta Testing',
+ ':SPACE:',
+ 'Crazy Joker:',
+ 'Graphics',
+ ':SPACE:',
+ 'DennistheMenace:',
+ 'Beta Testing and great Support in "the Board"',
+ ':SPACE:',
+ 'Moq/Moguhguh:',
+ 'Programming',
+ ':SPACE:',
+ 'Mota:',
+ 'Programming, Idea of creating this Mod, Team Leading',
+ ':SPACE:',
+ 'Sawyer:',
+ 'Web Master, Programming',
+ ':SPACE:',
+ 'Whiteshark:',
+ 'Programming, Creating Release',
+ ':SPACE:',
+ ':SPACE:',
+ 'Thanks to',
+ ':SPACE:',
+ 'Blind Guard',
+ 'for supporting us and administrate this great Board',
+ ':SPACE:',
+ 'The whole Community from www.ultra-star.dl.am',
+ 'for supporting us, supporting the newbies',
+ 'and remembering us to continue work',
+ ':SPACE:',
+ 'You',
+ 'for using Ultrastar Deluxe',
+ ':SPACE:',
+ ':SPACE:',
+ 'Visit us at:',
+ 'http://www.UltraStar-Deluxe.de.vu',
+ 'http://www.USD.de.vu',
+ 'http://www.Ultra-Star.dl.am ("The Board" by Blind Guard)',
+ 'Please write Bug Reports and Feature Requests',
+ 'to help making this a better Game');
+
+
+implementation
+
+uses Windows, UGraphic, UMain, UIni, UTexture, USongs, Textgl, opengl, ULanguage, UParty;
+
+
+function TScreenMain.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
+var
+I: Integer;
+SDL_ModState: Word;
+begin
+ Result := true;
+
+ SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT
+ + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT);
+
+ //Deactivate Credits when Key is pressed
+ if Credits_Visible then
+ begin
+ Credits_Visible := False;
+ exit;
+ end;
+
+ If (PressedDown) Then
+ begin // Key Down
+ case PressedKey of
+ SDLK_Q:
+ begin
+ Result := false;
+ end;
+
+ SDLK_ESCAPE :
+ begin
+ Result := False;
+ end;
+
+ SDLK_C:
+ begin
+ if (SDL_ModState = KMOD_LALT) then
+ begin
+ Credits_Y := 600;
+ Credits_Alpha := 0;
+ Credits_Visible := True;
+ end;
+ end;
+ SDLK_M:
+ begin
+ if (SDL_ModState = KMOD_LALT) then
+ begin
+ //Create Teams:
+ PartySession.Teams.NumTeams := 3;
+ //Team 1
+ PartySession.Teams.Teaminfo[0].Name := 'Team 1';
+ PartySession.Teams.Teaminfo[0].Score:= 0;
+ PartySession.Teams.Teaminfo[0].Joker := 3;
+ PartySession.Teams.Teaminfo[0].CurPlayer := 0;
+ PartySession.Teams.Teaminfo[0].NumPlayers := 2;
+ PartySession.Teams.Teaminfo[0].Playerinfo[0].Name := 'Player 1';
+ PartySession.Teams.Teaminfo[0].Playerinfo[0].TimesPlayed := 0;
+ PartySession.Teams.Teaminfo[0].Playerinfo[1].Name := 'Player 2';
+ PartySession.Teams.Teaminfo[0].Playerinfo[1].TimesPlayed := 0;
+
+ //Team 2
+ PartySession.Teams.Teaminfo[1].Name := 'Team 2';
+ PartySession.Teams.Teaminfo[1].Score:= 0;
+ PartySession.Teams.Teaminfo[1].Joker := 3;
+ PartySession.Teams.Teaminfo[1].CurPlayer := 0;
+ PartySession.Teams.Teaminfo[1].NumPlayers := 2;
+ PartySession.Teams.Teaminfo[1].Playerinfo[0].Name := 'Player 3';
+ PartySession.Teams.Teaminfo[1].Playerinfo[0].TimesPlayed := 0;
+ PartySession.Teams.Teaminfo[1].Playerinfo[1].Name := 'Player 4';
+ PartySession.Teams.Teaminfo[1].Playerinfo[1].TimesPlayed := 0;
+
+ //Team 3
+ PartySession.Teams.Teaminfo[2].Name := 'Team 3';
+ PartySession.Teams.Teaminfo[2].Score:= 0;
+ PartySession.Teams.Teaminfo[2].Joker := 3;
+ PartySession.Teams.Teaminfo[2].CurPlayer := 0;
+ PartySession.Teams.Teaminfo[2].NumPlayers := 2;
+ PartySession.Teams.Teaminfo[2].Playerinfo[0].Name := 'Player 5';
+ PartySession.Teams.Teaminfo[2].Playerinfo[0].TimesPlayed := 0;
+ PartySession.Teams.Teaminfo[2].Playerinfo[1].Name := 'Player 6';
+ PartySession.Teams.Teaminfo[2].Playerinfo[1].TimesPlayed := 0;
+
+ //Rounds:
+ SetLength (PartySession.Rounds, 3);
+ PartySession.Rounds[0].Plugin := 1;
+ PartySession.Rounds[0].Winner := 0;
+ PartySession.Rounds[1].Plugin := 0;
+ PartySession.Rounds[1].Winner := 0;
+ PartySession.Rounds[2].Plugin := 0;
+ PartySession.Rounds[2].Winner := 0;
+
+ //Start Party
+ PartySession.StartNewParty;
+ //Change Screen
+ Music.PlayStart;
+ FadeTo(@ScreenPartyNewRound);
+
+ end
+ else
+ begin
+ Music.PlayStart;
+ FadeTo(@ScreenPartyOptions);
+ end;
+
+ end;
+
+ SDLK_RETURN:
+ begin
+ if (Interaction = 0) and (Length(Songs.Song) >= 1) then begin
+ Music.PlayStart;
+ if (Ini.Players >= 0) and (Ini.Players <= 3) then PlayersPlay := Ini.Players + 1;
+ if (Ini.Players = 4) then PlayersPlay := 6;
+ FadeTo(@ScreenName);
+ end;
+ if Interaction = 1 then begin
+ Music.PlayStart;
+ FadeTo(@ScreenEdit);
+ end;
+ if Interaction = 2 then begin
+ Music.PlayStart;
+ FadeTo(@ScreenOptions);
+// SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);// or SDL_FULLSCREEN);
+// LoadTextures;
+ end;
+ if Interaction = 3 then begin
+ Result := false;
+ end;
+ 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: InteractNext;
+ SDLK_UP: InteractPrev;
+ SDLK_RIGHT: InteractNext;
+ SDLK_LEFT: InteractPrev;
+ end;
+ end
+ else // Key Up
+ case PressedKey of
+ SDLK_RETURN :
+ begin
+ end;
+ end;
+end;
+
+constructor TScreenMain.Create;
+var
+ I: integer;
+begin
+ inherited Create;
+
+// AddButton(400-200, 320, 400, 60, Skin.GameStart);
+// AddButton(400-200, 390, 400, 60, Skin.Editor);
+// AddButton(400-200, 460, 400, 60, Skin.Options);
+// AddButton(400-200, 530, 400, 60, Skin.Exit);
+
+ AddBackground(Theme.Main.Background.Tex);
+
+ AddButton(Theme.Main.ButtonSolo);
+ AddButton(Theme.Main.ButtonEditor);
+ AddButton(Theme.Main.ButtonOptions);
+ AddButton(Theme.Main.ButtonExit);
+
+ for I := 0 to High(Theme.Main.Static) do
+ AddStatic(Theme.Main.Static[I]);
+
+ for I := 0 to High(Theme.Main.Text) do
+ AddText(Theme.Main.Text[I]);
+
+ TextDescription := AddText(Theme.Main.TextDescription);
+ TextDescriptionLong := AddText(Theme.Main.TextDescriptionLong);
+
+ Interaction := 0;
+end;
+
+procedure TScreenMain.onShow;
+begin
+ LCD.WriteText(1, ' Choose mode: ');
+ UpdateLCD;
+end;
+
+procedure TScreenMain.InteractNext;
+begin
+ inherited InteractNext;
+ Text[TextDescription].Text := Theme.Main.Description[Interaction];
+ Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction];
+ UpdateLCD;
+ Light.LightOne(1, 200);
+end;
+
+procedure TScreenMain.InteractPrev;
+begin
+ inherited InteractPrev;
+ Text[TextDescription].Text := Theme.Main.Description[Interaction];
+ Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction];
+ UpdateLCD;
+ Light.LightOne(0, 200);
+end;
+
+procedure TScreenMain.UpdateLCD;
+begin
+ case Interaction of
+ 0: LCD.WriteText(2, ' sing ');
+ 1: LCD.WriteText(2, ' editor ');
+ 2: LCD.WriteText(2, ' options ');
+ 3: LCD.WriteText(2, ' exit ');
+ end
+end;
+
+procedure TScreenMain.SetAnimationProgress(Progress: real);
+begin
+ Static[0].Texture.ScaleW := Progress;
+ Static[0].Texture.ScaleH := Progress;
+end;
+
+function TScreenMain.Draw: boolean;
+begin
+Result := True;
+if Credits_Visible then
+ DrawCredits
+else
+ Result := inherited Draw;
+end;
+
+procedure TScreenMain.DrawCredits;
+var
+ T, I: Cardinal;
+ Y: Real;
+ Ver: PChar;
+begin
+ T := GetTickCount div 33;
+ if T <> Credits_Time then
+ begin
+ Credits_Time := T;
+ //Change Position
+ Credits_Y := Credits_Y - 1;
+ //Change Alpha
+ Inc (Credits_Alpha, 3);
+ end;
+
+ //Draw BackGround
+ DrawBG;
+
+
+ //Draw pulsing Credits Text
+ //Set Font
+ SetFontStyle (2);
+ SetFontItalic(False);
+ SetFontSize(9);
+ SetFontPos (460, 570);
+ glColor4f(1, 0, 0, 0.2 + Abs((Credits_Alpha mod 150)/100 - 0.75));
+ glPrint ('Credits! Press any Key to Continue');
+
+ //Set Font Size for Credits
+ SetFontSize(12);
+ //Draw Version
+ if (Credits_Y>-35) then
+ begin
+ Ver := PChar(Language.Translate('US_VERSION'));
+ glColor4f(1, 0.6, 0.08, 0.8);
+ SetFontPos (400 - glTextWidth(Ver)/2, Credits_Y);
+ glprint(Ver);
+ end;
+
+ //Set Color + Start Pos
+ glColor4f(0.8, 0.8, 1, 0.8);
+ Y := Credits_Y + 50;
+
+ //Search upper Position
+ For I := 0 to high(Credits_Text) do
+ begin
+ if (Credits_Text[I]=':SPACE:') then //Spacer
+ Y := Y + 55
+ else
+ Y := Y + 30;
+
+ if Y > -35 then
+ break;
+ end;
+
+ //Draw Text
+ For T := I+1 to high(Credits_Text) do
+ begin
+ if (Credits_Text[T]=':SPACE:') then //Spacer
+ Y := Y + 55
+ else
+ begin
+ SetFontPos (400 - glTextWidth(Credits_Text[T])/2, Y);
+ glprint(Credits_Text[T]);
+ Y := Y + 30;
+ end;
+
+ if Y > 600 then
+ break;
+ end;
+
+ //If lower Position is outside the Screen-> Show MainMenu
+ if (Y <= 0) then
+ Credits_Visible := False;
+end;
+
+end.
|