X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_main.pas;h=74d43c0b59d93824edf5b0956cff19186d9e1250;hb=3f6a265be15702407d13e055359463f27dd3e742;hp=32c13a2751b0f54851c87a98e2e5d105c10073ee;hpb=c31a0cde6506576625aab584c2c45aac9168f2dd;p=d2df-editor.git diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index 32c13a2..74d43c0 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -8,7 +8,7 @@ uses LCLIntf, LCLType, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ComCtrls, ValEdit, Types, Menus, ExtCtrls, - CheckLst, Grids, OpenGLContext, utils, UTF8Process; + CheckLst, Grids, OpenGLContext, Utils, UTF8Process; type @@ -313,11 +313,13 @@ var TestOptionsAllowExit: Boolean; TestOptionsWeaponStay: Boolean; TestOptionsMonstersDM: Boolean; - TestD2dExe: String; + TestD2dExe, TestD2DArgs: String; TestMapOnce: Boolean; 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; @@ -1408,6 +1410,20 @@ begin EditStyle := esSimple; MaxLength := 5; end; + case Data.DamageKind of + 3: str := _lc[I_PROP_TR_DAMAGE_KIND_3]; + 4: str := _lc[I_PROP_TR_DAMAGE_KIND_4]; + 5: str := _lc[I_PROP_TR_DAMAGE_KIND_5]; + 6: str := _lc[I_PROP_TR_DAMAGE_KIND_6]; + 7: str := _lc[I_PROP_TR_DAMAGE_KIND_7]; + 8: str := _lc[I_PROP_TR_DAMAGE_KIND_8]; + else str := _lc[I_PROP_TR_DAMAGE_KIND_0]; + end; + with ItemProps[InsertRow(_lc[I_PROP_TR_DAMAGE_KIND], str, True)] do + begin + EditStyle := esPickList; + ReadOnly := True; + end; end; TRIGGER_HEALTH: @@ -2737,6 +2753,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; @@ -4289,34 +4308,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 // Поворот монстров и областей: @@ -4742,6 +4779,16 @@ begin Values.Add(_lc[I_PROP_TR_SHOT_AIM_2]); Values.Add(_lc[I_PROP_TR_SHOT_AIM_3]); end + else if KeyName = _lc[I_PROP_TR_DAMAGE_KIND] then + begin + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_0]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_3]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_4]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_5]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_6]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_7]); + Values.Add(_lc[I_PROP_TR_DAMAGE_KIND_8]); + end else if (KeyName = _lc[I_PROP_PANEL_BLEND]) or (KeyName = _lc[I_PROP_DM_ONLY]) or (KeyName = _lc[I_PROP_ITEM_FALLS]) or @@ -5145,6 +5192,21 @@ begin StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_DAMAGE_VALUE]], 0), 0), 65535); Data.DamageInterval := Min(Max( StrToIntDef(vleObjectProperty.Values[_lc[I_PROP_TR_INTERVAL]], 0), 0), 65535); + s := vleObjectProperty.Values[_lc[I_PROP_TR_DAMAGE_KIND]]; + if s = _lc[I_PROP_TR_DAMAGE_KIND_3] then + Data.DamageKind := 3 + else if s = _lc[I_PROP_TR_DAMAGE_KIND_4] then + Data.DamageKind := 4 + else if s = _lc[I_PROP_TR_DAMAGE_KIND_5] then + Data.DamageKind := 5 + else if s = _lc[I_PROP_TR_DAMAGE_KIND_6] then + Data.DamageKind := 6 + else if s = _lc[I_PROP_TR_DAMAGE_KIND_7] then + Data.DamageKind := 7 + else if s = _lc[I_PROP_TR_DAMAGE_KIND_8] then + Data.DamageKind := 8 + else + Data.DamageKind := 0; end; TRIGGER_HEALTH: @@ -6178,7 +6240,7 @@ begin 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; - g_DeleteResource(FileName, '', utf2win(MapName), res); + g_DeleteResource(FileName, '', MapName, res); if res <> 0 then begin MessageBox(0, PChar('Cant delete map res=' + IntToStr(res)), PChar('Map not deleted!'), MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1); @@ -6603,11 +6665,47 @@ begin MapTestForm.ShowModal(); end; +type SSArray = array of String; + +function ParseString (Str: AnsiString): SSArray; + function GetStr (var Str: AnsiString): AnsiString; + var a, b: Integer; + begin + Result := ''; + if Str[1] = '"' then + for b := 1 to Length(Str) do + if (b = Length(Str)) or (Str[b + 1] = '"') then + begin + Result := Copy(Str, 2, b - 1); + Delete(Str, 1, b + 1); + Str := Trim(Str); + Exit; + end; + for a := 1 to Length(Str) do + if (a = Length(Str)) or (Str[a + 1] = ' ') then + begin + Result := Copy(Str, 1, a); + Delete(Str, 1, a + 1); + Str := Trim(Str); + Exit; + end; + end; +begin + Result := nil; + Str := Trim(Str); + while Str <> '' do + begin + SetLength(Result, Length(Result)+1); + Result[High(Result)] := GetStr(Str); + end; +end; + procedure TMainForm.miTestMapClick(Sender: TObject); var - cmd, mapWAD, mapToRun, tempWAD: String; + mapWAD, mapToRun, tempWAD: String; + args: SSArray; opt: LongWord; - time: Integer; + time, i: Integer; proc: TProcessUTF8; res: Boolean; begin @@ -6646,23 +6744,29 @@ begin if TestOptionsMonstersDM then opt := opt + 16; -// Составляем командную строку: - cmd := '-map "' + mapToRun + '"'; - cmd := cmd + ' -testmap "' + tempWAD + '"'; - cmd := cmd + ' -gm ' + TestGameMode; - cmd := cmd + ' -limt ' + TestLimTime; - cmd := cmd + ' -lims ' + TestLimScore; - cmd := cmd + ' -opt ' + IntToStr(opt); - - if TestMapOnce then - cmd := cmd + ' --close'; - - cmd := cmd + ' --debug'; - // Запускаем: proc := TProcessUTF8.Create(nil); proc.Executable := TestD2dExe; - proc.Parameters.Add(cmd); + proc.Parameters.Add('-map'); + proc.Parameters.Add(mapToRun); + proc.Parameters.Add('-testmap'); + proc.Parameters.Add(tempWAD); + proc.Parameters.Add('-gm'); + proc.Parameters.Add(TestGameMode); + proc.Parameters.Add('-limt'); + proc.Parameters.Add(TestLimTime); + proc.Parameters.Add('-lims'); + proc.Parameters.Add(TestLimScore); + proc.Parameters.Add('-opt'); + proc.Parameters.Add(IntToStr(opt)); + proc.Parameters.Add('--debug'); + if TestMapOnce then + proc.Parameters.Add('--close'); + + args := ParseString(TestD2DArgs); + for i := 0 to High(args) do + proc.Parameters.Add(args[i]); + res := True; try proc.Execute(); @@ -6762,8 +6866,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