aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Screens/UScreenName.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/Screens/UScreenName.pas')
-rw-r--r--Game/Code/Screens/UScreenName.pas114
1 files changed, 114 insertions, 0 deletions
diff --git a/Game/Code/Screens/UScreenName.pas b/Game/Code/Screens/UScreenName.pas
new file mode 100644
index 00000000..99f5d40a
--- /dev/null
+++ b/Game/Code/Screens/UScreenName.pas
@@ -0,0 +1,114 @@
+unit UScreenName;
+
+interface
+
+uses
+ UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes;
+
+type
+ TScreenName = class(TMenu)
+ public
+ constructor Create; override;
+ function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
+ procedure onShow; override;
+ procedure SetAnimationProgress(Progress: real); override;
+ end;
+
+implementation
+
+uses UGraphic, UMain, UIni, UTexture;
+
+function TScreenName.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
+var
+ I: integer;
+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
+ Button[Interaction].Text[0].Text := Button[Interaction].Text[0].Text + chr(ScanCode);
+ end;
+
+ SDLK_BACKSPACE:
+ begin
+ Delete(Button[Interaction].Text[0].Text,
+ Length(Button[Interaction].Text[0].Text), 1);
+ end;
+
+ SDLK_ESCAPE :
+ begin
+ Ini.SaveNames;
+ Music.PlayBack;
+ FadeTo(@ScreenMain);
+ end;
+
+ SDLK_RETURN:
+ begin
+ for I := 1 to 6 do
+ Ini.Name[I-1] := Button[I-1].Text[0].Text;
+ Ini.SaveNames;
+ Music.PlayStart;
+ FadeTo(@ScreenLevel);
+ 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;
+end;
+
+constructor TScreenName.Create;
+var
+ I: integer;
+begin
+ inherited Create;
+
+ AddBackground(Theme.Name.Background.Tex);
+
+ for I := 1 to 6 do
+ AddButton(Theme.Name.ButtonPlayer[I]);
+
+ for I := 0 to High(Theme.Name.Static) do
+ AddStatic(Theme.Name.Static[I]);
+
+ for I := 0 to High(Theme.Name.Text) do
+ AddText(Theme.Name.Text[I]);
+
+ Interaction := 0;
+end;
+
+procedure TScreenName.onShow;
+var
+ I: integer;
+begin
+ for I := 1 to 6 do
+ Button[I-1].Text[0].Text := Ini.Name[I-1];
+
+ for I := 1 to PlayersPlay do begin
+ Button[I-1].Visible := true;
+ Button[I-1].Selectable := true;
+ end;
+
+ for I := PlayersPlay+1 to 6 do begin
+ Button[I-1].Visible := false;
+ Button[I-1].Selectable := false;
+ end;
+
+end;
+
+procedure TScreenName.SetAnimationProgress(Progress: real);
+var
+ I: integer;
+begin
+ for I := 1 to 6 do
+ Button[I-1].Texture.ScaleW := Progress;
+end;
+
+end.