Subversion Repositories spacemission

Rev

Rev 24 | Rev 28 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24 Rev 27
Line 1... Line 1...
1
unit LevSpeicherung;
1
unit LevSpeicherung;
2
 
2
 
-
 
3
// TODO: Wenn man lädt, soll er fragen, ob man wirklich die aktuelle arbeit verwerfen will
-
 
4
// TODO: LevelListBoxDblClick ist gefährlich, denn man weis ja nicht ob der nutzer jetzt laden oder speichern will!
-
 
5
 
3
interface
6
interface
4
 
7
 
5
uses
8
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
9
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7
  StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
10
  StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
Line 40... Line 43...
40
    procedure LevelListBoxDblClick(Sender: TObject);
43
    procedure LevelListBoxDblClick(Sender: TObject);
41
    procedure FormHide(Sender: TObject);
44
    procedure FormHide(Sender: TObject);
42
  public
45
  public
43
    procedure SearchLevels;
46
    procedure SearchLevels;
44
    function RightStr(str: string; count: integer): string;
47
    function RightStr(str: string; count: integer): string;
45
    function Filter(n: integer; s: string): string;
-
 
46
  end;
48
  end;
47
 
49
 
48
var
50
var
49
  SpeicherungForm: TSpeicherungForm;
51
  SpeicherungForm: TSpeicherungForm;
50
 
52
 
Line 108... Line 110...
108
 
110
 
109
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
111
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
110
var
112
var
111
  Markiert: boolean;
113
  Markiert: boolean;
112
  i: integer;
114
  i: integer;
113
  LevelData: TLevelData;
-
 
114
begin
115
begin
115
  Markiert := false;
116
  Markiert := false;
116
  for i := 0 to LevelListBox.items.Count-1 do
117
  for i := 0 to LevelListBox.items.Count-1 do
117
  begin
118
  begin
118
    if LevelListBox.Selected[i] then Markiert := true;
119
    if LevelListBox.Selected[i] then Markiert := true;
Line 135... Line 136...
135
    exit;}
136
    exit;}
136
  // Vorbereiten
137
  // Vorbereiten
137
  MainForm.DestroyLevel;
138
  MainForm.DestroyLevel;
138
  MainForm.LevChanged := false;
139
  MainForm.LevChanged := false;
139
 
140
 
140
  LevelData := TLevelData.Create;
141
  MainForm.ScrollBar.Max := MainForm.LevData.LevelEditorLength;
141
  try
142
  MainForm.LevData.Load(
142
    LevelData.Load(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
143
    IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
143
      LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
144
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
144
    MainForm.ScrollBar.Max := LevelData.LevelEditorLength;
-
 
145
    MainForm.Enemys.Clear;
-
 
146
    MainForm.NumEnemys := Length(LevelData.EnemyAdventTable);
-
 
147
    for i := 0 to MainForm.NumEnemys-1 do
145
  for i := 0 to MainForm.LevData.CountEnemies - 1 do
148
    begin
146
  begin
149
      MainForm.EnemyAdd(
-
 
150
        LevelData.EnemyAdventTable[i].x,
-
 
151
        LevelData.EnemyAdventTable[i].y,
-
 
152
        Ord(LevelData.EnemyAdventTable[i].enemyType),
-
 
153
        LevelData.EnemyAdventTable[i].lifes
-
 
154
      );
-
 
155
      MainForm.EnemyCreate(
147
    MainForm.EnemyCreateSprite(
156
        LevelData.EnemyAdventTable[i].x,
148
      MainForm.LevData.EnemyAdventTable[i].x,
157
        LevelData.EnemyAdventTable[i].y,
149
      MainForm.LevData.EnemyAdventTable[i].y,
158
        LevelData.EnemyAdventTable[i].enemyType,
150
      MainForm.LevData.EnemyAdventTable[i].enemyType,
159
        LevelData.EnemyAdventTable[i].lifes
151
      MainForm.LevData.EnemyAdventTable[i].lifes
160
      );
152
    );
161
      if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then MainForm.Boss := true;
-
 
162
    end;
-
 
163
  finally
-
 
164
    FreeAndNil(LevelData);
-
 
165
  end;
153
  end;
-
 
154
  MainForm.NumEnemys := MainForm.LevData.CountEnemies;
-
 
155
  MainForm.Boss := MainForm.LevData.HasBoss;
-
 
156
 
166
  // Nacharbeiten
157
  // Nacharbeiten
167
  MainForm.AnzeigeAct;
158
  MainForm.AnzeigeAct;
168
  close;
159
  close;
169
end;
160
end;
170
 
161
 
171
function TSpeicherungForm.RightStr(str: string; count: integer): string;
162
function TSpeicherungForm.RightStr(str: string; count: integer): string;
172
begin
163
begin
173
  result := copy(str, length(str)-(count-1), count);
164
  result := copy(str, length(str)-(count-1), count);
174
end;
165
end;
175
 
166
 
176
function TSpeicherungForm.Filter(n: integer; s: string): string;
-
 
177
var
-
 
178
  i, last: integer;
-
 
179
  start, start2: boolean;
-
 
180
  temp: string;
-
 
181
begin
-
 
182
  last := 0;
-
 
183
  start := false;
-
 
184
  start2 := false;
-
 
185
  temp := '';
-
 
186
  if n = 1 then
-
 
187
  begin
-
 
188
    for i := 1 to length(s)+1 do
-
 
189
    begin
-
 
190
      if copy(s, i, 1) = '-' then
-
 
191
      begin
-
 
192
        last := i;
-
 
193
        break;
-
 
194
      end;
-
 
195
    end;
-
 
196
    temp := copy(s, 1, last-1);
-
 
197
  end;
-
 
198
  if n = 2 then
-
 
199
  begin
-
 
200
    for i := 1 to length(s)+1 do
-
 
201
    begin
-
 
202
      if start2 then start := true;
-
 
203
      if copy(s, i, 1) = '-' then start2 := true;
-
 
204
      if (copy(s, i, 1) = ':') and start then break;
-
 
205
      if start then temp := temp + copy(s, i, 1)
-
 
206
    end;
-
 
207
  end;
-
 
208
  if n = 3 then
-
 
209
  begin
-
 
210
    for i := 1 to length(s)+1 do
-
 
211
    begin
-
 
212
      if start2 then start := true;
-
 
213
      if copy(s, i, 1) = ':' then start2 := true;
-
 
214
      if (copy(s, i, 1) = '(') and start then break;
-
 
215
      if start then temp := temp + copy(s, i, 1)
-
 
216
    end;
-
 
217
  end;
-
 
218
  if n = 4 then
-
 
219
  begin
-
 
220
    for i := 1 to length(s)+1 do
-
 
221
    begin
-
 
222
      if start2 then start := true;
-
 
223
      if copy(s, i, 1) = '(' then start2 := true;
-
 
224
      if (copy(s, i, 1) = ')') and start then break;
-
 
225
      if start then temp := temp + copy(s, i, 1)
-
 
226
    end;
-
 
227
  end;
-
 
228
  result := temp;
-
 
229
end;
-
 
230
 
-
 
231
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
167
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
232
var
-
 
233
  LevelData: TLevelData;
-
 
234
  i, j: integer;
-
 
235
  puffer: string;
-
 
236
begin
168
begin
237
  if mainform.Enemys.count = 0 then
169
  if MainForm.LevData.CountEnemies = 0 then
238
  begin
170
  begin
239
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
171
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
240
    LevelNumber.SetFocus;
172
    LevelNumber.SetFocus;
241
    exit;
173
    exit;
242
  end;
174
  end;
Line 261... Line 193...
261
  begin
193
  begin
262
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
194
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
263
      exit;
195
      exit;
264
  end;
196
  end;
265
 
197
 
266
  // Sortierung (wichtig)
-
 
267
  for j := 0 to mainform.enemys.Count - 2 do
-
 
268
  begin
-
 
269
    for i := 0 to mainform.enemys.Count - 2 do
-
 
270
    begin
-
 
271
      if strtoint(filter(1, mainform.enemys.Strings[i])) > strtoint(filter(1, mainform.enemys.Strings[i + 1])) then
-
 
272
      begin
-
 
273
        puffer := mainform.enemys.Strings[i];
-
 
274
        mainform.enemys.Strings[i] := mainform.enemys.Strings[i + 1];
-
 
275
        mainform.enemys.Strings[i + 1] := puffer;
-
 
276
      end;
-
 
277
    end;
-
 
278
  end;
-
 
279
 
-
 
280
  // Speichern
198
  // Speichern
281
  LevelData := TLevelData.Create;
-
 
282
  try
-
 
283
    LevelData.LevelEditorLength := MainForm.ScrollBar.Max;
199
  MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
284
    SetLength(LevelData.EnemyAdventTable, mainform.enemys.count);
-
 
285
    for i := 0 to mainform.enemys.count-1 do
-
 
286
    begin
-
 
287
      LevelData.EnemyAdventTable[i].enemyType := TEnemyType(StrToInt(filter(3, mainform.enemys.Strings[i])));
-
 
288
      LevelData.EnemyAdventTable[i].x := StrToInt(filter(1, mainform.enemys.Strings[i]));
-
 
289
      LevelData.EnemyAdventTable[i].y := StrToInt(filter(2, mainform.enemys.Strings[i]));
-
 
290
      LevelData.EnemyAdventTable[i].lifes := StrToInt(filter(4, mainform.enemys.Strings[i]));
-
 
291
    end;
-
 
292
    LevelData.Save(GetLevelFileName(LevelNumber.Value));
200
  MainForm.LevData.Save(GetLevelFileName(LevelNumber.Value));
293
  finally
-
 
294
    FreeAndNil(LevelData);
-
 
295
  end;
-
 
296
 
201
 
297
  // Nacharbeiten
202
  // Nacharbeiten
298
  MainForm.LevChanged := false;
203
  MainForm.LevChanged := false;
299
  MainForm.AnzeigeAct;
204
  MainForm.AnzeigeAct;
300
  SearchLevels;
205
  SearchLevels;