X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_gui.pas;h=d7735ab374d568a4e51cf47c543f1a2c458d7522;hb=a4f25c41dfd783a925aa2dab4b9b84753d5c3f18;hp=c276cfd1a7c271de1afd66938ee564d2e8e1ef1e;hpb=ba177dd9743397cb43dad787fbe7748c8ea51cba;p=d2df-sdl.git diff --git a/src/game/g_gui.pas b/src/game/g_gui.pas index c276cfd..d7735ab 100644 --- a/src/game/g_gui.pas +++ b/src/game/g_gui.pas @@ -13,13 +13,13 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE DELPHI} +{$INCLUDE ../shared/a_modes.inc} unit g_gui; interface uses - e_graphics, e_input, e_log, g_playermodel, g_basic, MAPSTRUCT, wadreader; + e_graphics, e_input, e_log, g_playermodel, g_basic, MAPDEF, wadreader; const MAINMENU_HEADER_COLOR: TRGB = (R:255; G:255; B:255); @@ -177,7 +177,7 @@ type public Proc: procedure; ProcEx: procedure (sender: TGUITextButton); - constructor Create(Proc: Pointer; FontID: DWORD; Text: string); + constructor Create(aProc: Pointer; FontID: DWORD; Text: string); destructor Destroy(); override; procedure OnMessage(var Msg: TMessage); override; procedure Update(); override; @@ -348,7 +348,7 @@ type TGUIMapPreview = class(TGUIControl) private FMapData: array of TPreviewPanel; - FMapSize: TPoint; + FMapSize: TDFPoint; FScale: Single; public constructor Create(); @@ -474,8 +474,8 @@ type destructor Destroy; override; procedure OnMessage(var Msg: TMessage); override; function AddButton(fProc: Pointer; Caption: string; ShowWindow: string = ''): TGUITextButton; - function GetButton(Name: string): TGUITextButton; - procedure EnableButton(Name: string; e: Boolean); + function GetButton(aName: string): TGUITextButton; + procedure EnableButton(aName: string; e: Boolean); procedure AddSpace(); procedure Update; override; procedure Draw; override; @@ -519,8 +519,8 @@ type function AddFileList(fText: string; Width, Height: Word): TGUIFileListBox; function AddMemo(fText: string; Width, Height: Word): TGUIMemo; procedure ReAlign(); - function GetControl(Name: string): TGUIControl; - function GetControlsText(Name: string): TGUILabel; + function GetControl(aName: string): TGUIControl; + function GetControlsText(aName: string): TGUILabel; procedure Draw; override; procedure Update; override; procedure UpdateIndex(); @@ -546,8 +546,8 @@ implementation uses GL, GLExt, g_textures, g_sound, SysUtils, - g_game, Math, StrUtils, g_player, g_options, MAPREADER, - g_map, MAPDEF, g_weapons; + g_game, Math, StrUtils, g_player, g_options, + g_map, g_weapons, xdynrec; var Box: Array [0..8] of DWORD; @@ -907,11 +907,11 @@ begin if FShowWindow <> '' then g_GUI_ShowWindow(FShowWindow); end; -constructor TGUITextButton.Create(Proc: Pointer; FontID: DWORD; Text: string); +constructor TGUITextButton.Create(aProc: Pointer; FontID: DWORD; Text: string); begin inherited Create(); - Self.Proc := Proc; + Self.Proc := aProc; ProcEx := nil; FFont := TFont.Create(FontID, FONT_CHAR); @@ -1113,14 +1113,14 @@ begin end; end; -procedure TGUIMainMenu.EnableButton(Name: string; e: Boolean); +procedure TGUIMainMenu.EnableButton(aName: string; e: Boolean); var a: Integer; begin if FButtons = nil then Exit; for a := 0 to High(FButtons) do - if (FButtons[a] <> nil) and (FButtons[a].Name = Name) then + if (FButtons[a] <> nil) and (FButtons[a].Name = aName) then begin if e then FButtons[a].FColor := MAINMENU_ITEMS_COLOR else FButtons[a].FColor := MAINMENU_UNACTIVEITEMS_COLOR; @@ -1129,7 +1129,7 @@ begin end; end; -function TGUIMainMenu.GetButton(Name: string): TGUITextButton; +function TGUIMainMenu.GetButton(aName: string): TGUITextButton; var a: Integer; begin @@ -1138,7 +1138,7 @@ begin if FButtons = nil then Exit; for a := 0 to High(FButtons) do - if (FButtons[a] <> nil) and (FButtons[a].Name = Name) then + if (FButtons[a] <> nil) and (FButtons[a].Name = aName) then begin Result := FButtons[a]; Break; @@ -1401,7 +1401,7 @@ end; procedure TGUIMenu.Draw; var - a, x, y: Integer; + a, locx, locy: Integer; begin inherited; @@ -1416,32 +1416,32 @@ begin if (FIndex <> -1) and (FCounter > MENU_MARKERDELAY div 2) then begin - x := 0; - y := 0; + locx := 0; + locy := 0; if FItems[FIndex].Text <> nil then begin - x := FItems[FIndex].Text.FX; - y := FItems[FIndex].Text.FY; + locx := FItems[FIndex].Text.FX; + locy := FItems[FIndex].Text.FY; //HACK! if FItems[FIndex].Text.RightAlign then begin - x := x+FItems[FIndex].Text.FMaxWidth-FItems[FIndex].Text.GetWidth; + locx := locx+FItems[FIndex].Text.FMaxWidth-FItems[FIndex].Text.GetWidth; end; end else if FItems[FIndex].Control <> nil then begin - x := FItems[FIndex].Control.FX; - y := FItems[FIndex].Control.FY; + locx := FItems[FIndex].Control.FX; + locy := FItems[FIndex].Control.FY; end; - x := x-e_CharFont_GetMaxWidth(FFontID); + locx := locx-e_CharFont_GetMaxWidth(FFontID); - e_CharFont_PrintEx(FFontID, x, y, #16, _RGB(255, 0, 0)); + e_CharFont_PrintEx(FFontID, locx, locy, #16, _RGB(255, 0, 0)); end; end; -function TGUIMenu.GetControl(Name: String): TGUIControl; +function TGUIMenu.GetControl(aName: String): TGUIControl; var a: Integer; begin @@ -1450,16 +1450,16 @@ begin if FItems <> nil then for a := 0 to High(FItems) do if FItems[a].Control <> nil then - if LowerCase(FItems[a].Control.Name) = LowerCase(Name) then + if LowerCase(FItems[a].Control.Name) = LowerCase(aName) then begin Result := FItems[a].Control; Break; end; - Assert(Result <> nil, 'GUI control "'+Name+'" not found!'); + Assert(Result <> nil, 'GUI control "'+aName+'" not found!'); end; -function TGUIMenu.GetControlsText(Name: String): TGUILabel; +function TGUIMenu.GetControlsText(aName: String): TGUILabel; var a: Integer; begin @@ -1468,13 +1468,13 @@ begin if FItems <> nil then for a := 0 to High(FItems) do if FItems[a].Control <> nil then - if LowerCase(FItems[a].Control.Name) = LowerCase(Name) then + if LowerCase(FItems[a].Control.Name) = LowerCase(aName) then begin Result := FItems[a].Text; Break; end; - Assert(Result <> nil, 'GUI control''s text "'+Name+'" not found!'); + Assert(Result <> nil, 'GUI control''s text "'+aName+'" not found!'); end; function TGUIMenu.NewItem: Integer; @@ -2775,15 +2775,20 @@ end; procedure TGUIMapPreview.SetMap(Res: string); var WAD: TWADFile; - MapReader: TMapReader_1; - panels: TPanelsRec1Array; - header: TMapHeaderRec_1; - a: Integer; + panlist: TDynField; + pan: TDynRecord; + //header: TMapHeaderRec_1; FileName: string; Data: Pointer; Len: Integer; rX, rY: Single; + map: TDynRecord = nil; begin + FMapSize.X := 0; + FMapSize.Y := 0; + FScale := 0.0; + FMapData := nil; + FileName := g_ExtractWadName(Res); WAD := TWADFile.Create(); @@ -2802,47 +2807,43 @@ begin WAD.Free(); - MapReader := TMapReader_1.Create(); - - if not MapReader.LoadMap(Data) then - begin - FreeMem(Data); - MapReader.Free(); - FMapSize.X := 0; - FMapSize.Y := 0; - FScale := 0.0; - FMapData := nil; - Exit; + try + map := g_Map_ParseMap(Data, Len); + except + map.Free(); + raise; end; FreeMem(Data); - panels := MapReader.GetPanels(); - header := MapReader.GetMapHeader(); + panlist := map.field['panel']; + //header := GetMapHeader(map); - FMapSize.X := header.Width div 16; - FMapSize.Y := header.Height div 16; + FMapSize.X := map.Width div 16; + FMapSize.Y := map.Height div 16; - rX := Ceil(header.Width / (MAPPREVIEW_WIDTH*256.0)); - rY := Ceil(header.Height / (MAPPREVIEW_HEIGHT*256.0)); + rX := Ceil(map.Width / (MAPPREVIEW_WIDTH*256.0)); + rY := Ceil(map.Height / (MAPPREVIEW_HEIGHT*256.0)); FScale := max(rX, rY); FMapData := nil; - if panels <> nil then - for a := 0 to High(panels) do - if WordBool(panels[a].PanelType and (PANEL_WALL or PANEL_CLOSEDOOR or + if (panlist <> nil) then + begin + for pan in panlist do + begin + if (pan.PanelType and (PANEL_WALL or PANEL_CLOSEDOOR or PANEL_STEP or PANEL_WATER or - PANEL_ACID1 or PANEL_ACID2)) then + PANEL_ACID1 or PANEL_ACID2)) <> 0 then begin SetLength(FMapData, Length(FMapData)+1); with FMapData[High(FMapData)] do begin - X1 := panels[a].X div 16; - Y1 := panels[a].Y div 16; + X1 := pan.X div 16; + Y1 := pan.Y div 16; - X2 := (panels[a].X + panels[a].Width) div 16; - Y2 := (panels[a].Y + panels[a].Height) div 16; + X2 := (pan.X + pan.Width) div 16; + Y2 := (pan.Y + pan.Height) div 16; X1 := Trunc(X1/FScale + 0.5); Y1 := Trunc(Y1/FScale + 0.5); @@ -2857,13 +2858,13 @@ begin Y2 := Y2 + 1; end; - PanelType := panels[a].PanelType; + PanelType := pan.PanelType; + end; end; - end; - - panels := nil; + end; + end; - MapReader.Free(); + map.Free(); end; procedure TGUIMapPreview.ClearMap();