Subversion Repositories spacemission

Rev

Rev 27 | Rev 30 | 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;
28
    liu: TLabel;
29
    liw: TLabel;
24 daniel-mar 30
    LevelNumber: TSpinEdit;
1 daniel-mar 31
    procedure LoeschenBtnClick(Sender: TObject);
32
    procedure LadenBtnClick(Sender: TObject);
33
    procedure SpeichernBtnClick(Sender: TObject);
34
    procedure LevelListBoxClick(Sender: TObject);
35
    procedure Button4Click(Sender: TObject);
36
    procedure FormShow(Sender: TObject);
37
    procedure DsFancyButton2Click(Sender: TObject);
38
    procedure AbbrechenBtnClick(Sender: TObject);
39
    procedure LevelNameChange(Sender: TObject);
40
    procedure FormHide(Sender: TObject);
41
  public
42
    procedure SearchLevels;
43
    function RightStr(str: string; count: integer): string;
44
  end;
45
 
46
var
47
  SpeicherungForm: TSpeicherungForm;
48
 
49
implementation
50
 
51
uses
14 daniel-mar 52
  Global, LevMain, ComLevelReader;
1 daniel-mar 53
 
54
{$R *.DFM}
55
 
56
procedure TSpeicherungForm.SearchLevels;
57
var
58
  i: integer;
59
begin
60
  //SpinEdit.Value := 1;
61
  LevelListBox.items.clear;
62
  li1a.visible := false;
63
  li2a.visible := false;
64
  li3a.visible := false;
65
  li1b.visible := false;
66
  li2b.visible := false;
67
  li3b.visible := false;
68
  liw.visible := true;
69
  LadenBtn.enabled := false;
70
  LoeschenBtn.enabled := false;
71
  for i := 1 to 9999 do
72
  begin
17 daniel-mar 73
    if fileexists(GetLevelFileName(i)) then
24 daniel-mar 74
      LevelListBox.items.Add(ChangeFileExt(ExtractFileName(GetLevelFileName(i)),''));
1 daniel-mar 75
  end;
76
end;
77
 
78
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
79
begin
28 daniel-mar 80
  if LevelListBox.ItemIndex = -1 then exit;
81
 
82
  if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
1 daniel-mar 83
  begin
84
    li1a.visible := false;
85
    li2a.visible := false;
86
    li3a.visible := false;
87
    li1b.visible := false;
88
    li2b.visible := false;
89
    li3b.visible := false;
90
    liu.visible := false;
91
    liw.visible := true;
92
    LadenBtn.enabled := false;
93
    LoeschenBtn.enabled := false;
17 daniel-mar 94
    deletefile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
1 daniel-mar 95
      LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
96
    SearchLevels;
97
  end;
98
end;
99
 
100
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
101
var
24 daniel-mar 102
  i: integer;
1 daniel-mar 103
begin
28 daniel-mar 104
  if LevelListBox.ItemIndex = -1 then exit;
105
 
106
  if MainForm.LevChanged then
1 daniel-mar 107
  begin
28 daniel-mar 108
    if MessageDlg('Neues Level laden und Änderungen verwerfen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
1 daniel-mar 109
  end;
28 daniel-mar 110
 
1 daniel-mar 111
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
112
  {if liu.visible or (LevelListBox.items.count=0) then
113
    exit;}
114
  // Vorbereiten
115
  MainForm.DestroyLevel;
116
  MainForm.LevChanged := false;
14 daniel-mar 117
 
27 daniel-mar 118
  MainForm.ScrollBar.Max := MainForm.LevData.LevelEditorLength;
119
  MainForm.LevData.Load(
120
    IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
121
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
122
  for i := 0 to MainForm.LevData.CountEnemies - 1 do
123
  begin
124
    MainForm.EnemyCreateSprite(
125
      MainForm.LevData.EnemyAdventTable[i].x,
126
      MainForm.LevData.EnemyAdventTable[i].y,
127
      MainForm.LevData.EnemyAdventTable[i].enemyType,
128
      MainForm.LevData.EnemyAdventTable[i].lifes
129
    );
1 daniel-mar 130
  end;
27 daniel-mar 131
  MainForm.NumEnemys := MainForm.LevData.CountEnemies;
132
  MainForm.Boss := MainForm.LevData.HasBoss;
133
 
1 daniel-mar 134
  // Nacharbeiten
135
  MainForm.AnzeigeAct;
136
  close;
137
end;
138
 
139
function TSpeicherungForm.RightStr(str: string; count: integer): string;
140
begin
141
  result := copy(str, length(str)-(count-1), count);
142
end;
143
 
144
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
145
begin
27 daniel-mar 146
  if MainForm.LevData.CountEnemies = 0 then
1 daniel-mar 147
  begin
148
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
24 daniel-mar 149
    LevelNumber.SetFocus;
1 daniel-mar 150
    exit;
151
  end;
152
  {for i := 0 to length(LevelName.text) do
153
  begin
154
    if (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) = '?') 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) = '|') then
163
    begin
164
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
165
      LevelName.SetFocus;
166
      exit;
167
    end;
168
  end;}
24 daniel-mar 169
  if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
1 daniel-mar 170
  begin
28 daniel-mar 171
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
1 daniel-mar 172
      exit;
173
  end;
15 daniel-mar 174
 
1 daniel-mar 175
  // Speichern
27 daniel-mar 176
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
177
  MainForm.LevData.Save(GetLevelFileName(LevelNumber.Value));
15 daniel-mar 178
 
1 daniel-mar 179
  // Nacharbeiten
180
  MainForm.LevChanged := false;
181
  MainForm.AnzeigeAct;
182
  SearchLevels;
183
end;
184
 
185
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
186
var
14 daniel-mar 187
  LevelData: TLevelData;
188
  boss: boolean;
189
  i: Integer;
190
  temp: string;
191
  anzahlEinheiten: integer;
1 daniel-mar 192
begin
193
  li1a.visible := false;
194
  li2a.visible := false;
195
  li3a.visible := false;
196
  li1b.visible := false;
197
  li2b.visible := false;
198
  li3b.visible := false;
199
  liu.visible := false;
200
  liw.visible := false;
201
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
202
  begin
203
    ladenbtn.enabled := false;
204
    loeschenbtn.enabled := false;
205
    liw.visible := true;
206
    exit;
207
  end;
208
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
24 daniel-mar 209
  LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
14 daniel-mar 210
 
211
  LevelData := TLevelData.Create;
212
  try
213
    try
17 daniel-mar 214
      LevelData.Load(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
215
        LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
14 daniel-mar 216
    except
217
      liu.visible := true;
218
      LadenBtn.enabled := false;
219
    end;
220
 
221
    boss := false;
222
    anzahlEinheiten := Length(LevelData.EnemyAdventTable);
223
    for i := 0 to anzahlEinheiten - 1 do
224
    begin
225
      if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
226
      begin
227
        boss := true;
228
      end;
229
    end;
230
 
1 daniel-mar 231
    li1a.visible := true;
232
    li2a.visible := true;
233
    li3a.visible := true;
234
    li1b.visible := true;
235
    li2b.visible := true;
236
    li3b.visible := true;
237
    LadenBtn.enabled := true;
238
    LoeschenBtn.enabled := true;
14 daniel-mar 239
    li1b.caption := inttostr(anzahlEinheiten);
240
    if boss then
241
      li2b.caption := 'Ja'
242
    else
243
      li2b.caption := 'Nein';
244
    li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
245
  finally
246
    FreeAndNil(LevelData);
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
 
261
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
262
begin
263
  SearchLevels;
264
end;
265
 
266
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
267
begin
268
  close;
269
end;
270
 
271
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
272
begin
273
  {...}
274
end;
275
 
276
procedure TSpeicherungForm.FormHide(Sender: TObject);
277
begin
278
  mainform.dxtimer.enabled := true;
279
end;
280
 
281
end.
282