Subversion Repositories spacemission

Rev

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