Subversion Repositories spacemission

Rev

Rev 43 | Rev 51 | 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;
44 daniel-mar 118
  MainForm.LevData.RasterErzwingen := true;
40 daniel-mar 119
  MainForm.LevData.LoadFromFile(
27 daniel-mar 120
    IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
121
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
122
 
30 daniel-mar 123
  MainForm.RefreshFromLevData;
124
  MainForm.LevChanged := false;
1 daniel-mar 125
  MainForm.AnzeigeAct;
126
  close;
127
end;
128
 
129
function TSpeicherungForm.RightStr(str: string; count: integer): string;
130
begin
131
  result := copy(str, length(str)-(count-1), count);
132
end;
133
 
134
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
135
begin
27 daniel-mar 136
  if MainForm.LevData.CountEnemies = 0 then
1 daniel-mar 137
  begin
138
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
24 daniel-mar 139
    LevelNumber.SetFocus;
1 daniel-mar 140
    exit;
141
  end;
142
  {for i := 0 to length(LevelName.text) do
143
  begin
144
    if (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) = '>') or
152
      (copy(LevelName.text, i, 1) = '|') then
153
    begin
154
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
155
      LevelName.SetFocus;
156
      exit;
157
    end;
158
  end;}
24 daniel-mar 159
  if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
1 daniel-mar 160
  begin
28 daniel-mar 161
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
1 daniel-mar 162
      exit;
163
  end;
15 daniel-mar 164
 
1 daniel-mar 165
  // Speichern
27 daniel-mar 166
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
40 daniel-mar 167
  MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value));
15 daniel-mar 168
 
1 daniel-mar 169
  // Nacharbeiten
170
  MainForm.LevChanged := false;
171
  MainForm.AnzeigeAct;
172
  SearchLevels;
173
end;
174
 
175
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
176
var
14 daniel-mar 177
  LevelData: TLevelData;
178
  boss: boolean;
179
  i: Integer;
180
  temp: string;
181
  anzahlEinheiten: integer;
1 daniel-mar 182
begin
183
  li1a.visible := false;
184
  li2a.visible := false;
185
  li3a.visible := false;
186
  li1b.visible := false;
187
  li2b.visible := false;
188
  li3b.visible := false;
43 daniel-mar 189
  li4.visible := false;
1 daniel-mar 190
  liu.visible := false;
191
  liw.visible := false;
192
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
193
  begin
194
    ladenbtn.enabled := false;
195
    loeschenbtn.enabled := false;
196
    liw.visible := true;
197
    exit;
198
  end;
199
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
24 daniel-mar 200
  LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
14 daniel-mar 201
 
202
  LevelData := TLevelData.Create;
203
  try
204
    try
44 daniel-mar 205
      LevelData.RasterErzwingen := true;
40 daniel-mar 206
      LevelData.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
17 daniel-mar 207
        LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
14 daniel-mar 208
 
30 daniel-mar 209
      boss := false;
210
      anzahlEinheiten := Length(LevelData.EnemyAdventTable);
211
      for i := 0 to anzahlEinheiten - 1 do
14 daniel-mar 212
      begin
30 daniel-mar 213
        if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
214
        begin
215
          boss := true;
216
        end;
14 daniel-mar 217
      end;
30 daniel-mar 218
 
219
      li1a.visible := true;
220
      li2a.visible := true;
221
      li3a.visible := true;
222
      li1b.visible := true;
223
      li2b.visible := true;
224
      li3b.visible := true;
43 daniel-mar 225
      li4.visible := true;
30 daniel-mar 226
      LadenBtn.enabled := true;
227
      LoeschenBtn.enabled := true;
228
      li1b.caption := inttostr(anzahlEinheiten);
229
      if boss then
230
        li2b.caption := 'Ja'
231
      else
232
        li2b.caption := 'Nein';
233
      li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
43 daniel-mar 234
      li4.Caption := Trim(LevelData.LevelName + ' von ' + LevelData.LevelAuthor);
30 daniel-mar 235
    finally
236
      FreeAndNil(LevelData);
14 daniel-mar 237
    end;
30 daniel-mar 238
  except
239
    liu.visible := true;
240
    LadenBtn.enabled := false;
1 daniel-mar 241
  end;
242
end;
243
 
244
procedure TSpeicherungForm.Button4Click(Sender: TObject);
245
begin
246
  close;
247
end;
248
 
249
procedure TSpeicherungForm.FormShow(Sender: TObject);
250
begin
251
  mainform.dxtimer.enabled := false;
252
  SearchLevels;
253
end;
254
 
255
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
256
begin
257
  SearchLevels;
258
end;
259
 
260
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
261
begin
262
  close;
263
end;
264
 
265
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
266
begin
267
  {...}
268
end;
269
 
40 daniel-mar 270
procedure TSpeicherungForm.FormCreate(Sender: TObject);
271
begin
272
  LevelNumber.MinValue := 1;
273
  LevelNumber.MaxValue := MaxPossibleLevels;
274
  LevelNumber.Value := 1;
275
end;
276
 
1 daniel-mar 277
procedure TSpeicherungForm.FormHide(Sender: TObject);
278
begin
279
  mainform.dxtimer.enabled := true;
280
end;
281
 
282
end.
283