Subversion Repositories spacemission

Rev

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