1,5 → 1,8 |
unit LevSpeicherung; |
|
// TODO: Wenn man lädt, soll er fragen, ob man wirklich die aktuelle arbeit verwerfen will |
// TODO: LevelListBoxDblClick ist gefährlich, denn man weis ja nicht ob der nutzer jetzt laden oder speichern will! |
|
interface |
|
uses |
42,7 → 45,6 |
public |
procedure SearchLevels; |
function RightStr(str: string; count: integer): string; |
function Filter(n: integer; s: string): string; |
end; |
|
var |
110,7 → 112,6 |
var |
Markiert: boolean; |
i: integer; |
LevelData: TLevelData; |
begin |
Markiert := false; |
for i := 0 to LevelListBox.items.Count-1 do |
137,32 → 138,22 |
MainForm.DestroyLevel; |
MainForm.LevChanged := false; |
|
LevelData := TLevelData.Create; |
try |
LevelData.Load(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+ |
MainForm.ScrollBar.Max := MainForm.LevData.LevelEditorLength; |
MainForm.LevData.Load( |
IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+ |
LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev'); |
MainForm.ScrollBar.Max := LevelData.LevelEditorLength; |
MainForm.Enemys.Clear; |
MainForm.NumEnemys := Length(LevelData.EnemyAdventTable); |
for i := 0 to MainForm.NumEnemys-1 do |
for i := 0 to MainForm.LevData.CountEnemies - 1 do |
begin |
MainForm.EnemyAdd( |
LevelData.EnemyAdventTable[i].x, |
LevelData.EnemyAdventTable[i].y, |
Ord(LevelData.EnemyAdventTable[i].enemyType), |
LevelData.EnemyAdventTable[i].lifes |
MainForm.EnemyCreateSprite( |
MainForm.LevData.EnemyAdventTable[i].x, |
MainForm.LevData.EnemyAdventTable[i].y, |
MainForm.LevData.EnemyAdventTable[i].enemyType, |
MainForm.LevData.EnemyAdventTable[i].lifes |
); |
MainForm.EnemyCreate( |
LevelData.EnemyAdventTable[i].x, |
LevelData.EnemyAdventTable[i].y, |
LevelData.EnemyAdventTable[i].enemyType, |
LevelData.EnemyAdventTable[i].lifes |
); |
if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then MainForm.Boss := true; |
end; |
finally |
FreeAndNil(LevelData); |
end; |
MainForm.NumEnemys := MainForm.LevData.CountEnemies; |
MainForm.Boss := MainForm.LevData.HasBoss; |
|
// Nacharbeiten |
MainForm.AnzeigeAct; |
close; |
173,68 → 164,9 |
result := copy(str, length(str)-(count-1), count); |
end; |
|
function TSpeicherungForm.Filter(n: integer; s: string): string; |
var |
i, last: integer; |
start, start2: boolean; |
temp: string; |
begin |
last := 0; |
start := false; |
start2 := false; |
temp := ''; |
if n = 1 then |
begin |
for i := 1 to length(s)+1 do |
begin |
if copy(s, i, 1) = '-' then |
begin |
last := i; |
break; |
end; |
end; |
temp := copy(s, 1, last-1); |
end; |
if n = 2 then |
begin |
for i := 1 to length(s)+1 do |
begin |
if start2 then start := true; |
if copy(s, i, 1) = '-' then start2 := true; |
if (copy(s, i, 1) = ':') and start then break; |
if start then temp := temp + copy(s, i, 1) |
end; |
end; |
if n = 3 then |
begin |
for i := 1 to length(s)+1 do |
begin |
if start2 then start := true; |
if copy(s, i, 1) = ':' then start2 := true; |
if (copy(s, i, 1) = '(') and start then break; |
if start then temp := temp + copy(s, i, 1) |
end; |
end; |
if n = 4 then |
begin |
for i := 1 to length(s)+1 do |
begin |
if start2 then start := true; |
if copy(s, i, 1) = '(' then start2 := true; |
if (copy(s, i, 1) = ')') and start then break; |
if start then temp := temp + copy(s, i, 1) |
end; |
end; |
result := temp; |
end; |
|
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject); |
var |
LevelData: TLevelData; |
i, j: integer; |
puffer: string; |
begin |
if mainform.Enemys.count = 0 then |
if MainForm.LevData.CountEnemies = 0 then |
begin |
MessageDlg('Das Level ist leer!', mtError, [mbOK], 0); |
LevelNumber.SetFocus; |
263,36 → 195,9 |
exit; |
end; |
|
// Sortierung (wichtig) |
for j := 0 to mainform.enemys.Count - 2 do |
begin |
for i := 0 to mainform.enemys.Count - 2 do |
begin |
if strtoint(filter(1, mainform.enemys.Strings[i])) > strtoint(filter(1, mainform.enemys.Strings[i + 1])) then |
begin |
puffer := mainform.enemys.Strings[i]; |
mainform.enemys.Strings[i] := mainform.enemys.Strings[i + 1]; |
mainform.enemys.Strings[i + 1] := puffer; |
end; |
end; |
end; |
|
// Speichern |
LevelData := TLevelData.Create; |
try |
LevelData.LevelEditorLength := MainForm.ScrollBar.Max; |
SetLength(LevelData.EnemyAdventTable, mainform.enemys.count); |
for i := 0 to mainform.enemys.count-1 do |
begin |
LevelData.EnemyAdventTable[i].enemyType := TEnemyType(StrToInt(filter(3, mainform.enemys.Strings[i]))); |
LevelData.EnemyAdventTable[i].x := StrToInt(filter(1, mainform.enemys.Strings[i])); |
LevelData.EnemyAdventTable[i].y := StrToInt(filter(2, mainform.enemys.Strings[i])); |
LevelData.EnemyAdventTable[i].lifes := StrToInt(filter(4, mainform.enemys.Strings[i])); |
end; |
LevelData.Save(GetLevelFileName(LevelNumber.Value)); |
finally |
FreeAndNil(LevelData); |
end; |
MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max; |
MainForm.LevData.Save(GetLevelFileName(LevelNumber.Value)); |
|
// Nacharbeiten |
MainForm.LevChanged := false; |