X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_main.pas;h=b980fb5ae3c6d3868f6f0b0c00815fe4fd493017;hb=71ee6bf06a4d2c6c3661b982ee3da4ce229e3f74;hp=ea7b4a9f7ed7e9e06909419ab9de7680ff8e377d;hpb=8f95e11fc4d14f01ad8be557615625eb90dafe87;p=d2df-editor.git diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index ea7b4a9..b980fb5 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -318,6 +318,8 @@ var LayerEnabled: Array [LAYER_BACK..LAYER_TRIGGERS] of Boolean = (True, True, True, True, True, True, True, True, True); + ContourEnabled: Array [LAYER_BACK..LAYER_TRIGGERS] of Boolean = + (False, False, False, False, False, False, False, False, False); PreviewMode: Byte = 0; gLanguage: String; @@ -336,7 +338,7 @@ uses f_mapoptions, g_basic, f_about, f_mapoptimization, f_mapcheck, f_addresource_texture, g_textures, f_activationtype, f_keys, - MAPREADER, f_selectmap, f_savemap, WADEDITOR, WADSTRUCT, MAPDEF, + MAPREADER, f_selectmap, f_savemap, WADEDITOR, MAPDEF, g_map, f_saveminimap, f_addresource, CONFIG, f_packmap, f_addresource_sound, f_maptest, f_choosetype, g_language, f_selectlang, ClipBrd, g_resources; @@ -442,7 +444,6 @@ var MouseRDown: Boolean; MouseLDownPos: Types.TPoint; MouseRDownPos: Types.TPoint; - WASDOffset: TPoint; SelectFlag: Byte = SELECTFLAG_NONE; MouseAction: Byte = MOUSEACTION_NONE; @@ -2624,10 +2625,10 @@ var config: TConfig; begin ID := 0; - g_ReadResource(EditorDir + 'data/Game.wad', 'FONTS', cfgres, cfgdata, cfglen); + g_ReadResource(EditorDir + 'data/game.wad', 'FONTS', cfgres, cfgdata, cfglen); if cfgdata <> nil then begin - if not g_CreateTextureWAD('FONT_STD', EditorDir + 'data/Game.wad:FONTS\' + texture) then + if not g_CreateTextureWAD('FONT_STD', EditorDir + 'data/game.wad:FONTS\' + texture) then e_WriteLog('ERROR ERROR ERROR', MSG_WARNING); config := TConfig.CreateMem(cfgdata, cfglen); @@ -2738,6 +2739,9 @@ begin s := config.ReadStr('Editor', 'Language', ''); gLanguage := s; + Compress := config.ReadBool('Editor', 'Compress', True); + Backup := config.ReadBool('Editor', 'Backup', True); + RecentCount := config.ReadInt('Editor', 'RecentCount', 5); if RecentCount > 10 then RecentCount := 10; @@ -4108,10 +4112,8 @@ begin if MouseAction = MOUSEACTION_MOVEOBJ then begin MoveSelectedObjects(ssShift in Shift, ssCtrl in Shift, - MousePos.X-LastMovePoint.X+WASDOffset.X, - MousePos.Y-LastMovePoint.Y+WASDOffset.Y); - WASDOffset.X := 0; - WASDOffset.Y := 0; + MousePos.X-LastMovePoint.X, + MousePos.Y-LastMovePoint.Y); end else // Меняем размер выделенного объекта: @@ -4120,10 +4122,8 @@ begin if (SelectedObjectCount = 1) and (SelectedObjects[GetFirstSelected].Live) then begin - dWidth := MousePos.X-LastMovePoint.X+WASDOffset.X; - dHeight := MousePos.Y-LastMovePoint.Y+WASDOffset.Y; - WASDOffset.X := 0; - WASDOffset.Y := 0; + dWidth := MousePos.X-LastMovePoint.X; + dHeight := MousePos.Y-LastMovePoint.Y; case ResizeType of RESIZETYPE_VERTICAL: dWidth := 0; @@ -4135,11 +4135,10 @@ begin RESIZEDIR_LEFT: dWidth := -dWidth; end; - ResizeObject(SelectedObjects[GetFirstSelected].ObjectType, - SelectedObjects[GetFirstSelected].ID, - dWidth, dHeight, ResizeDirection); - - LastMovePoint := MousePos; + if ResizeObject(SelectedObjects[GetFirstSelected].ObjectType, + SelectedObjects[GetFirstSelected].ID, + dWidth, dHeight, ResizeDirection) then + LastMovePoint := MousePos; end; end; end; @@ -4295,34 +4294,52 @@ begin AboutForm.ShowModal(); end; -procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); +procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var dx, dy, i: Integer; FileName: String; + ok: Boolean; begin if (not EditingProperties) then begin - if Key = Ord('1') then - SwitchLayer(LAYER_BACK); - if Key = Ord('2') then - SwitchLayer(LAYER_WALLS); - if Key = Ord('3') then - SwitchLayer(LAYER_FOREGROUND); - if Key = Ord('4') then - SwitchLayer(LAYER_STEPS); - if Key = Ord('5') then - SwitchLayer(LAYER_WATER); - if Key = Ord('6') then - SwitchLayer(LAYER_ITEMS); - if Key = Ord('7') then - SwitchLayer(LAYER_MONSTERS); - if Key = Ord('8') then - SwitchLayer(LAYER_AREAS); - if Key = Ord('9') then - SwitchLayer(LAYER_TRIGGERS); - if Key = Ord('0') then - tbShowClick(tbShow); + if ssCtrl in Shift then + begin + case Chr(Key) of + '1': ContourEnabled[LAYER_BACK] := not ContourEnabled[LAYER_BACK]; + '2': ContourEnabled[LAYER_WALLS] := not ContourEnabled[LAYER_WALLS]; + '3': ContourEnabled[LAYER_FOREGROUND] := not ContourEnabled[LAYER_FOREGROUND]; + '4': ContourEnabled[LAYER_STEPS] := not ContourEnabled[LAYER_STEPS]; + '5': ContourEnabled[LAYER_WATER] := not ContourEnabled[LAYER_WATER]; + '6': ContourEnabled[LAYER_ITEMS] := not ContourEnabled[LAYER_ITEMS]; + '7': ContourEnabled[LAYER_MONSTERS] := not ContourEnabled[LAYER_MONSTERS]; + '8': ContourEnabled[LAYER_AREAS] := not ContourEnabled[LAYER_AREAS]; + '9': ContourEnabled[LAYER_TRIGGERS] := not ContourEnabled[LAYER_TRIGGERS]; + '0': + begin + ok := False; + for i := Low(ContourEnabled) to High(ContourEnabled) do + if ContourEnabled[i] then + ok := True; + for i := Low(ContourEnabled) to High(ContourEnabled) do + ContourEnabled[i] := not ok + end + end + end + else + begin + case Chr(key) of + '1': SwitchLayer(LAYER_BACK); + '2': SwitchLayer(LAYER_WALLS); + '3': SwitchLayer(LAYER_FOREGROUND); + '4': SwitchLayer(LAYER_STEPS); + '5': SwitchLayer(LAYER_WATER); + '6': SwitchLayer(LAYER_ITEMS); + '7': SwitchLayer(LAYER_MONSTERS); + '8': SwitchLayer(LAYER_AREAS); + '9': SwitchLayer(LAYER_TRIGGERS); + '0': tbShowClick(tbShow); + end + end; if Key = Ord('V') then begin // Поворот монстров и областей: @@ -4382,7 +4399,7 @@ begin Inc(MouseLDownPos.y, DotStep); Inc(MouseRDownPos.y, DotStep); end; - Dec(WASDOffset.Y, DotStep); + Inc(LastMovePoint.Y, DotStep); RenderPanelMouseMove(Sender, Shift, RenderMousePos().X, RenderMousePos().Y); end; Position := IfThen(Position > DotStep, Position-DotStep, 0); @@ -4398,7 +4415,7 @@ begin Dec(MouseLDownPos.y, DotStep); Dec(MouseRDownPos.y, DotStep); end; - Inc(WASDOffset.Y, DotStep); + Dec(LastMovePoint.Y, DotStep); RenderPanelMouseMove(Sender, Shift, RenderMousePos().X, RenderMousePos().Y); end; Position := IfThen(Position+DotStep < Max, Position+DotStep, Max); @@ -4418,7 +4435,7 @@ begin Inc(MouseLDownPos.x, DotStep); Inc(MouseRDownPos.x, DotStep); end; - Dec(WASDOffset.X, DotStep); + Inc(LastMovePoint.X, DotStep); RenderPanelMouseMove(Sender, Shift, RenderMousePos().X, RenderMousePos().Y); end; Position := IfThen(Position > DotStep, Position-DotStep, 0); @@ -4434,7 +4451,7 @@ begin Dec(MouseLDownPos.x, DotStep); Dec(MouseRDownPos.x, DotStep); end; - Inc(WASDOffset.X, DotStep); + Dec(LastMovePoint.X, DotStep); RenderPanelMouseMove(Sender, Shift, RenderMousePos().X, RenderMousePos().Y); end; Position := IfThen(Position+DotStep < Max, Position+DotStep, Max); @@ -6163,69 +6180,48 @@ end; procedure TMainForm.aDeleteMap(Sender: TObject); var - WAD: TWADEditor_1; - MapList: SArray; - MapName: Char16; - a: Integer; - str: String; + res: Integer; + FileName: String; + MapName: String; begin OpenDialog.Filter := _lc[I_FILE_FILTER_WAD]; if not OpenDialog.Execute() then Exit; - WAD := TWADEditor_1.Create(); - - if not WAD.ReadFile(OpenDialog.FileName) then - begin - WAD.Free(); - Exit; - end; - - WAD.CreateImage(); - - MapList := WAD.GetResourcesList(''); - + FileName := OpenDialog.FileName; SelectMapForm.Caption := _lc[I_CAP_REMOVE]; SelectMapForm.lbMapList.Items.Clear(); + SelectMapForm.GetMaps(FileName); + + if SelectMapForm.ShowModal() <> mrOK then + Exit; - if MapList <> nil then - for a := 0 to High(MapList) do - SelectMapForm.lbMapList.Items.Add(win2utf(MapList[a])); + MapName := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; + if MessageBox(0, PChar(Format(_lc[I_MSG_DELETE_MAP_PROMT], [MapName, OpenDialog.FileName])), PChar(_lc[I_MSG_DELETE_MAP]), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then + Exit; - if (SelectMapForm.ShowModal() = mrOK) then + g_DeleteResource(FileName, '', MapName, res); + if res <> 0 then begin - str := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex]; - MapName := ''; - Move(str[1], MapName[0], Min(16, Length(str))); - - if MessageBox(0, PChar(Format(_lc[I_MSG_DELETE_MAP_PROMT], - [MapName, OpenDialog.FileName])), - PChar(_lc[I_MSG_DELETE_MAP]), - MB_ICONQUESTION or MB_YESNO or - MB_DEFBUTTON2) <> mrYes then - Exit; - - WAD.RemoveResource('', utf2win(MapName)); - - MessageBox(0, PChar(Format(_lc[I_MSG_MAP_DELETED_PROMT], - [MapName])), - PChar(_lc[I_MSG_MAP_DELETED]), - MB_ICONINFORMATION or MB_OK or - MB_DEFBUTTON1); + MessageBox(0, PChar('Cant delete map res=' + IntToStr(res)), PChar('Map not deleted!'), MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1); + Exit + end; - WAD.SaveTo(OpenDialog.FileName); + MessageBox( + 0, + PChar(Format(_lc[I_MSG_MAP_DELETED_PROMT], [MapName])), + PChar(_lc[I_MSG_MAP_DELETED]), + MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1 + ); // Удалили текущую карту - сохранять по старому ее нельзя: - if OpenedMap = (OpenDialog.FileName+':\'+MapName) then - begin - OpenedMap := ''; - OpenedWAD := ''; - MainForm.Caption := FormCaption; - end; - end; - - WAD.Free(); + if OpenedMap = (FileName + ':\' + MapName) then + begin + OpenedMap := ''; + OpenedWAD := ''; + MainForm.Caption := FormCaption + end end; procedure TMainForm.vleObjectPropertyKeyDown(Sender: TObject; @@ -6789,8 +6785,7 @@ begin EditingProperties := False; end; -procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); +procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin // Объекты передвигались: if MainForm.ActiveControl = RenderPanel then