Subversion Repositories spacemission

Rev

Rev 44 | Rev 56 | 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.   private
  44.     function GetListBoxSelectedLevelNumber: integer;
  45.   public
  46.     procedure SearchLevels;
  47.   end;
  48.  
  49. var
  50.   SpeicherungForm: TSpeicherungForm;
  51.  
  52. implementation
  53.  
  54. uses
  55.   Global, LevMain, ComLevelReader;
  56.  
  57. {$R *.DFM}
  58.  
  59. resourcestring
  60.   SLevelListBox = 'Level %d';
  61.  
  62. procedure TSpeicherungForm.SearchLevels;
  63. var
  64.   i: integer;
  65.   fil: string;
  66. begin
  67.   //SpinEdit.Value := 1;
  68.   LevelListBox.items.clear;
  69.   li1a.visible := false;
  70.   li2a.visible := false;
  71.   li3a.visible := false;
  72.   li1b.visible := false;
  73.   li2b.visible := false;
  74.   li3b.visible := false;
  75.   li4.visible := false;
  76.   liu.Visible := false;
  77.   liw.visible := true;
  78.   LadenBtn.enabled := false;
  79.   LoeschenBtn.enabled := false;
  80.   for i := 1 to MaxPossibleLevels do
  81.   begin
  82.     fil := GetLevelFileName(i, false);
  83.     if fileexists(fil) then LevelListBox.items.Add(Format(SLevelListBox, [i]));
  84.   end;
  85. end;
  86.  
  87. procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
  88. var
  89.   fil: string;
  90. begin
  91.   if LevelListBox.ItemIndex = -1 then exit;
  92.  
  93.   if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
  94.   begin
  95.     li1a.visible := false;
  96.     li2a.visible := false;
  97.     li3a.visible := false;
  98.     li1b.visible := false;
  99.     li2b.visible := false;
  100.     li3b.visible := false;
  101.     li4.visible := false;
  102.     liu.visible := false;
  103.     liw.visible := true;
  104.     LadenBtn.enabled := false;
  105.     LoeschenBtn.enabled := false;
  106.     fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
  107.     if not fileexists(fil) then raise Exception.Create('Leveldatei nicht gefunden');
  108.     deletefile(fil);
  109.     SearchLevels;
  110.   end;
  111. end;
  112.  
  113. procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
  114. var
  115.   fil: string;
  116. begin
  117.   if LevelListBox.ItemIndex = -1 then exit;
  118.  
  119.   if MainForm.LevChanged and (MainForm.LevData.CountEnemies>0) then
  120.   begin
  121.     if MessageDlg('Neues Level laden und Änderungen verwerfen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
  122.   end;
  123.  
  124.   // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
  125.   {if liu.visible or (LevelListBox.items.count=0) then
  126.     exit;}
  127.  
  128.   MainForm.DestroyLevel;
  129.   MainForm.LevData.RasterErzwingen := true;
  130.   fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
  131.   if not fileexists(fil) then raise Exception.Create('Leveldatei nicht gefunden');
  132.   MainForm.LevData.LoadFromFile(fil);
  133.   MainForm.RefreshFromLevData;
  134.   MainForm.LevChanged := false;
  135.   MainForm.AnzeigeAct;
  136.   close;
  137. end;
  138.  
  139. procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
  140. begin
  141.   if MainForm.LevData.CountEnemies = 0 then
  142.   begin
  143.     MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
  144.     LevelNumber.SetFocus;
  145.     exit;
  146.   end;
  147.   {for i := 0 to length(LevelName.text) do
  148.   begin
  149.     if (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) = '*') or
  153.       (copy(LevelName.text, i, 1) = '?') or
  154.       (copy(LevelName.text, i, 1) = '"') or
  155.       (copy(LevelName.text, i, 1) = '<') or
  156.       (copy(LevelName.text, i, 1) = '>') or
  157.       (copy(LevelName.text, i, 1) = '|') then
  158.     begin
  159.       MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
  160.       LevelName.SetFocus;
  161.       exit;
  162.     end;
  163.   end;}
  164.   if LevelListBox.items.IndexOf(Format(SLevelListBox, [LevelNumber.Value])) > -1 then
  165.   begin
  166.     if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
  167.       exit;
  168.   end;
  169.  
  170.   // Speichern
  171.   MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
  172.   MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value,true));
  173.  
  174.   // Nacharbeiten
  175.   MainForm.LevChanged := false;
  176.   MainForm.AnzeigeAct;
  177.   SearchLevels;
  178. end;
  179.  
  180. procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
  181. var
  182.   LevelData: TLevelData;
  183.   boss: boolean;
  184.   i: Integer;
  185.   anzahlEinheiten: integer;
  186.   fil: string;
  187. begin
  188.   li1a.visible := false;
  189.   li2a.visible := false;
  190.   li3a.visible := false;
  191.   li1b.visible := false;
  192.   li2b.visible := false;
  193.   li3b.visible := false;
  194.   li4.visible := false;
  195.   liu.visible := false;
  196.   liw.visible := false;
  197.   if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
  198.   begin
  199.     ladenbtn.enabled := false;
  200.     loeschenbtn.enabled := false;
  201.     liw.visible := true;
  202.     exit;
  203.   end;
  204.   LevelNumber.Value := GetListBoxSelectedLevelNumber;
  205.  
  206.   LevelData := TLevelData.Create;
  207.   try
  208.     try
  209.       LevelData.RasterErzwingen := true;
  210.  
  211.       fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
  212.       if not fileexists(fil) then raise Exception.Create('Leveldatei nicht gefunden');
  213.       LevelData.LoadFromFile(fil);
  214.  
  215.       boss := false;
  216.       anzahlEinheiten := Length(LevelData.EnemyAdventTable);
  217.       for i := 0 to anzahlEinheiten - 1 do
  218.       begin
  219.         if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
  220.         begin
  221.           boss := true;
  222.         end;
  223.       end;
  224.  
  225.       li1a.visible := true;
  226.       li2a.visible := true;
  227.       li3a.visible := true;
  228.       li1b.visible := true;
  229.       li2b.visible := true;
  230.       li3b.visible := true;
  231.       li4.visible := true;
  232.       LadenBtn.enabled := true;
  233.       LoeschenBtn.enabled := true;
  234.       li1b.caption := inttostr(anzahlEinheiten);
  235.       if boss then
  236.         li2b.caption := 'Ja'
  237.       else
  238.         li2b.caption := 'Nein';
  239.       li3b.caption := IntToStr(LevelData.LevelEditorLength) + ' Felder';
  240.       li4.Caption := Trim(LevelData.LevelName + ' von ' + LevelData.LevelAuthor);
  241.     finally
  242.       FreeAndNil(LevelData);
  243.     end;
  244.   except
  245.     liu.visible := true;
  246.     LadenBtn.enabled := false;
  247.   end;
  248. end;
  249.  
  250. procedure TSpeicherungForm.Button4Click(Sender: TObject);
  251. begin
  252.   close;
  253. end;
  254.  
  255. procedure TSpeicherungForm.FormShow(Sender: TObject);
  256. begin
  257.   mainform.dxtimer.enabled := false;
  258.   SearchLevels;
  259. end;
  260.  
  261. function TSpeicherungForm.GetListBoxSelectedLevelNumber: integer;
  262. var
  263.   i: integer;
  264. begin
  265.   result := -1;
  266.   if LevelListBox.itemindex = -1 then exit;
  267.   for i := 1 to MaxPossibleLevels do
  268.   begin
  269.     if LevelListBox.Items.strings[LevelListBox.itemindex] = Format(SLevelListBox, [i]) then
  270.     begin
  271.       result := i;
  272.       exit;
  273.     end;
  274.   end;
  275. end;
  276.  
  277. procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
  278. begin
  279.   SearchLevels;
  280. end;
  281.  
  282. procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
  283. begin
  284.   close;
  285. end;
  286.  
  287. procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
  288. begin
  289.   {...}
  290. end;
  291.  
  292. procedure TSpeicherungForm.FormCreate(Sender: TObject);
  293. begin
  294.   LevelNumber.MinValue := 1;
  295.   LevelNumber.MaxValue := MaxPossibleLevels;
  296.   LevelNumber.Value := 1;
  297. end;
  298.  
  299. procedure TSpeicherungForm.FormHide(Sender: TObject);
  300. begin
  301.   mainform.dxtimer.enabled := true;
  302. end;
  303.  
  304. end.
  305.  
  306.