Subversion Repositories spacemission

Rev

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