-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFPlaybackMode.pas
157 lines (128 loc) · 3.97 KB
/
FPlaybackMode.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
unit FPlaybackMode;
interface
uses
GameControl,
LemStrings,
LemTypes,
LemNeoLevelPack,
LemmixHotkeys,
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, FileCtrl, ExtCtrls,
SharedGlobals;
type
TFPlaybackMode = class(TForm)
btnBrowse: TButton;
stSelectedFolder: TStaticText;
lblSelectedFolder: TLabel;
rgPlaybackOrder: TRadioGroup;
cbAutoskip: TCheckBox;
lblPlaybackCancelHotkey: TLabel;
stPlaybackCancelHotkey: TStaticText;
btnBeginPlayback: TButton;
btnCancel: TButton;
stPackName: TStaticText;
lblWelcome: TLabel;
procedure btnBrowseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnBeginPlaybackClick(Sender: TObject);
private
fSelectedFolder: string;
fCurrentlySelectedPack: string;
function GetPlaybackModeHotkey: String;
public
procedure UpdatePackNameText;
procedure SetGameParams;
property SelectedFolder: string read fSelectedFolder write fSelectedFolder;
property CurrentlySelectedPack: string read fCurrentlySelectedPack write fCurrentlySelectedPack;
end;
implementation
uses
FSuperLemmixLevelSelect;
{$R *.dfm}
procedure TFPlaybackMode.btnBrowseClick(Sender: TObject);
var
OpenDlg: TOpenDialog;
InitialDir: String;
begin
OpenDlg := TOpenDialog.Create(Self);
try
OpenDlg.Title := 'Select any file in the folder containing replays';
InitialDir := AppPath + SFReplays + MakeSafeForFilename(GameParams.CurrentLevel.Group.ParentBasePack.Name);
if not SysUtils.DirectoryExists(InitialDir) then
InitialDir := AppPath + SFReplays;
OpenDlg.InitialDir := InitialDir;
OpenDlg.Filter := 'SuperLemmix Replay (*.nxrp)|*.nxrp';
OpenDlg.Options := [ofFileMustExist, ofHideReadOnly, ofEnableSizing, ofPathMustExist];
if OpenDlg.Execute then
begin
fSelectedFolder := ExtractFilePath(OpenDlg.FileName);
if SysUtils.DirectoryExists(fSelectedFolder) then
begin
SetCurrentDir(fSelectedFolder);
stSelectedFolder.Caption := ExtractFileName(ExcludeTrailingPathDelimiter(fSelectedFolder));
end else
ShowMessage('The selected folder path is invalid.');
end;
finally
OpenDlg.Free;
end;
end;
procedure TFPlaybackMode.UpdatePackNameText;
var
Pack: String;
begin
Pack := CurrentlySelectedPack;
if Pack <> '' then
stPackName.Caption := Pack
else
stPackName.Caption := 'Playback Mode';
end;
function TFPlaybackMode.GetPlaybackModeHotkey: String;
var
Key: TLemmixHotkeyAction;
ThisKey: TLemmixHotkey;
KeyNames: TKeyNameArray;
n: Integer;
begin
Result := '';
Key := lka_CancelPlayback;
KeyNames := TLemmixHotkeyManager.GetKeyNames(True);
for n := 0 to MAX_KEY do
begin
ThisKey := GameParams.Hotkeys.CheckKeyEffect(n);
if ThisKey.Action <> Key then Continue;
Result := KeyNames[n];
end;
end;
procedure TFPlaybackMode.SetGameParams;
begin
GameParams.AutoSkipPreviewPostview := cbAutoSkip.Checked;
if (rgPlaybackOrder.ItemIndex >= Ord(Low(TPlaybackOrder)))
and (rgPlaybackOrder.ItemIndex <= Ord(High(TPlaybackOrder))) then
GameParams.PlaybackOrder := TPlaybackOrder(rgPlaybackOrder.ItemIndex);
end;
procedure TFPlaybackMode.btnBeginPlaybackClick(Sender: TObject);
begin
if fSelectedFolder = '' then
begin
ShowMessage('No replays selected. Please choose a folder of replays to begin Playback Mode.');
ModalResult := mrNone;
end;
end;
procedure TFPlaybackMode.FormCreate(Sender: TObject);
begin
// Set options and clear lists
rgPlaybackOrder.ItemIndex := Ord(GameParams.PlaybackOrder);
cbAutoSkip.Checked := GameParams.AutoSkipPreviewPostview;
GameParams.PlaybackList.Clear;
GameParams.UnmatchedList.Clear;
GameParams.ReplayVerifyList.Clear;
// Show currently-assigned Playback Mode hotkey
stPlaybackCancelHotkey.Caption := GetPlaybackModeHotkey;
end;
procedure TFPlaybackMode.FormDestroy(Sender: TObject);
begin
SetGameParams;
end;
end.