diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas
index 86ec6b4f7681bfe84d94c061e20eaaeeea963337..2df86ca6f40543ca72fe14c0d0ce5e2d911f3ad1 100644 (file)
--- a/src/editor/f_main.pas
+++ b/src/editor/f_main.pas
{ TMainForm }
TMainForm = class(TForm)
- lLoad: TLabel;
- // Главное меню:
+ MapTestTimer: TTimer;
+ Splitter1: TSplitter;
+ Splitter2: TSplitter;
+ StatusBar: TStatusBar;
+ OpenDialog: TOpenDialog;
+ SaveDialog: TSaveDialog;
+ ColorDialog: TColorDialog;
+
+ // Menu:
MainMenu: TMainMenu;
+ ImageList: TImageList;
// Apple menu:
miApple: TMenuItem;
miAppleAbout: TMenuItem;
miAppleLine0: TMenuItem;
miApplePref: TMenuItem;
miAppleLine1: TMenuItem;
- // "Файл":
+ // File menu:
miMenuFile: TMenuItem;
miNewMap: TMenuItem;
miOpenMap: TMenuItem;
- miSaveMap: TMenuItem;
- miSaveMapAs: TMenuItem;
miMacRecentSubMenu: TMenuItem;
+ miMacRecentEnd: TMenuItem;
miMacRecentClear: TMenuItem;
+ Separator1: TMenuItem;
+ miSaveMap: TMenuItem;
+ miSaveMapAs: TMenuItem;
miOpenWadMap: TMenuItem;
miLine1: TMenuItem;
miReopenMap: TMenuItem;
miSaveMiniMap: TMenuItem;
miDeleteMap: TMenuItem;
miPackMap: TMenuItem;
+ miWinRecentStart: TMenuItem;
miWinRecent: TMenuItem;
miLine2: TMenuItem;
miExit: TMenuItem;
- // "Правка":
+ // Edit menu:
miMenuEdit: TMenuItem;
miUndo: TMenuItem;
miLine3: TMenuItem;
miLine4: TMenuItem;
miSelectAll: TMenuItem;
miLine5: TMenuItem;
+ miSnapToGrid: TMenuItem;
+ miSwitchGrid: TMenuItem;
+ Separator2: TMenuItem;
miToFore: TMenuItem;
miToBack: TMenuItem;
+ miLine6: TMenuItem;
+ miMapOptions: TMenuItem;
+ miOptions: TMenuItem;
// View menu:
miMenuView: TMenuItem;
- miShowEdges: TMenuItem;
miLayers: TMenuItem;
miLayer1: TMenuItem;
miLayer2: TMenuItem;
miLayer9: TMenuItem;
miViewLine1: TMenuItem;
miMiniMap: TMenuItem;
+ miShowEdges: TMenuItem;
miViewLine2: TMenuItem;
miMapPreview: TMenuItem;
- miSnapToGrid: TMenuItem;
- miSwitchGrid: TMenuItem;
- miLine6: TMenuItem;
- miOptions: TMenuItem;
- miMapOptions: TMenuItem;
- // "Сервис":
+ // Service menu:
miMenuService: TMenuItem;
miCheckMap: TMenuItem;
miOptimmization: TMenuItem;
miMenuWindow: TMenuItem;
miMacMinimize: TMenuItem;
miMacZoom: TMenuItem;
- // "Справка":
+ // Help Menu:
miMenuHelp: TMenuItem;
miAbout: TMenuItem;
- // Скрытый пункт меню для Ctrl+Tab:
+ // HIDDEN menu:
miMenuHidden: TMenuItem;
minexttab: TMenuItem;
+ selectall1: TMenuItem;
- // Панель инструментов:
+ // Toolbar:
+ ilToolbar: TImageList;
MainToolBar: TToolBar;
- pbLoad: TProgressBar;
- pLoadProgress: TPanel;
- RenderPanel: TOpenGLControl;
- Separator1: TMenuItem;
- miMacRecentEnd: TMenuItem;
- miWinRecentStart: TMenuItem;
- Separator2: TMenuItem;
tbNewMap: TToolButton;
tbOpenMap: TToolButton;
tbSaveMap: TToolButton;
tbShowMap: TToolButton;
tbLine2: TToolButton;
tbShow: TToolButton;
- tbLine3: TToolButton;
- tbGridOn: TToolButton;
- tbGrid: TToolButton;
- tbLine4: TToolButton;
- tbTestMap: TToolButton;
- // Всплывающее меню для кнопки слоев:
pmShow: TPopupMenu;
miLayerP1: TMenuItem;
miLayerP2: TMenuItem;
miLayerP7: TMenuItem;
miLayerP8: TMenuItem;
miLayerP9: TMenuItem;
+ tbLine3: TToolButton;
+ tbGridOn: TToolButton;
+ tbGrid: TToolButton;
+ tbLine4: TToolButton;
+ tbTestMap: TToolButton;
- // Панель карты:
+ // Progress bar:
+ pLoadProgress: TPanel;
+ lLoad: TLabel;
+ pbLoad: TProgressBar;
+
+ // Map edit area:
PanelMap: TPanel;
- // Полосы прокрутки:
+ RenderPanel: TOpenGLControl;
sbHorizontal: TScrollBar;
sbVertical: TScrollBar;
- // Панель свойств:
+ // Object propertiy editor:
PanelProps: TPanel;
- // Панель применения свойств:
PanelPropApply: TPanel;
bApplyProperty: TButton;
- MapTestTimer: TTimer;
- // Редактор свойств объектов:
vleObjectProperty: TValueListEditor;
- // Панель объектов - вкладки:
+ // Object palette:
PanelObjs: TPanel;
pcObjects: TPageControl;
- // Вкладка "Панели":
+ // Panels Tab:
tsPanels: TTabSheet;
+ PanelPanelType: TPanel;
+ lbPanelType: TListBox;
lbTextureList: TListBox;
- // Панель настройки текстур:
PanelTextures: TPanel;
LabelTxW: TLabel;
lTextureWidth: TLabel;
bbAddTexture: TBitBtn;
bbRemoveTexture: TBitBtn;
bClearTexture: TButton;
- // Панель типов панелей:
- PanelPanelType: TPanel;
- lbPanelType: TListBox;
- // Вкладка "Предметы":
+ // Items Tab:
tsItems: TTabSheet;
lbItemList: TListBox;
cbOnlyDM: TCheckBox;
cbFall: TCheckBox;
- // Вкладка "Монстры":
+ // Monsters Tab:
tsMonsters: TTabSheet;
lbMonsterList: TListBox;
rbMonsterLeft: TRadioButton;
rbMonsterRight: TRadioButton;
- // Вкладка "Области":
+ // Areas Tab:
tsAreas: TTabSheet;
lbAreasList: TListBox;
rbAreaLeft: TRadioButton;
rbAreaRight: TRadioButton;
- // Вкладка "Триггеры":
+ // Triggers Tab:
tsTriggers: TTabSheet;
lbTriggersList: TListBox;
clbActivationType: TCheckListBox;
clbKeys: TCheckListBox;
- // Остальные панели
- Splitter1: TSplitter;
- Splitter2: TSplitter;
- StatusBar: TStatusBar;
-
- // Специальные объекты:
- ImageList: TImageList;
- ilToolbar: TImageList;
- OpenDialog: TOpenDialog;
- SaveDialog: TSaveDialog;
- selectall1: TMenuItem;
- ColorDialog: TColorDialog;
-
procedure aAboutExecute(Sender: TObject);
procedure aCheckMapExecute(Sender: TObject);
procedure aMoveToFore(Sender: TObject);
type
TUndoRec = record
- UndoType: Byte;
- case Byte of
+ case UndoType: Byte of
UNDO_DELETE_PANEL: (Panel: ^TPanel);
UNDO_DELETE_ITEM: (Item: TItem);
UNDO_DELETE_AREA: (Area: TArea);
end;
TCopyRec = record
- ObjectType: Byte;
ID: Cardinal;
- case Byte of
+ case ObjectType: Byte of
OBJECT_PANEL: (Panel: ^TPanel);
OBJECT_ITEM: (Item: TItem);
OBJECT_AREA: (Area: TArea);
gAlphaTriggerArea := ALPHA_AREA;
gAlphaMonsterRect := config.ReadInt('Editor', 'MonsterRectAlpha', 0);
gAlphaAreaRect := config.ReadInt('Editor', 'AreaRectAlpha', 0);
- if config.ReadInt('Editor', 'Scale', 0) = 1 then
- Scale := 2
- else
- Scale := 1;
- if config.ReadInt('Editor', 'DotSize', 0) = 1 then
- DotSize := 2
- else
- DotSize := 1;
+ Scale := Max(config.ReadInt('Editor', 'Scale', 1), 1);
+ DotSize := Max(config.ReadInt('Editor', 'DotSize', 1), 1);
OpenDialog.InitialDir := config.ReadStr('Editor', 'LastOpenDir', MapsDir);
SaveDialog.InitialDir := config.ReadStr('Editor', 'LastSaveDir', MapsDir);
// Строка состояния - координаты мыши:
StatusBar.Panels[1].Text := Format('(%d:%d)',
[MousePos.X-MapOffset.X, MousePos.Y-MapOffset.Y]);
+
+ RenderPanel.Invalidate;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
QuickSortCopyBuffer(0, b);
end;
-// Ð\9fестановка ссылок триггеров:
+// Ð\9fостановка ссылок триггеров:
for a := 0 to Length(CopyBuffer)-1 do
if CopyBuffer[a].ObjectType = OBJECT_TRIGGER then
begin
swad, ssec, sres: String;
NoTextureID: DWORD;
pmin: TPoint;
+ xadj, yadj: LongInt;
begin
CopyBuffer := nil;
NoTextureID := 0;
+
pmin.X := High(pmin.X);
pmin.Y := High(pmin.Y);
StringToCopyBuffer(ClipBoard.AsText, CopyBuffer, pmin);
- rel := not(ssShift in GetKeyShiftState());
-
if CopyBuffer = nil then
Exit;
+ rel := not(ssShift in GetKeyShiftState());
+ h := High(CopyBuffer);
RemoveSelectFromObjects();
- h := High(CopyBuffer);
+ if h > 0 then
+ begin
+ xadj := -pmin.X - Floor((MapOffset.X - 32) / DotStep) * DotStep;
+ yadj := -pmin.Y - Floor((MapOffset.Y - 32) / DotStep) * DotStep;
+ end
+ else
+ begin
+ xadj := DotStep;
+ yadj := DotStep;
+ end;
+
for a := 0 to h do
with CopyBuffer[a] do
begin
begin
if rel then
begin
- Panel^.X := Panel^.X - pmin.X - MapOffset.X + 32;
- Panel^.Y := Panel^.Y - pmin.Y - MapOffset.Y + 32;
+ Panel^.X += xadj;
+ Panel^.Y += yadj;
end;
Panel^.TextureID := TEXTURE_SPECIAL_NONE;
begin
if rel then
begin
- Item.X := Item.X - pmin.X - MapOffset.X + 32;
- Item.Y := Item.Y - pmin.Y - MapOffset.Y + 32;
+ Item.X += xadj;
+ Item.Y += yadj;
end;
ID := AddItem(Item);
begin
if rel then
begin
- Monster.X := Monster.X - pmin.X - MapOffset.X + 32;
- Monster.Y := Monster.Y - pmin.Y - MapOffset.Y + 32;
+ Monster.X += xadj;
+ Monster.Y += yadj;
end;
ID := AddMonster(Monster);
begin
if rel then
begin
- Area.X := Area.X - pmin.X - MapOffset.X + 32;
- Area.Y := Area.Y - pmin.Y - MapOffset.Y + 32;
+ Area.X += xadj;
+ Area.Y += yadj;
end;
ID := AddArea(Area);
if rel then
with Trigger do
begin
- X := X - pmin.X - MapOffset.X + 32;
- Y := Y - pmin.Y - MapOffset.Y + 32;
+ X += xadj;
+ Y += yadj;
case TriggerType of
TRIGGER_TELEPORT:
begin
- Data.TargetPoint.X :=
- Data.TargetPoint.X - pmin.X - MapOffset.X + 32;
- Data.TargetPoint.Y :=
- Data.TargetPoint.Y - pmin.Y - MapOffset.Y + 32;
+ Data.TargetPoint.X += xadj;
+ Data.TargetPoint.Y += yadj;
end;
TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF:
begin
- Data.tX := Data.tX - pmin.X - MapOffset.X + 32;
- Data.tY := Data.tY - pmin.Y - MapOffset.Y + 32;
+ Data.tX += xadj;
+ Data.tY += yadj;
end;
TRIGGER_SPAWNMONSTER:
begin
- Data.MonPos.X :=
- Data.MonPos.X - pmin.X - MapOffset.X + 32;
- Data.MonPos.Y :=
- Data.MonPos.Y - pmin.Y - MapOffset.Y + 32;
+ Data.MonPos.X += xadj;
+ Data.MonPos.Y += yadj;
end;
TRIGGER_SPAWNITEM:
begin
- Data.ItemPos.X :=
- Data.ItemPos.X - pmin.X - MapOffset.X + 32;
- Data.ItemPos.Y :=
- Data.ItemPos.Y - pmin.Y - MapOffset.Y + 32;
+ Data.ItemPos.X += xadj;
+ Data.ItemPos.Y += yadj;
end;
TRIGGER_SHOT:
begin
- Data.ShotPos.X :=
- Data.ShotPos.X - pmin.X - MapOffset.X + 32;
- Data.ShotPos.Y :=
- Data.ShotPos.Y - pmin.Y - MapOffset.Y + 32;
+ Data.ShotPos.X += xadj;
+ Data.ShotPos.Y += yadj;
end;
end;
end;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
MapOffset.Y := -sbVertical.Position;
+ RenderPanel.Invalidate;
end;
procedure TMainForm.sbHorizontalScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
MapOffset.X := -sbHorizontal.Position;
+ RenderPanel.Invalidate;
end;
procedure TMainForm.miOpenWadMapClick(Sender: TObject);