diff --git a/src/game/g_gui.pas b/src/game/g_gui.pas
index 5c60e10d77ec9a8ce97bea6abc446b984350034d..d7735ab374d568a4e51cf47c543f1a2c458d7522 100644 (file)
--- a/src/game/g_gui.pas
+++ b/src/game/g_gui.pas
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);
TGUIMapPreview = class(TGUIControl)
private
FMapData: array of TPreviewPanel;
- FMapSize: TPoint;
+ FMapSize: TDFPoint;
FScale: Single;
public
constructor Create();
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;
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();
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);
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();