?? editorunit1.pas
字號:
If fileexists('gfx\klosser.bmp') Then
Begin
Pbmp.items[1].Picture.loadfromfile('gfx\klosser.bmp');
Kbmp.items[1].Picture.loadfromfile('gfx\klosser.bmp');
End Else
Begin
Pbmp.items[1].Picture.loadfromfile('klosser.bmp');
Kbmp.items[1].Picture.loadfromfile('klosser.bmp');
End;
PBMP.Items.Restore;
KBMP.Items.Restore;
refreshklosser;
End;
Procedure save(f: String);
Var ff : File;
dy, l : integer;
Begin
If fileexists(f) Then deletefile(f);
assign(ff, f);
rewrite(ff, 1);
blockwrite(ff, game.level.info, sizeof(levelextrainfotype));
For l := 0 To game.level.info.layers - 1 Do
For dy := 0 To game.level.info.width - 1 Do
blockwrite(ff, game.level.l[l][dy, 0], (game.level.info.height * 2));
close(ff);
End;
Procedure teditorform.load(f: String);
Var ff : File;
l, dy, a : integer;
Begin
resetlevel;
assignfile(ff, f);
reset(ff, 1);
blockread(ff, game.level.info, sizeof(levelextrainfotype));
self.layers.items.Clear;
For a := 0 To game.level.info.layers - 1 Do
Begin
self.layers.items.add(inttostr(a));
// self.layers.checked[a]:=true;
End;
//self.Layers.
For a := 0 To game.level.info.layers - 1 Do
Begin
self.layers.checked[a] := true;
End;
With game.level Do setlength(l, info.layers, info.width, info.height);
For l := 0 To game.level.info.layers - 1 Do
For dy := 0 To game.level.info.width - 1 Do
blockread(ff, game.level.l[l][dy, 0], (game.level.info.height * 2));
closefile(ff);
End;
Procedure TEditorForm.PreviewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
If ssShift In shift Then
Begin
fromlevel.Checked := true;
draw := 3;
selstarttemp := point(x Div 32 + scrollx.position, y Div 32 + scrolly.position);
End Else
Case Button Of
mbLeft: draw := 1;
mbRight: draw := 2;
End;
PreviewMouseMove(Sender, [], x, y);
End;
Procedure TEditorForm.PreviewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
draw := 0;
sellayer := currentlayer;
End;
Procedure TEditorForm.RefreshKlosser;
Var xx, yy, kloss : integer;
Begin
klosser.surface.Fill(clwhite);
kloss := klosser.width Div 32 * KlosserScroll.Position;
For yy := 0 To (klosser.height Div 32) - 1 Do
For xx := 0 To (klosser.width Div 32) - 1 Do
If kloss < Kbmp.items[1].PatternCount Then
Begin
Kbmp.Items[1].Draw(klosser.surface, xx * 32, yy * 32, kloss);
If frombitmap.checked Then
If (selstart.x <= xx) And (selend.x >= xx) And
(selstart.y <= yy + klosserscroll.position) And (selend.y >= yy + klosserscroll.position) Then
Kbmp.Items[2].Draw(klosser.surface, xx * 32, yy * 32, 0);
inc(kloss);
End Else break;
//klosser.surface.Canvas.Rectangle(selstart.x*32,selstart.y*32,selend.x*32+31,selend.y*32+31);
//drawbox(selstart,selend);
// for xx:=1 to 31 do
//
// with preview.surface.Pixels[xx,yy] .Canvas do
// begin
// Brush.Style := bsClear;
// Rectangle(32,32,31+32,31+32);
// Release;
// end;
KlosserScroll.Visible := (kbmp.items[1].patterncount) > (klosser.height Div 32) * (klosser.width Div 32);
KlosserScroll.Max := (kbmp.items[1].patterncount) Div (klosser.width Div 32);
If Not KlosserScroll.visible Then klosserscroll.Position := 0;
klosser.Flip;
End;
Procedure TEditorForm.Splitter1Moved(Sender: TObject);
Begin
refreshklosser;
End;
Var marking : boolean = false;
levelmarking : boolean = false;
Procedure TEditorForm.KlosserMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
frombitmap.checked := true;
selstarttemp := point(x Div 32, (y) Div 32 + klosserscroll.position);
marking := true;
KlosserMouseMove(Sender, [], x, y);
End;
Procedure TEditorForm.KlosserMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
marking := false;
End;
Procedure TEditorForm.PreviewMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
Var xx, yy : integer;
Begin
If (x < 0) Or (y < 0) Or (x > preview.width) Or (y > preview.height) Then exit;
cursor.x := x Div 32;
cursor.y := y Div 32;
If draw = 3 Then
Begin
selstart := selstarttemp;
SelEnd := Point(x Div 32 + scrollx.position, y Div 32 + scrolly.position);
If selend.x < selstart.x Then swap(selend.x, selstart.x);
If selend.y < selstart.y Then swap(selend.Y, selstart.y);
// RefreshKlosser;
End Else
If fromlevel.checked Then
Begin
If selend.x >= game.level.info.width Then selend.x := game.level.info.width - 1;
If selend.y >= game.level.info.height Then selend.y := game.level.info.height - 1;
If selstart.x >= game.level.info.width Then selstart.x := game.level.info.width - 1;
If selstart.y >= game.level.info.height Then selstart.y := game.level.info.height - 1;
End;
If draw = 1 Then
If frombitmap.checked Then
Begin
For xx := 0 To (selend.x - selstart.x) Do
For yy := 0 To (selend.y - selstart.y) Do
If ((cursor.x + xx + game.scrollx Div 32) < game.level.info.width) And
((cursor.y + yy + game.scrolly Div 32) < game.level.info.height) Then
game.level.l[currentlayer][cursor.x + xx + game.scrollx Div 32, cursor.y + yy + game.scrolly Div 32] :=
(klosser.width Div 32) * (selstart.y + yy) + selstart.x + xx;
End Else
Begin
For xx := 0 To (selend.x - selstart.x) Do
For yy := 0 To (selend.y - selstart.y) Do
If ((cursor.x + xx + game.scrollx Div 32) < game.level.info.width) And
((cursor.y + yy + game.scrolly Div 32) < game.level.info.height) Then
game.level.l[currentlayer][cursor.x + xx + game.scrollx Div 32, cursor.y + yy + game.scrolly Div 32] :=
game.level.l[sellayer][xx + selstart.x, yy + selstart.y];
End;
If draw = 2 Then
For xx := 0 To (selend.x - selstart.x) Do
For yy := 0 To (selend.y - selstart.y) Do
If ((cursor.x + xx + game.scrollx Div 32) < game.level.info.width) And
((cursor.y + yy + game.scrolly Div 32) < game.level.info.height) Then
game.level.l[currentlayer][cursor.x + xx + game.scrollx Div 32, cursor.y + yy + game.scrolly Div 32] := -1;
End;
Procedure TEditorForm.KlosserMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
Begin
If marking Then
Begin
selstart := selstarttemp;
SelEnd := Point(x Div 32, y Div 32 + klosserscroll.position);
If selend.x < selstart.x Then swap(selend.x, selstart.x);
If selend.y < selstart.y Then swap(selend.Y, selstart.y);
RefreshKlosser;
End;
End;
Procedure TEditorForm.KlosserScrollChange(Sender: TObject);
Begin
refreshklosser;
End;
Procedure TEditorForm.FormShow(Sender: TObject);
Begin
refreshklosser;
End;
Procedure TEditorForm.LayersClick(Sender: TObject);
Begin
With layers Do currentlayer := strtoint(Items[ItemIndex]);
End;
Procedure TEditorForm.FromlevelClick(Sender: TObject);
Begin
If sender.ClassType = tmenuitem Then
tmenuitem(sender).checked := true;
refreshklosser;
selstart := point(0, 0);
selend := point(0, 0);
End;
Procedure TEditorForm.ScrollyChange(Sender: TObject);
Begin
If scrolly.max <> game.level.info.height Then scrolly.max := game.level.info.height;
End;
Procedure TEditorForm.ScrollxChange(Sender: TObject);
Begin
If scrollx.max <> game.level.info.width Then scrollx.max := game.level.info.width;
End;
Procedure TEditorForm.ActionLoadLevelExecute(Sender: TObject);
Begin
If opendialog1.Execute = true Then
Begin
load(opendialog1.filename);
With settingsform Do
Begin
edit1.text := inttostr(game.level.info.width);
edit2.text := inttostr(game.level.info.height);
edit3.text := game.level.info.name;
combobox2.text := game.level.info.background;
combobox3.Text := game.level.info.backobjs;
combobox1.text := game.level.info.sprites;
edit4.text := inttostr(game.level.info.scrollbackground);
layers.Position := game.level.info.layers;
End;
initbmp;
opendialog1.initialdir := extractfilepath(opendialog1.filename);
savedialog1.filename := opendialog1.filename;
End;
End;
Procedure TEditorForm.ActionSaveLevelExecute(Sender: TObject);
Begin
If savedialog1.Execute = true Then
Begin
save(savedialog1.filename);
savedialog1.initialdir := extractfilepath(savedialog1.filename);
opendialog1.FileName := savedialog1.filename;
End;
End;
Procedure TEditorForm.ActionOptionExecute(Sender: TObject);
Var a, c, ll, xx, yy: integer;
Begin
With settingsform Do
If showmodal = mrok Then
With game.level Do
Begin
info.layers := layers.position;
If self.layers.items.count <> info.layers Then
Begin
self.layers.items.Clear;
For a := 0 To info.layers - 1 Do
Begin
self.layers.items.add(inttostr(a));
self.layers.checked[a] := true;
End;
End;
val(edit1.text, a, c);
info.width := a;
val(edit2.text, a, c);
info.height := a;
info.name := edit3.text;
info.sprites := combobox1.Text;
info.background := combobox2.Text;
info.backobjs := combobox3.Text;
info.megaobjs := combobox4.Text;
info.bypass := combobox5.Text;
setlength(l, info.layers, info.width, info.height);
For ll := 0 To info.layers - 1 Do
For xx := 0 To info.width - 1 Do
For yy := 0 To info.height - 1 Do
If l[ll][xx, yy] = 0 Then l[ll][xx, yy] := -1;
val(edit4.text, a, c);
info.scrollbackground := a;
initbmp;
Scrollx.Max := game.level.info.height;
Scrolly.Max := game.level.info.width;
End;
End;
procedure TEditorForm.ActionExitExecute(Sender: TObject);
begin
Close;
end;
procedure TEditorForm.ActionResetLevelExecute(Sender: TObject);
begin
If application.messagebox('Vil du t鴐me brettet?', '', mb_yesno) = mryes Then
resetlevel;
end;
procedure TEditorForm.ActionShowHintsExecute(Sender: TObject);
begin
Layers.ShowHint:=Hints1.Checked;
Preview.ShowHint:=Hints1.Checked;
Klosser.ShowHint:=Hints1.Checked;
end;
procedure TEditorForm.ActionRunLevelExecute(Sender: TObject);
begin
chdir(extractfilepath(application.exename));
DeleteFile('j32temp.l');
If Not fileexists('j32temp.l') Then
Begin
Save('j32temp.l');
WinExec('joffa.exe j32temp.l', sw_show);
End;
end;
End.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -