Subversion Repositories spacemission

Rev

Rev 56 | Rev 66 | 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
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6 daniel-mar 7
  StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
1 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
    ElPanel1: TPanel;
22
    li3a: TLabel;
23
    li1b: TLabel;
24
    li1a: TLabel;
25
    li2b: TLabel;
26
    li2a: TLabel;
27
    li3b: TLabel;
43 daniel-mar 28
    li4: TLabel;
1 daniel-mar 29
    liu: TLabel;
30
    liw: TLabel;
24 daniel-mar 31
    LevelNumber: TSpinEdit;
1 daniel-mar 32
    procedure LoeschenBtnClick(Sender: TObject);
33
    procedure LadenBtnClick(Sender: TObject);
34
    procedure SpeichernBtnClick(Sender: TObject);
35
    procedure LevelListBoxClick(Sender: TObject);
36
    procedure Button4Click(Sender: TObject);
37
    procedure FormShow(Sender: TObject);
38
    procedure DsFancyButton2Click(Sender: TObject);
39
    procedure AbbrechenBtnClick(Sender: TObject);
40
    procedure LevelNameChange(Sender: TObject);
41
    procedure FormHide(Sender: TObject);
40 daniel-mar 42
    procedure FormCreate(Sender: TObject);
51 daniel-mar 43
  private
44
    function GetListBoxSelectedLevelNumber: integer;
1 daniel-mar 45
  public
46
    procedure SearchLevels;
47
  end;
48
 
49
var
50
  SpeicherungForm: TSpeicherungForm;
51
 
52
implementation
53
 
54
uses
14 daniel-mar 55
  Global, LevMain, ComLevelReader;
1 daniel-mar 56
 
57
{$R *.DFM}
58
 
51 daniel-mar 59
resourcestring
60
  SLevelListBox = 'Level %d';
61 daniel-mar 61
  SSelbsterstellt = 'Selbsterstellt';
51 daniel-mar 62
 
1 daniel-mar 63
procedure TSpeicherungForm.SearchLevels;
64
var
65
  i: integer;
61 daniel-mar 66
  fil: TLevelFile;
1 daniel-mar 67
begin
68
  //SpinEdit.Value := 1;
69
  LevelListBox.items.clear;
70
  li1a.visible := false;
71
  li2a.visible := false;
72
  li3a.visible := false;
73
  li1b.visible := false;
74
  li2b.visible := false;
75
  li3b.visible := false;
43 daniel-mar 76
  li4.visible := false;
51 daniel-mar 77
  liu.Visible := false;
1 daniel-mar 78
  liw.visible := true;
79
  LadenBtn.enabled := false;
80
  LoeschenBtn.enabled := false;
40 daniel-mar 81
  for i := 1 to MaxPossibleLevels do
1 daniel-mar 82
  begin
51 daniel-mar 83
    fil := GetLevelFileName(i, false);
61 daniel-mar 84
    if fil.found then
85
    begin
86
      if fil.isUser then
87
        LevelListBox.items.Add(Format(SLevelListBox, [i])+' ('+SSelbsterstellt+')')
88
      else
89
        LevelListBox.items.Add(Format(SLevelListBox, [i]));
90
    end;
1 daniel-mar 91
  end;
92
end;
93
 
94
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
51 daniel-mar 95
var
61 daniel-mar 96
  fil: TLevelFile;
1 daniel-mar 97
begin
28 daniel-mar 98
  if LevelListBox.ItemIndex = -1 then exit;
99
 
100
  if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
1 daniel-mar 101
  begin
102
    li1a.visible := false;
103
    li2a.visible := false;
104
    li3a.visible := false;
105
    li1b.visible := false;
106
    li2b.visible := false;
107
    li3b.visible := false;
43 daniel-mar 108
    li4.visible := false;
1 daniel-mar 109
    liu.visible := false;
110
    liw.visible := true;
111
    LadenBtn.enabled := false;
112
    LoeschenBtn.enabled := false;
51 daniel-mar 113
    fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
61 daniel-mar 114
    if not fil.found then raise Exception.Create('Leveldatei nicht gefunden');
115
    deletefile(fil.fileLocation);
1 daniel-mar 116
    SearchLevels;
117
  end;
118
end;
119
 
120
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
51 daniel-mar 121
var
61 daniel-mar 122
  fil: TLevelFile;
1 daniel-mar 123
begin
28 daniel-mar 124
  if LevelListBox.ItemIndex = -1 then exit;
125
 
30 daniel-mar 126
  if MainForm.LevChanged and (MainForm.LevData.CountEnemies>0) then
1 daniel-mar 127
  begin
28 daniel-mar 128
    if MessageDlg('Neues Level laden und Änderungen verwerfen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
1 daniel-mar 129
  end;
28 daniel-mar 130
 
1 daniel-mar 131
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
132
  {if liu.visible or (LevelListBox.items.count=0) then
133
    exit;}
30 daniel-mar 134
 
1 daniel-mar 135
  MainForm.DestroyLevel;
44 daniel-mar 136
  MainForm.LevData.RasterErzwingen := true;
51 daniel-mar 137
  fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
61 daniel-mar 138
  if not fil.found then raise Exception.Create('Leveldatei nicht gefunden');
139
  MainForm.LevData.LoadFromFile(fil.fileLocation);
30 daniel-mar 140
  MainForm.RefreshFromLevData;
141
  MainForm.LevChanged := false;
1 daniel-mar 142
  MainForm.AnzeigeAct;
143
  close;
144
end;
145
 
146
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
147
begin
27 daniel-mar 148
  if MainForm.LevData.CountEnemies = 0 then
1 daniel-mar 149
  begin
150
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
24 daniel-mar 151
    LevelNumber.SetFocus;
1 daniel-mar 152
    exit;
153
  end;
154
  {for i := 0 to length(LevelName.text) do
155
  begin
156
    if (copy(LevelName.text, i, 1) = '\') or
157
      (copy(LevelName.text, i, 1) = '/') or
158
      (copy(LevelName.text, i, 1) = ':') or
159
      (copy(LevelName.text, i, 1) = '*') or
160
      (copy(LevelName.text, i, 1) = '?') or
161
      (copy(LevelName.text, i, 1) = '"') or
162
      (copy(LevelName.text, i, 1) = '<') or
163
      (copy(LevelName.text, i, 1) = '>') or
164
      (copy(LevelName.text, i, 1) = '|') then
165
    begin
166
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
167
      LevelName.SetFocus;
168
      exit;
169
    end;
170
  end;}
51 daniel-mar 171
  if LevelListBox.items.IndexOf(Format(SLevelListBox, [LevelNumber.Value])) > -1 then
1 daniel-mar 172
  begin
28 daniel-mar 173
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
1 daniel-mar 174
      exit;
175
  end;
15 daniel-mar 176
 
1 daniel-mar 177
  // Speichern
27 daniel-mar 178
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
61 daniel-mar 179
  MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value,true).fileLocation);
15 daniel-mar 180
 
1 daniel-mar 181
  // Nacharbeiten
182
  MainForm.LevChanged := false;
183
  MainForm.AnzeigeAct;
184
  SearchLevels;
185
end;
186
 
187
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
188
var
14 daniel-mar 189
  LevelData: TLevelData;
190
  boss: boolean;
191
  i: Integer;
192
  anzahlEinheiten: integer;
61 daniel-mar 193
  fil: TLevelFile;
1 daniel-mar 194
begin
195
  li1a.visible := false;
196
  li2a.visible := false;
197
  li3a.visible := false;
198
  li1b.visible := false;
199
  li2b.visible := false;
200
  li3b.visible := false;
43 daniel-mar 201
  li4.visible := false;
1 daniel-mar 202
  liu.visible := false;
203
  liw.visible := false;
204
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
205
  begin
206
    ladenbtn.enabled := false;
207
    loeschenbtn.enabled := false;
208
    liw.visible := true;
209
    exit;
210
  end;
51 daniel-mar 211
  LevelNumber.Value := GetListBoxSelectedLevelNumber;
14 daniel-mar 212
 
213
  LevelData := TLevelData.Create;
214
  try
215
    try
44 daniel-mar 216
      LevelData.RasterErzwingen := true;
14 daniel-mar 217
 
51 daniel-mar 218
      fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
61 daniel-mar 219
      if not fil.found then raise Exception.Create('Leveldatei nicht gefunden');
220
      LevelData.LoadFromFile(fil.fileLocation);
51 daniel-mar 221
 
30 daniel-mar 222
      boss := false;
223
      anzahlEinheiten := Length(LevelData.EnemyAdventTable);
224
      for i := 0 to anzahlEinheiten - 1 do
14 daniel-mar 225
      begin
30 daniel-mar 226
        if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
227
        begin
228
          boss := true;
229
        end;
14 daniel-mar 230
      end;
30 daniel-mar 231
 
232
      li1a.visible := true;
233
      li2a.visible := true;
234
      li3a.visible := true;
235
      li1b.visible := true;
236
      li2b.visible := true;
237
      li3b.visible := true;
43 daniel-mar 238
      li4.visible := true;
30 daniel-mar 239
      LadenBtn.enabled := true;
240
      LoeschenBtn.enabled := true;
241
      li1b.caption := inttostr(anzahlEinheiten);
242
      if boss then
243
        li2b.caption := 'Ja'
244
      else
245
        li2b.caption := 'Nein';
246
      li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
43 daniel-mar 247
      li4.Caption := Trim(LevelData.LevelName + ' von ' + LevelData.LevelAuthor);
30 daniel-mar 248
    finally
249
      FreeAndNil(LevelData);
14 daniel-mar 250
    end;
30 daniel-mar 251
  except
252
    liu.visible := true;
253
    LadenBtn.enabled := false;
1 daniel-mar 254
  end;
255
end;
256
 
257
procedure TSpeicherungForm.Button4Click(Sender: TObject);
258
begin
259
  close;
260
end;
261
 
262
procedure TSpeicherungForm.FormShow(Sender: TObject);
263
begin
264
  mainform.dxtimer.enabled := false;
265
  SearchLevels;
266
end;
267
 
51 daniel-mar 268
function TSpeicherungForm.GetListBoxSelectedLevelNumber: integer;
269
var
270
  i: integer;
271
begin
272
  result := -1;
273
  if LevelListBox.itemindex = -1 then exit;
274
  for i := 1 to MaxPossibleLevels do
275
  begin
61 daniel-mar 276
    if (LevelListBox.Items.strings[LevelListBox.itemindex] = Format(SLevelListBox, [i])) or
277
       (LevelListBox.Items.strings[LevelListBox.itemindex] = Format(SLevelListBox, [i])+' ('+SSelbstErstellt+')') then
51 daniel-mar 278
    begin
279
      result := i;
280
      exit;
281
    end;
282
  end;
283
end;
284
 
1 daniel-mar 285
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
286
begin
287
  SearchLevels;
288
end;
289
 
290
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
291
begin
292
  close;
293
end;
294
 
295
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
296
begin
297
  {...}
298
end;
299
 
40 daniel-mar 300
procedure TSpeicherungForm.FormCreate(Sender: TObject);
301
begin
302
  LevelNumber.MinValue := 1;
303
  LevelNumber.MaxValue := MaxPossibleLevels;
304
  LevelNumber.Value := 1;
305
end;
306
 
1 daniel-mar 307
procedure TSpeicherungForm.FormHide(Sender: TObject);
308
begin
309
  mainform.dxtimer.enabled := true;
310
end;
311
 
312
end.
313