Subversion Repositories jumper

Compare Revisions

Regard whitespace Rev HEAD → Rev 1

/trunk/Choice.pas
4,8 → 4,7
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, ComCtrls, Menus, ExtCtrls, ImageList,
LevelFunctions;
Dialogs, StdCtrls, ImgList, ComCtrls, Menus, ExtCtrls;
 
type
TLevelChoice = class(TForm)
23,12 → 22,13
procedure CancelBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure LevelListClick(Sender: TObject);
procedure LevelListChange(Sender: TObject; Item: TListItem; Change: TItemChange);
procedure LevelListChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure PRefreshListClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure RefreshList;
procedure DrawLevelPreview(Level: TLevel);
public
function SelectedLevel: string;
end;
41,63 → 41,8
{$R *.dfm}
 
uses
Functions, Constants;
Functions, LevelFunctions, Constants;
 
procedure TLevelChoice.DrawLevelPreview(Level: TLevel);
var
PlaygroundMatrix: TPlayGroundMatrix;
y, x: integer;
indent: Integer;
Image: TImage;
BackgroundColor: TColor;
const
PREVIEW_BLOCK_SIZE = 10; // Enthält Field und Abstand
PREVIEW_TAB_SIZE = PREVIEW_BLOCK_SIZE div 2; // 5
begin
Image := PreviewImage;
BackgroundColor := Self.Color;
 
ClearImage(Image, BackgroundColor);
 
Level.FillPlaygroundMatrix(PlaygroundMatrix, false);
try
for x := Low(PlaygroundMatrix.Fields) to High(PlaygroundMatrix.Fields) do
begin
for y := Low(PlaygroundMatrix.Fields[x]) to High(PlaygroundMatrix.Fields[x]) do
begin
// Rectange filling
case PlaygroundMatrix.Fields[x,y].FieldType of
ftFullSpace: Image.Canvas.Brush.Color := BackgroundColor; // invisible
ftEmpty: Image.Canvas.Brush.Color := clWhite;
ftGreen: Image.Canvas.Brush.Color := clLime;
ftYellow: Image.Canvas.Brush.Color := clYellow;
ftRed: Image.Canvas.Brush.Color := clRed;
end;
 
// Rectangle border
if PlaygroundMatrix.Fields[x,y].Goal then
Image.Canvas.Pen.Color := clBlack
else
begin
if PlaygroundMatrix.Fields[x,y].FieldType = ftFullSpace then
Image.Canvas.Pen.Color := BackgroundColor // invisible
else
Image.Canvas.Pen.Color := clLtGray;
end;
 
// Draw the rectangle
indent := PlaygroundMatrix.Fields[x,y].Indent;
Image.Canvas.Rectangle(x*PREVIEW_BLOCK_SIZE + indent*PREVIEW_TAB_SIZE,
y*PREVIEW_BLOCK_SIZE,
x*PREVIEW_BLOCK_SIZE + indent*PREVIEW_TAB_SIZE + PREVIEW_BLOCK_SIZE,
y*PREVIEW_BLOCK_SIZE + PREVIEW_BLOCK_SIZE);
end;
end;
finally
PlaygroundMatrix.ClearMatrix(true);
end;
end;
 
function TLevelChoice.SelectedLevel: string;
begin
result := Format(LVL_FILE, [LevelList.Selected.Caption]);
105,22 → 50,19
 
procedure TLevelChoice.PlayBtnClick(Sender: TObject);
var
Level: TLevel;
LevelString: string;
begin
if Assigned(LevelList.Selected) then
begin
if LevelList.Selected.ImageIndex = 2 then
begin
Level := TLevel.Create(Format(LVL_FILE, [LevelList.Selected.Caption]));
try
if Level.CheckLevelIntegrity(true) <> leNone then
LevelString := Functions.ReadFile(Format(LVL_FILE, [LevelList.Selected.Caption]));
// leNone könnte auftreten, wenn das Level z.B. repariert wurde...
if CheckLevelIntegrity(LevelString, true) <> leNone then
begin
exit;
end;
finally
FreeAndNil(Level);
end;
end;
ModalResult := mrOk;
end;
end;
137,8 → 79,7
 
procedure TLevelChoice.LevelListClick(Sender: TObject);
var
LevelFile: string;
Level: TLevel;
LevelFile, LevelString: string;
begin
PlayBtn.Enabled := Assigned(LevelList.Selected);
PLoadLevel.Enabled := Assigned(LevelList.Selected);
146,12 → 87,8
if Assigned(LevelList.Selected) then
begin
LevelFile := Format(LVL_FILE, [LevelList.Selected.Caption]);
Level := TLevel.Create(LevelFile);
try
DrawLevelPreview(Level);
finally
FreeAndNil(Level);
end;
LevelString := Functions.ReadFile(LevelFile);
DrawLevelPreview(LevelString, PreviewImage, Color);
end
else
begin
173,7 → 110,7
procedure TLevelChoice.RefreshList;
var
s: TSearchRec;
Level: TLevel;
LevelString: string;
begin
LevelList.Clear;
 
184,14 → 121,11
with LevelList.Items.Add do
begin
Caption := Copy(s.Name, 1, Length(s.Name)-Length(LVL_EXT));
Level := TLevel.Create(LVL_PATH + s.Name);
 
if Level.CheckLevelIntegrity <> leNone then
ImageIndex := 2{Error}
else case Level.GameMode of
gmNormal: ImageIndex := 0{Normal};
gmDiagonal: ImageIndex := 1{Diagonal};
gmUndefined: ImageIndex := 2{Error};
LevelString := Functions.ReadFile(LVL_PATH + s.Name);
case GetLevelType(LevelString) of
ltStandard: ImageIndex := 0;
ltDiagonal: ImageIndex := 1;
ltError: ImageIndex := 2;
end;
end;
until FindNext(s) <> 0;
199,11 → 133,35
end;
end;
 
procedure TLevelChoice.FormResize(Sender: TObject);
var
p: integer;
begin
// WIDTH
p := ClientWidth - 3*LevelGrp.Left; // 100% useable
LevelGrp.Width := Round((1-MET_PREVIEW_SIZE_RATIO) * p);
PreviewGrp.Width := Round(MET_PREVIEW_SIZE_RATIO * p);
PreviewGrp.Left := 2*LevelGrp.Left + LevelGrp.Width;
LevelList.Width := LevelGrp.Width - 2*LevelList.Left;
PreviewImage.Width := PreviewGrp.Width - 2*PreviewImage.Left;
PlayBtn.Left := (LevelGrp.Left + LevelGrp.Width) - PlayBtn.Width;
 
// HEIGHT
LevelGrp.Height := ClientHeight - 3*LevelGrp.Top - PlayBtn.Height;
PreviewGrp.Height := LevelGrp.Height;
PlayBtn.Top := 2*LevelGrp.Top + LevelGrp.Height;
CancelBtn.Top := PlayBtn.Top;
LevelList.Height := LevelGrp.Height - 2*LevelList.Top;
PreviewImage.Height := PreviewGrp.Height - 2*PreviewImage.Top;
 
// TODO: Icons rearrangieren
end;
 
procedure TLevelChoice.FormCreate(Sender: TObject);
begin
if not ForceDirectories(ExtractFilePath(Application.ExeName) + LVL_PATH) then
begin
MessageDlg(Format(LNG_COULD_NOT_CREATE_DIR, [LVL_PATH]), mtError, [mbOK], 0);
ShowMessage(Format(LNG_COULD_NOT_CREATE_DIR, [LVL_PATH]));
end;
end;