Subversion Repositories spacemission

Rev

Rev 43 | Rev 51 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit LevSpeicherung;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
  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.     li4: TLabel;
  29.     liu: TLabel;
  30.     liw: TLabel;
  31.     LevelNumber: TSpinEdit;
  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);
  42.     procedure FormCreate(Sender: TObject);
  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
  54.   Global, LevMain, ComLevelReader;
  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;
  70.   li4.visible := false;
  71.   liw.visible := true;
  72.   LadenBtn.enabled := false;
  73.   LoeschenBtn.enabled := false;
  74.   for i := 1 to MaxPossibleLevels do
  75.   begin
  76.     if fileexists(GetLevelFileName(i)) then
  77.       LevelListBox.items.Add(ChangeFileExt(ExtractFileName(GetLevelFileName(i)),''));
  78.   end;
  79. end;
  80.  
  81. procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
  82. begin
  83.   if LevelListBox.ItemIndex = -1 then exit;
  84.  
  85.   if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
  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;
  93.     li4.visible := false;
  94.     liu.visible := false;
  95.     liw.visible := true;
  96.     LadenBtn.enabled := false;
  97.     LoeschenBtn.enabled := false;
  98.     deletefile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
  99.       LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
  100.     SearchLevels;
  101.   end;
  102. end;
  103.  
  104. procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
  105. begin
  106.   if LevelListBox.ItemIndex = -1 then exit;
  107.  
  108.   if MainForm.LevChanged and (MainForm.LevData.CountEnemies>0) then
  109.   begin
  110.     if MessageDlg('Neues Level laden und Änderungen verwerfen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
  111.   end;
  112.  
  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;}
  116.  
  117.   MainForm.DestroyLevel;
  118.   MainForm.LevData.RasterErzwingen := true;
  119.   MainForm.LevData.LoadFromFile(
  120.     IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
  121.     LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
  122.  
  123.   MainForm.RefreshFromLevData;
  124.   MainForm.LevChanged := false;
  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
  136.   if MainForm.LevData.CountEnemies = 0 then
  137.   begin
  138.     MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
  139.     LevelNumber.SetFocus;
  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;}
  159.   if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
  160.   begin
  161.     if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
  162.       exit;
  163.   end;
  164.  
  165.   // Speichern
  166.   MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
  167.   MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value));
  168.  
  169.   // Nacharbeiten
  170.   MainForm.LevChanged := false;
  171.   MainForm.AnzeigeAct;
  172.   SearchLevels;
  173. end;
  174.  
  175. procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
  176. var
  177.   LevelData: TLevelData;
  178.   boss: boolean;
  179.   i: Integer;
  180.   temp: string;
  181.   anzahlEinheiten: integer;
  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;
  189.   li4.visible := false;
  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];
  200.   LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
  201.  
  202.   LevelData := TLevelData.Create;
  203.   try
  204.     try
  205.       LevelData.RasterErzwingen := true;
  206.       LevelData.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
  207.         LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
  208.  
  209.       boss := false;
  210.       anzahlEinheiten := Length(LevelData.EnemyAdventTable);
  211.       for i := 0 to anzahlEinheiten - 1 do
  212.       begin
  213.         if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
  214.         begin
  215.           boss := true;
  216.         end;
  217.       end;
  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;
  225.       li4.visible := true;
  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';
  234.       li4.Caption := Trim(LevelData.LevelName + ' von ' + LevelData.LevelAuthor);
  235.     finally
  236.       FreeAndNil(LevelData);
  237.     end;
  238.   except
  239.     liu.visible := true;
  240.     LadenBtn.enabled := false;
  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.  
  270. procedure TSpeicherungForm.FormCreate(Sender: TObject);
  271. begin
  272.   LevelNumber.MinValue := 1;
  273.   LevelNumber.MaxValue := MaxPossibleLevels;
  274.   LevelNumber.Value := 1;
  275. end;
  276.  
  277. procedure TSpeicherungForm.FormHide(Sender: TObject);
  278. begin
  279.   mainform.dxtimer.enabled := true;
  280. end;
  281.  
  282. end.
  283.  
  284.