Subversion Repositories spacemission

Rev

Rev 28 | Rev 40 | 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
begin
28 daniel-mar 102
  if LevelListBox.ItemIndex = -1 then exit;
103
 
30 daniel-mar 104
  if MainForm.LevChanged and (MainForm.LevData.CountEnemies>0) then
1 daniel-mar 105
  begin
28 daniel-mar 106
    if MessageDlg('Neues Level laden und Änderungen verwerfen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
1 daniel-mar 107
  end;
28 daniel-mar 108
 
1 daniel-mar 109
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
110
  {if liu.visible or (LevelListBox.items.count=0) then
111
    exit;}
30 daniel-mar 112
 
1 daniel-mar 113
  MainForm.DestroyLevel;
27 daniel-mar 114
  MainForm.LevData.Load(
115
    IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
116
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
117
 
30 daniel-mar 118
  MainForm.RefreshFromLevData;
119
  MainForm.LevChanged := false;
1 daniel-mar 120
  MainForm.AnzeigeAct;
121
  close;
122
end;
123
 
124
function TSpeicherungForm.RightStr(str: string; count: integer): string;
125
begin
126
  result := copy(str, length(str)-(count-1), count);
127
end;
128
 
129
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
130
begin
27 daniel-mar 131
  if MainForm.LevData.CountEnemies = 0 then
1 daniel-mar 132
  begin
133
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
24 daniel-mar 134
    LevelNumber.SetFocus;
1 daniel-mar 135
    exit;
136
  end;
137
  {for i := 0 to length(LevelName.text) do
138
  begin
139
    if (copy(LevelName.text, i, 1) = '\') or
140
      (copy(LevelName.text, i, 1) = '/') or
141
      (copy(LevelName.text, i, 1) = ':') or
142
      (copy(LevelName.text, i, 1) = '*') or
143
      (copy(LevelName.text, i, 1) = '?') or
144
      (copy(LevelName.text, i, 1) = '"') or
145
      (copy(LevelName.text, i, 1) = '<') or
146
      (copy(LevelName.text, i, 1) = '>') or
147
      (copy(LevelName.text, i, 1) = '|') then
148
    begin
149
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
150
      LevelName.SetFocus;
151
      exit;
152
    end;
153
  end;}
24 daniel-mar 154
  if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
1 daniel-mar 155
  begin
28 daniel-mar 156
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
1 daniel-mar 157
      exit;
158
  end;
15 daniel-mar 159
 
1 daniel-mar 160
  // Speichern
27 daniel-mar 161
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
162
  MainForm.LevData.Save(GetLevelFileName(LevelNumber.Value));
15 daniel-mar 163
 
1 daniel-mar 164
  // Nacharbeiten
165
  MainForm.LevChanged := false;
166
  MainForm.AnzeigeAct;
167
  SearchLevels;
168
end;
169
 
170
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
171
var
14 daniel-mar 172
  LevelData: TLevelData;
173
  boss: boolean;
174
  i: Integer;
175
  temp: string;
176
  anzahlEinheiten: integer;
1 daniel-mar 177
begin
178
  li1a.visible := false;
179
  li2a.visible := false;
180
  li3a.visible := false;
181
  li1b.visible := false;
182
  li2b.visible := false;
183
  li3b.visible := false;
184
  liu.visible := false;
185
  liw.visible := false;
186
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
187
  begin
188
    ladenbtn.enabled := false;
189
    loeschenbtn.enabled := false;
190
    liw.visible := true;
191
    exit;
192
  end;
193
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
24 daniel-mar 194
  LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
14 daniel-mar 195
 
196
  LevelData := TLevelData.Create;
197
  try
198
    try
17 daniel-mar 199
      LevelData.Load(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
200
        LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
14 daniel-mar 201
 
30 daniel-mar 202
      boss := false;
203
      anzahlEinheiten := Length(LevelData.EnemyAdventTable);
204
      for i := 0 to anzahlEinheiten - 1 do
14 daniel-mar 205
      begin
30 daniel-mar 206
        if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
207
        begin
208
          boss := true;
209
        end;
14 daniel-mar 210
      end;
30 daniel-mar 211
 
212
      li1a.visible := true;
213
      li2a.visible := true;
214
      li3a.visible := true;
215
      li1b.visible := true;
216
      li2b.visible := true;
217
      li3b.visible := true;
218
      LadenBtn.enabled := true;
219
      LoeschenBtn.enabled := true;
220
      li1b.caption := inttostr(anzahlEinheiten);
221
      if boss then
222
        li2b.caption := 'Ja'
223
      else
224
        li2b.caption := 'Nein';
225
      li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
226
    finally
227
      FreeAndNil(LevelData);
14 daniel-mar 228
    end;
30 daniel-mar 229
  except
230
    liu.visible := true;
231
    LadenBtn.enabled := false;
1 daniel-mar 232
  end;
233
end;
234
 
235
procedure TSpeicherungForm.Button4Click(Sender: TObject);
236
begin
237
  close;
238
end;
239
 
240
procedure TSpeicherungForm.FormShow(Sender: TObject);
241
begin
242
  mainform.dxtimer.enabled := false;
243
  SearchLevels;
244
end;
245
 
246
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
247
begin
248
  SearchLevels;
249
end;
250
 
251
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
252
begin
253
  close;
254
end;
255
 
256
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
257
begin
258
  {...}
259
end;
260
 
261
procedure TSpeicherungForm.FormHide(Sender: TObject);
262
begin
263
  mainform.dxtimer.enabled := true;
264
end;
265
 
266
end.
267