Subversion Repositories spacemission

Rev

Rev 6 | Rev 24 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 daniel-mar 1
unit GamSpeicherung;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6 daniel-mar 7
  StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
3 daniel-mar 8
 
9
type
10
  TSpeicherungForm = class(TForm)
11
    Bevel1: TBevel;
12
    LadenBtn: TButton;
13
    LoeschenBtn: TButton;
14
    AktualisierenBtn: TButton;
15
    SpeichernBtn: TButton;
16
    AbbrechenBtn: TButton;
17
    LevelListBox: TListBox;
18
    Label2: TLabel;
19
    Label3: TLabel;
20
    Label1: TLabel;
21
    LevelName: TEdit;
22
    ElPanel1: TPanel;
23
    li4a: TLabel;
24
    li1: TLabel;
25
    li3b: TLabel;
26
    li3a: TLabel;
27
    li4b: TLabel;
28
    liu: TLabel;
29
    liw: TLabel;
30
    li2a: TLabel;
31
    li2b: TLabel;
32
    procedure LoeschenBtnClick(Sender: TObject);
33
    procedure LadenBtnClick(Sender: TObject);
34
    procedure SpeichernBtnClick(Sender: TObject);
35
    procedure LevelListBoxClick(Sender: TObject);
36
    procedure LevelNameChange(Sender: TObject);
37
    procedure Button4Click(Sender: TObject);
38
    procedure FormShow(Sender: TObject);
39
    procedure DsFancyButton2Click(Sender: TObject);
40
    procedure AbbrechenBtnClick(Sender: TObject);
41
    procedure FormHide(Sender: TObject);
42
    procedure LevelListBoxDblClick(Sender: TObject);
43
  public
44
    procedure SearchSaves;
45
  end;
46
 
47
var
48
  SpeicherungForm: TSpeicherungForm;
49
 
50
implementation
51
 
52
uses
15 daniel-mar 53
  Global, GamMain, ComSaveGameReader;
3 daniel-mar 54
 
55
{$R *.DFM}
56
 
57
procedure TSpeicherungForm.SearchSaves;
58
var
59
  sr: TSearchRec;
60
  res: integer;
61
begin
62
  LevelName.text := '';
63
  LevelListBox.items.clear;
64
  li1.visible := false;
65
  li2a.visible := false;
66
  li2b.visible := false;
67
  li3a.visible := false;
68
  li3b.visible := false;
69
  li4a.visible := false;
70
  li4b.visible := false;
71
  liu.visible := false;
72
  liw.visible := true;
73
  li1.caption := 'n/a';
74
  li2b.caption := 'n/a';
75
  li3b.caption := 'n/a';
76
  li4b.caption := 'n/a';
77
  LadenBtn.enabled := false;
78
  LoeschenBtn.enabled := false;
79
  res := FindFirst(fdirectory+'Spielstände\*.sav', 0, sr);
80
  try
81
    while (res = 0) do
82
    begin
83
      if (sr.name <> '.') and (sr.name <> '..') then
84
        LevelListBox.items.Add(copy(sr.Name, 0, length(sr.name)-4));
85
      res := FindNext(sr);
86
    end;
87
  finally
88
    FindClose(sr);
89
  end;
90
end;
91
 
92
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
93
var
94
  Markiert: boolean;
95
  i: integer;
96
begin
97
  Markiert := false;
98
  for i := 0 to LevelListBox.items.Count-1 do
99
  begin
100
    if LevelListBox.Selected[i] then Markiert := true;
101
  end;
102
  if not Markiert then exit;
103
  if MessageDlg('Diesen Spielstand wirklich löschen?',
104
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
105
  begin
106
    li1.visible := false;
107
    li2a.visible := false;
108
    li2b.visible := false;
109
    li3a.visible := false;
110
    li3b.visible := false;
111
    li4a.visible := false;
112
    li4b.visible := false;
113
    liu.visible := false;
114
    liw.visible := false;
115
    li1.caption := 'n/a';
116
    li2b.caption := 'n/a';
117
    li3b.caption := 'n/a';
118
    li4b.caption := 'n/a';
119
    LadenBtn.enabled := false;
120
    LoeschenBtn.enabled := false;
121
    deletefile(FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
122
    searchsaves;
123
  end;
124
end;
125
 
126
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
127
var
128
  Markiert: boolean;
129
  i: integer;
15 daniel-mar 130
  SavGame: TSaveData;
3 daniel-mar 131
begin
132
  Markiert := false;
133
  for i := 0 to LevelListBox.items.Count-1 do
134
  begin
135
    if LevelListBox.Selected[i] then Markiert := true;
136
  end;
137
  if not Markiert then exit;
138
  if LevelListBox.items.count = 0 then
139
  begin
140
    li1.visible := false;
141
    li2a.visible := false;
142
    li2b.visible := false;
143
    li3a.visible := false;
144
    li3b.visible := false;
145
    li4a.visible := false;
146
    li4b.visible := false;
147
    liu.visible := false;
148
    liw.visible := false;
149
    li1.caption := 'n/a';
150
    li2b.caption := 'n/a';
151
    li3b.caption := 'n/a';
152
    li4b.caption := 'n/a';
153
    LadenBtn.enabled := false;
154
    LoeschenBtn.enabled := false;
155
  end;
156
  {if liu.visible or (LevelListBox.items.count=0) then
157
    exit;}
15 daniel-mar 158
  SavGame := TSaveData.Create;
159
  try
160
    SavGame.Load(FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
161
    mainform.FScore := SavGame.FScore;
162
    mainform.FLife := SavGame.FLife;
163
    mainform.FLevel := SavGame.FLevel;
164
    mainform.FGameMode := SavGame.FGameMode;
165
  finally
166
    FreeAndNil(SavGame);
167
  end;
3 daniel-mar 168
  mainform.playsound('SceneMov', false);
169
  mainform.FNextScene := gsNewLevel;
170
  mainform.FCheat := false;
171
  close;
172
end;
173
 
174
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
175
var
15 daniel-mar 176
  SavGame: TSaveData;
3 daniel-mar 177
  i: integer;
178
begin
179
  if Levelname.text = '' then
180
  begin
181
    MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
182
    LevelName.setfocus;
183
    exit;
184
  end;
185
  for i := 0 to length(LevelName.text) do
186
  begin
187
    if (copy(LevelName.text, i, 1) = '\') or
188
      (copy(LevelName.text, i, 1) = '/') or
189
      (copy(LevelName.text, i, 1) = ':') or
190
      (copy(LevelName.text, i, 1) = '*') or
191
      (copy(LevelName.text, i, 1) = '?') or
192
      (copy(LevelName.text, i, 1) = '"') or
193
      (copy(LevelName.text, i, 1) = '<') or
194
      (copy(LevelName.text, i, 1) = '>') or
195
      (copy(LevelName.text, i, 1) = '|') then
196
    begin
197
      MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
198
      LevelName.setfocus;
199
      exit;
200
    end;
201
  end;
202
  if LevelListBox.items.IndexOf(LevelName.text) > -1 then
203
  begin
204
    if MessageDlg('Spielstand ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
205
      exit;
206
  end;
15 daniel-mar 207
 
208
  SavGame := TSaveData.Create;
209
  try
210
    SavGame.FScore := mainform.FScore;
211
    SavGame.FLife := mainform.FLife;
212
    SavGame.FLevel := mainform.FLevel;
213
    SavGame.FGameMode := mainform.FGameMode;
214
    SavGame.Save(FDirectory+'Spielstände\'+LevelName.text+'.sav');
215
  finally
216
    FreeAndNil(SavGame);
217
  end;
218
 
3 daniel-mar 219
  SearchSaves;
220
end;
221
 
222
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
223
var
15 daniel-mar 224
  SavGame: TSaveData;
225
  Punkte, Leben, Level: integer;
226
  Art: TGameMode;
3 daniel-mar 227
begin
228
  ladenbtn.enabled := true;
229
  loeschenbtn.enabled := true;
230
  li1.visible := false;
231
  li2a.visible := false;
232
  li2b.visible := false;
233
  li3a.visible := false;
234
  li3b.visible := false;
235
  li4a.visible := false;
236
  li4b.visible := false;
237
  liu.visible := false;
238
  liw.visible := false;
239
  li1.caption := 'n/a';
240
  li2b.caption := 'n/a';
241
  li3b.caption := 'n/a';
242
  li4b.caption := 'n/a';
243
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
244
  begin
245
    ladenbtn.enabled := false;
246
    loeschenbtn.enabled := false;
247
    liw.visible := true;
248
    exit;
249
  end;
250
  LevelName.Text := LevelListBox.Items.strings[LevelListBox.itemindex];
15 daniel-mar 251
 
252
  SavGame := TSaveData.Create;
253
  try
254
    try
255
      SavGame.Load(FDirectory+'Spielstände\'+LevelListBox.Items.strings[LevelListBox.itemindex]+'.sav');
256
      Punkte := SavGame.FScore;
257
      Leben := SavGame.FLife;
258
      Level := SavGame.FLevel;
259
      Art := SavGame.FGameMode;
260
    except
261
      liu.visible := true;
262
      ladenbtn.enabled := false;
263
      exit;
264
    end;
265
  finally
266
    FreeAndNil(SavGame);
3 daniel-mar 267
  end;
268
  li1.visible := true;
269
  li2a.visible := true;
270
  li2b.visible := true;
271
  li3a.visible := true;
272
  li3b.visible := true;
273
  li4a.visible := true;
274
  li4b.visible := true;
15 daniel-mar 275
  if Art = gmLevels then
3 daniel-mar 276
    li1.caption := 'Das Level ist ein normales Level.'
277
  else
278
    li1.caption := 'Das Level ist ein Zufallslevel.';
279
  li3b.caption := inttostr(Level);
280
  li4b.caption := inttostr(Leben);
281
  li2b.caption := inttostr(Punkte);
282
end;
283
 
284
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
285
begin
286
  //listbox1.Items.indexof('Level '+spinedit1.text);
287
end;
288
 
289
procedure TSpeicherungForm.Button4Click(Sender: TObject);
290
begin
291
  mainform.dxtimer.enabled := not mainform.gamepause.checked;
292
  close;
293
end;
294
 
295
procedure TSpeicherungForm.FormShow(Sender: TObject);
296
begin
297
  mainform.dxtimer.enabled := false;
298
  SearchSaves;
299
  if mainform.FNotSave then
300
  begin
301
    label1.enabled := false;
302
    LevelName.enabled := false;
303
    SpeichernBtn.enabled := false;
304
  end
305
  else
306
  begin
307
    label1.enabled := true;
308
    LevelName.enabled := true;
309
    SpeichernBtn.enabled := true;
310
  end;
311
end;
312
 
313
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
314
begin
315
  SearchSaves;
316
end;
317
 
318
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
319
begin
320
  close;
321
end;
322
 
323
procedure TSpeicherungForm.FormHide(Sender: TObject);
324
begin
325
  if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
326
end;
327
 
328
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
329
begin
330
  LadenBtn.click;
331
end;
332
 
333
end.
334