Subversion Repositories spacemission

Rev

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