X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_panel.pas;h=c5eec299a67f3b75dbffbdae292e14c19ca3870a;hb=94a927ca673a2d8af4b8449d434f3c70f38b11c1;hp=16f43c2cbb2eedd0c7016b1fb1d9f4d6bfae35ce;hpb=d160acc56accd31347254c723f71a7413b6bdb30;p=d2df-sdl.git diff --git a/src/game/g_panel.pas b/src/game/g_panel.pas index 16f43c2..c5eec29 100644 --- a/src/game/g_panel.pas +++ b/src/game/g_panel.pas @@ -20,7 +20,8 @@ unit g_panel; interface uses - MAPDEF, BinEditor, g_textures, xdynrec; + SysUtils, Classes, + MAPDEF, g_textures, xdynrec; type TAddTextureArray = Array of @@ -124,8 +125,8 @@ type function GetTextureID(): Cardinal; function GetTextureCount(): Integer; - procedure SaveState(var Mem: TBinMemoryWriter); - procedure LoadState(var Mem: TBinMemoryReader); + procedure SaveState (st: TStream); + procedure LoadState (st: TStream); procedure positionChanged (); inline; @@ -157,10 +158,10 @@ type property width: Word read FWidth write FWidth; property height: Word read FHeight write FHeight; property panelType: Word read FPanelType write FPanelType; - property enabled: Boolean read FEnabled write FEnabled; // Ñîõðàíÿòü ïðè SaveState? - property door: Boolean read FDoor write FDoor; // Ñîõðàíÿòü ïðè SaveState? - property liftType: Byte read FLiftType write FLiftType; // Ñîõðàíÿòü ïðè SaveState? - property lastAnimLoop: Byte read FLastAnimLoop write FLastAnimLoop; // Ñîõðàíÿòü ïðè SaveState? + property enabled: Boolean read FEnabled write FEnabled; + property door: Boolean read FDoor write FDoor; + property liftType: Byte read FLiftType write FLiftType; + property lastAnimLoop: Byte read FLastAnimLoop write FLastAnimLoop; property movingSpeedX: Integer read getMovingSpeedX write setMovingSpeedX; property movingSpeedY: Integer read getMovingSpeedY write setMovingSpeedY; @@ -208,8 +209,8 @@ var implementation uses - SysUtils, e_texture, g_basic, g_map, g_game, g_gfx, e_graphics, g_weapons, g_triggers, - g_console, g_language, g_monsters, g_player, g_grid, e_log, GL, utils; + e_texture, g_basic, g_map, g_game, g_gfx, e_graphics, g_weapons, g_triggers, + g_console, g_language, g_monsters, g_player, g_grid, e_log, GL, utils, xstreams; const PANEL_SIGNATURE = $4C4E4150; // 'PANL' @@ -1013,123 +1014,112 @@ end; const PAN_SAVE_VERSION = 1; -procedure TPanel.SaveState (var Mem: TBinMemoryWriter); +procedure TPanel.SaveState (st: TStream); var - sig: DWORD; anim: Boolean; - ver: Byte; begin - if (Mem = nil) then exit; + if (st = nil) then exit; // Ñèãíàòóðà ïàíåëè - sig := PANEL_SIGNATURE; // 'PANL' - Mem.WriteDWORD(sig); - ver := PAN_SAVE_VERSION; - Mem.WriteByte(ver); + utils.writeSign(st, 'PANL'); + utils.writeInt(st, Byte(PAN_SAVE_VERSION)); // Îòêðûòà/çàêðûòà, åñëè äâåðü - Mem.WriteBoolean(FEnabled); + utils.writeBool(st, FEnabled); // Íàïðàâëåíèå ëèôòà, åñëè ëèôò - Mem.WriteByte(FLiftType); + utils.writeInt(st, Byte(FLiftType)); // Íîìåð òåêóùåé òåêñòóðû - Mem.WriteInt(FCurTexture); - // Êîîðäû - Mem.WriteInt(FX); - Mem.WriteInt(FY); - Mem.WriteWord(FWidth); - Mem.WriteWord(FHeight); - // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà + utils.writeInt(st, Integer(FCurTexture)); + // Êîîðäèíàòû è ðàçìåð + utils.writeInt(st, Integer(FX)); + utils.writeInt(st, Integer(FY)); + utils.writeInt(st, Word(FWidth)); + utils.writeInt(st, Word(FHeight)); + // Àíèìèðîâàíà ëè òåêóùàÿ òåêñòóðà if (FCurTexture >= 0) and (FTextureIDs[FCurTexture].Anim) then begin assert(FTextureIDs[FCurTexture].AnTex <> nil, 'TPanel.SaveState: No animation object'); - anim := True; + anim := true; end else begin - anim := False; + anim := false; end; - Mem.WriteBoolean(anim); + utils.writeBool(st, anim); // Åñëè äà - ñîõðàíÿåì àíèìàöèþ - if anim then FTextureIDs[FCurTexture].AnTex.SaveState(Mem); + if anim then FTextureIDs[FCurTexture].AnTex.SaveState(st); // moving platform state - Mem.WriteInt(mMovingSpeed.X); - Mem.WriteInt(mMovingSpeed.Y); - Mem.WriteInt(mMovingStart.X); - Mem.WriteInt(mMovingStart.Y); - Mem.WriteInt(mMovingEnd.X); - Mem.WriteInt(mMovingEnd.Y); - - Mem.WriteInt(mSizeSpeed.w); - Mem.WriteInt(mSizeSpeed.h); - Mem.WriteInt(mSizeEnd.w); - Mem.WriteInt(mSizeEnd.h); - - Mem.WriteBoolean(mMovingActive); - Mem.WriteBoolean(mMoveOnce); - - Mem.WriteInt(mEndPosTrig); - Mem.WriteInt(mEndSizeTrig); + utils.writeInt(st, Integer(mMovingSpeed.X)); + utils.writeInt(st, Integer(mMovingSpeed.Y)); + utils.writeInt(st, Integer(mMovingStart.X)); + utils.writeInt(st, Integer(mMovingStart.Y)); + utils.writeInt(st, Integer(mMovingEnd.X)); + utils.writeInt(st, Integer(mMovingEnd.Y)); + + utils.writeInt(st, Integer(mSizeSpeed.w)); + utils.writeInt(st, Integer(mSizeSpeed.h)); + utils.writeInt(st, Integer(mSizeEnd.w)); + utils.writeInt(st, Integer(mSizeEnd.h)); + + utils.writeBool(st, mMovingActive); + utils.writeBool(st, mMoveOnce); + + utils.writeInt(st, Integer(mEndPosTrig)); + utils.writeInt(st, Integer(mEndSizeTrig)); end; -procedure TPanel.LoadState (var Mem: TBinMemoryReader); -var - sig: DWORD; - anim: Boolean; - ver: Byte; +procedure TPanel.LoadState (st: TStream); begin - if (Mem = nil) then exit; + if (st = nil) then exit; // Ñèãíàòóðà ïàíåëè - Mem.ReadDWORD(sig); - if (sig <> PANEL_SIGNATURE) then raise EBinSizeError.Create('TPanel.LoadState: wrong panel signature'); // 'PANL' - Mem.ReadByte(ver); - if (ver <> PAN_SAVE_VERSION) then raise EBinSizeError.Create('TPanel.LoadState: invalid panel version'); + if not utils.checkSign(st, 'PANL') then raise XStreamError.create('wrong panel signature'); + if (utils.readByte(st) <> PAN_SAVE_VERSION) then raise XStreamError.create('wrong panel version'); // Îòêðûòà/çàêðûòà, åñëè äâåðü - Mem.ReadBoolean(FEnabled); + FEnabled := utils.readBool(st); // Íàïðàâëåíèå ëèôòà, åñëè ëèôò - Mem.ReadByte(FLiftType); + FLiftType := utils.readByte(st); // Íîìåð òåêóùåé òåêñòóðû - Mem.ReadInt(FCurTexture); - // Êîîðäû - Mem.ReadInt(FX); - Mem.ReadInt(FY); - Mem.ReadWord(FWidth); - Mem.ReadWord(FHeight); - //e_LogWritefln('panel %s(%s): old=(%s,%s); new=(%s,%s); delta=(%s,%s)', [arrIdx, proxyId, ox, oy, FX, FY, FX-ox, FY-oy]); + FCurTexture := utils.readLongInt(st); + // Êîîðäèíàòû è ðàçìåð + FX := utils.readLongInt(st); + FY := utils.readLongInt(st); + FWidth := utils.readWord(st); + FHeight := utils.readWord(st); // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà - Mem.ReadBoolean(anim); - // Åñëè äà - çàãðóæàåì àíèìàöèþ - if anim then + if utils.readBool(st) then begin + // Åñëè äà - çàãðóæàåì àíèìàöèþ Assert((FCurTexture >= 0) and (FTextureIDs[FCurTexture].Anim) and (FTextureIDs[FCurTexture].AnTex <> nil), 'TPanel.LoadState: No animation object'); - FTextureIDs[FCurTexture].AnTex.LoadState(Mem); + FTextureIDs[FCurTexture].AnTex.LoadState(st); end; // moving platform state - Mem.ReadInt(mMovingSpeed.X); - Mem.ReadInt(mMovingSpeed.Y); - Mem.ReadInt(mMovingStart.X); - Mem.ReadInt(mMovingStart.Y); - Mem.ReadInt(mMovingEnd.X); - Mem.ReadInt(mMovingEnd.Y); + mMovingSpeed.X := utils.readLongInt(st); + mMovingSpeed.Y := utils.readLongInt(st); + mMovingStart.X := utils.readLongInt(st); + mMovingStart.Y := utils.readLongInt(st); + mMovingEnd.X := utils.readLongInt(st); + mMovingEnd.Y := utils.readLongInt(st); - Mem.ReadInt(mSizeSpeed.w); - Mem.ReadInt(mSizeSpeed.h); - Mem.ReadInt(mSizeEnd.w); - Mem.ReadInt(mSizeEnd.h); + mSizeSpeed.w := utils.readLongInt(st); + mSizeSpeed.h := utils.readLongInt(st); + mSizeEnd.w := utils.readLongInt(st); + mSizeEnd.h := utils.readLongInt(st); - Mem.ReadBoolean(mMovingActive); - Mem.ReadBoolean(mMoveOnce); + mMovingActive := utils.readBool(st); + mMoveOnce := utils.readBool(st); - Mem.ReadInt(mEndPosTrig); - Mem.ReadInt(mEndSizeTrig); + mEndPosTrig := utils.readLongInt(st); + mEndSizeTrig := utils.readLongInt(st); positionChanged(); //mapGrid.proxyEnabled[proxyId] := FEnabled; // done in g_map.pas end; + end.