Subversion Repositories spacemission

Rev

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