Subversion Repositories spacemission

Rev

Rev 40 | Rev 44 | 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.LoadFromFile(
  119.     IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
  120.     LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
  121.  
  122.   MainForm.RefreshFromLevData;
  123.   MainForm.LevChanged := false;
  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
  135.   if MainForm.LevData.CountEnemies = 0 then
  136.   begin
  137.     MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
  138.     LevelNumber.SetFocus;
  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;}
  158.   if LevelListBox.items.IndexOf('Level ' + inttostr(LevelNumber.Value)) > -1 then
  159.   begin
  160.     if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
  161.       exit;
  162.   end;
  163.  
  164.   // Speichern
  165.   MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
  166.   MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value));
  167.  
  168.   // Nacharbeiten
  169.   MainForm.LevChanged := false;
  170.   MainForm.AnzeigeAct;
  171.   SearchLevels;
  172. end;
  173.  
  174. procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
  175. var
  176.   LevelData: TLevelData;
  177.   boss: boolean;
  178.   i: Integer;
  179.   temp: string;
  180.   anzahlEinheiten: integer;
  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;
  188.   li4.visible := false;
  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];
  199.   LevelNumber.Value := strtoint(RightStr(temp, length(temp)-Length('Level ')));
  200.  
  201.   LevelData := TLevelData.Create;
  202.   try
  203.     try
  204.       LevelData.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(GetLevelFileName(1)))+
  205.         LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
  206.  
  207.       boss := false;
  208.       anzahlEinheiten := Length(LevelData.EnemyAdventTable);
  209.       for i := 0 to anzahlEinheiten - 1 do
  210.       begin
  211.         if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
  212.         begin
  213.           boss := true;
  214.         end;
  215.       end;
  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;
  223.       li4.visible := true;
  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';
  232.       li4.Caption := Trim(LevelData.LevelName + ' von ' + LevelData.LevelAuthor);
  233.     finally
  234.       FreeAndNil(LevelData);
  235.     end;
  236.   except
  237.     liu.visible := true;
  238.     LadenBtn.enabled := false;
  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.  
  268. procedure TSpeicherungForm.FormCreate(Sender: TObject);
  269. begin
  270.   LevelNumber.MinValue := 1;
  271.   LevelNumber.MaxValue := MaxPossibleLevels;
  272.   LevelNumber.Value := 1;
  273. end;
  274.  
  275. procedure TSpeicherungForm.FormHide(Sender: TObject);
  276. begin
  277.   mainform.dxtimer.enabled := true;
  278. end;
  279.  
  280. end.
  281.  
  282.