Subversion Repositories spacemission

Rev

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

Rev Author Line No. Line
1 daniel-mar 1
unit LevSpeicherung;
2
 
27 daniel-mar 3
// TODO: Wenn man lädt, soll er fragen, ob man wirklich die aktuelle arbeit verwerfen will
4
// TODO: LevelListBoxDblClick ist gefährlich, denn man weis ja nicht ob der nutzer jetzt laden oder speichern will!
5
 
1 daniel-mar 6
interface
7
 
8
uses
9
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6 daniel-mar 10
  StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
1 daniel-mar 11
 
12
type
13
  TSpeicherungForm = class(TForm)
14
    Bevel1: TBevel;
15
    LadenBtn: TButton;                      
16
    LoeschenBtn: TButton;
17
    AktualisierenBtn: TButton;
18
    SpeichernBtn: TButton;
19
    AbbrechenBtn: TButton;
20
    LevelListBox: TListBox;
21
    Label2: TLabel;
22
    Label3: TLabel;
23
    Label1: TLabel;
24
    ElPanel1: TPanel;
25
    li3a: TLabel;
26
    li1b: TLabel;
27
    li1a: TLabel;
28
    li2b: TLabel;
29
    li2a: TLabel;
30
    li3b: TLabel;
31
    liu: TLabel;
32
    liw: TLabel;
24 daniel-mar 33
    LevelNumber: TSpinEdit;
1 daniel-mar 34
    procedure LoeschenBtnClick(Sender: TObject);
35
    procedure LadenBtnClick(Sender: TObject);
36
    procedure SpeichernBtnClick(Sender: TObject);
37
    procedure LevelListBoxClick(Sender: TObject);
38
    procedure Button4Click(Sender: TObject);
39
    procedure FormShow(Sender: TObject);
40
    procedure DsFancyButton2Click(Sender: TObject);
41
    procedure AbbrechenBtnClick(Sender: TObject);
42
    procedure LevelNameChange(Sender: TObject);
43
    procedure LevelListBoxDblClick(Sender: TObject);
44
    procedure FormHide(Sender: TObject);
45
  public
46
    procedure SearchLevels;
47
    function RightStr(str: string; count: integer): string;
48
  end;
49
 
50
var
51
  SpeicherungForm: TSpeicherungForm;
52
 
53
implementation
54
 
55
uses
14 daniel-mar 56
  Global, LevMain, ComLevelReader;
1 daniel-mar 57
 
58
{$R *.DFM}
59
 
60
procedure TSpeicherungForm.SearchLevels;
61
var
62
  i: integer;
63
begin
64
  //SpinEdit.Value := 1;
65
  LevelListBox.items.clear;
66
  li1a.visible := false;
67
  li2a.visible := false;
68
  li3a.visible := false;
69
  li1b.visible := false;
70
  li2b.visible := false;
71
  li3b.visible := false;
72
  liw.visible := true;
73
  LadenBtn.enabled := false;
74
  LoeschenBtn.enabled := false;
75
  for i := 1 to 9999 do
76
  begin
17 daniel-mar 77
    if fileexists(GetLevelFileName(i)) then
24 daniel-mar 78
      LevelListBox.items.Add(ChangeFileExt(ExtractFileName(GetLevelFileName(i)),''));
1 daniel-mar 79
  end;
80
end;
81
 
82
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
83
var
84
  Markiert: boolean;
85
  i: integer;
86
begin
87
  Markiert := false;
88
  for i := 0 to LevelListBox.items.Count-1 do
89
  begin
90
    if LevelListBox.Selected[i] then Markiert := true;
91
  end;
92
  if not Markiert then exit;
93
  if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
94
  begin
95
    li1a.visible := false;
96
    li2a.visible := false;
97
    li3a.visible := false;
98
    li1b.visible := false;
99
    li2b.visible := false;
100
    li3b.visible := false;
101
    liu.visible := false;
102
    liw.visible := true;
103
    LadenBtn.enabled := false;
104
    LoeschenBtn.enabled := false;
17 daniel-mar 105
    deletefile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
1 daniel-mar 106
      LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
107
    SearchLevels;
108
  end;
109
end;
110
 
111
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
112
var
113
  Markiert: boolean;
24 daniel-mar 114
  i: integer;
1 daniel-mar 115
begin
116
  Markiert := false;
117
  for i := 0 to LevelListBox.items.Count-1 do
118
  begin
119
    if LevelListBox.Selected[i] then Markiert := true;
120
  end;
121
  if not Markiert then exit;
122
  if LevelListBox.items.count = 0 then
123
  begin
124
    li1a.visible := false;
125
    li2a.visible := false;
126
    li3a.visible := false;
127
    li1b.visible := false;
128
    li2b.visible := false;
129
    li3b.visible := false;
130
    liw.visible := true;
131
    LadenBtn.enabled := false;
132
    LoeschenBtn.enabled := false;
133
  end;
134
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
135
  {if liu.visible or (LevelListBox.items.count=0) then
136
    exit;}
137
  // Vorbereiten
138
  MainForm.DestroyLevel;
139
  MainForm.LevChanged := false;
14 daniel-mar 140
 
27 daniel-mar 141
  MainForm.ScrollBar.Max := MainForm.LevData.LevelEditorLength;
142
  MainForm.LevData.Load(
143
    IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
144
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
145
  for i := 0 to MainForm.LevData.CountEnemies - 1 do
146
  begin
147
    MainForm.EnemyCreateSprite(
148
      MainForm.LevData.EnemyAdventTable[i].x,
149
      MainForm.LevData.EnemyAdventTable[i].y,
150
      MainForm.LevData.EnemyAdventTable[i].enemyType,
151
      MainForm.LevData.EnemyAdventTable[i].lifes
152
    );
1 daniel-mar 153
  end;
27 daniel-mar 154
  MainForm.NumEnemys := MainForm.LevData.CountEnemies;
155
  MainForm.Boss := MainForm.LevData.HasBoss;
156
 
1 daniel-mar 157
  // Nacharbeiten
158
  MainForm.AnzeigeAct;
159
  close;
160
end;
161
 
162
function TSpeicherungForm.RightStr(str: string; count: integer): string;
163
begin
164
  result := copy(str, length(str)-(count-1), count);
165
end;
166
 
167
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
168
begin
27 daniel-mar 169
  if MainForm.LevData.CountEnemies = 0 then
1 daniel-mar 170
  begin
171
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
24 daniel-mar 172
    LevelNumber.SetFocus;
1 daniel-mar 173
    exit;
174
  end;
175
  {for i := 0 to length(LevelName.text) do
176
  begin
177
    if (copy(LevelName.text, i, 1) = '\') or
178
      (copy(LevelName.text, i, 1) = '/') or
179
      (copy(LevelName.text, i, 1) = ':') or
180
      (copy(LevelName.text, i, 1) = '*') or
181
      (copy(LevelName.text, i, 1) = '?') or
182
      (copy(LevelName.text, i, 1) = '"') or
183
      (copy(LevelName.text, i, 1) = '<') or
184
      (copy(LevelName.text, i, 1) = '>') or
185
      (copy(LevelName.text, i, 1) = '|') then
186
    begin
187
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
188
      LevelName.SetFocus;
189
      exit;
190
    end;
191
  end;}
24 daniel-mar 192
  if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
1 daniel-mar 193
  begin
194
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
195
      exit;
196
  end;
15 daniel-mar 197
 
1 daniel-mar 198
  // Speichern
27 daniel-mar 199
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
200
  MainForm.LevData.Save(GetLevelFileName(LevelNumber.Value));
15 daniel-mar 201
 
1 daniel-mar 202
  // Nacharbeiten
203
  MainForm.LevChanged := false;
204
  MainForm.AnzeigeAct;
205
  SearchLevels;
206
end;
207
 
208
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
209
var
14 daniel-mar 210
  LevelData: TLevelData;
211
  boss: boolean;
212
  i: Integer;
213
  temp: string;
214
  anzahlEinheiten: integer;
1 daniel-mar 215
begin
216
  li1a.visible := false;
217
  li2a.visible := false;
218
  li3a.visible := false;
219
  li1b.visible := false;
220
  li2b.visible := false;
221
  li3b.visible := false;
222
  liu.visible := false;
223
  liw.visible := false;
224
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
225
  begin
226
    ladenbtn.enabled := false;
227
    loeschenbtn.enabled := false;
228
    liw.visible := true;
229
    exit;
230
  end;
231
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
24 daniel-mar 232
  LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
14 daniel-mar 233
 
234
  LevelData := TLevelData.Create;
235
  try
236
    try
17 daniel-mar 237
      LevelData.Load(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
238
        LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
14 daniel-mar 239
    except
240
      liu.visible := true;
241
      LadenBtn.enabled := false;
242
    end;
243
 
244
    boss := false;
245
    anzahlEinheiten := Length(LevelData.EnemyAdventTable);
246
    for i := 0 to anzahlEinheiten - 1 do
247
    begin
248
      if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
249
      begin
250
        boss := true;
251
      end;
252
    end;
253
 
1 daniel-mar 254
    li1a.visible := true;
255
    li2a.visible := true;
256
    li3a.visible := true;
257
    li1b.visible := true;
258
    li2b.visible := true;
259
    li3b.visible := true;
260
    LadenBtn.enabled := true;
261
    LoeschenBtn.enabled := true;
14 daniel-mar 262
    li1b.caption := inttostr(anzahlEinheiten);
263
    if boss then
264
      li2b.caption := 'Ja'
265
    else
266
      li2b.caption := 'Nein';
267
    li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
268
  finally
269
    FreeAndNil(LevelData);
1 daniel-mar 270
  end;
271
end;
272
 
273
procedure TSpeicherungForm.Button4Click(Sender: TObject);
274
begin
275
  close;
276
end;
277
 
278
procedure TSpeicherungForm.FormShow(Sender: TObject);
279
begin
280
  mainform.dxtimer.enabled := false;
281
  SearchLevels;
282
end;
283
 
284
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
285
begin
286
  SearchLevels;
287
end;
288
 
289
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
290
begin
291
  close;
292
end;
293
 
294
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
295
begin
296
  {...}
297
end;
298
 
299
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
300
begin
301
  LadenBtn.click;
302
end;
303
 
304
procedure TSpeicherungForm.FormHide(Sender: TObject);
305
begin
306
  mainform.dxtimer.enabled := true;
307
end;
308
 
309
end.
310