Subversion Repositories spacemission

Rev

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