X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fopengl%2Fr_playermodel.pas;h=cc10d127d89fb67e0a73a1e191771e8328b3e842;hb=16342bee09fa001d05697571124e48a93cd35f2c;hp=c4fe391680359245ceb2fa49000a899ed6e60774;hpb=f517a19e84dae6941cff317aaf6fbcc3a5c5bb6f;p=d2df-sdl.git diff --git a/src/game/opengl/r_playermodel.pas b/src/game/opengl/r_playermodel.pas index c4fe391..cc10d12 100644 --- a/src/game/opengl/r_playermodel.pas +++ b/src/game/opengl/r_playermodel.pas @@ -25,13 +25,18 @@ interface procedure r_PlayerModel_Free; procedure r_PlayerModel_Update; procedure r_PlayerModel_Draw (pm: TPlayerModel; X, Y: Integer; Alpha: Byte = 0); - procedure r_PlayerModel_DrawGibs; - function r_PlayerModel_GetGibRect (m, id: Integer): TRectWH; + {$IFDEF ENABLE_GIBS} + procedure r_PlayerModel_DrawGibs; + function r_PlayerModel_GetGibRect (m, id: Integer): TRectWH; + {$ENDIF} implementation uses + {$IFDEF ENABLE_GIBS} + g_gibs, + {$ENDIF} SysUtils, Classes, Math, MAPDEF, utils, e_log, wadreader, ImagingTypes, Imaging, ImagingUtility, @@ -53,20 +58,24 @@ implementation base: DWORD; mask: DWORD; end; - Gibs: Array of record - base: DWORD; - mask: DWORD; - rect: TRectWH; - end; + {$IFDEF ENABLE_GIBS} + Gibs: Array of record + base: DWORD; + mask: DWORD; + rect: TRectWH; + end; + {$ENDIF} end; RedFlagFrames: DWORD; BlueFlagFrames: DWORD; FlagAnimState: TAnimationState; +{$IFDEF ENABLE_GIBS} function r_PlayerModel_GetGibRect (m, id: Integer): TRectWH; begin Result := Models[m].Gibs[id].rect end; +{$ENDIF} procedure r_PlayerModel_Initialize; begin @@ -180,12 +189,10 @@ implementation end; procedure r_PlayerModel_Load; - var - ID1, ID2: DWORD; - i, a, b: Integer; - prefix, aname: String; - base, mask: Pointer; - baseLen, maskLen: Integer; + {$IFDEF ENABLE_GIBS} + var base, mask: Pointer; baseLen, maskLen: Integer; + {$ENDIF} + var ID1, ID2: DWORD; i, a, b: Integer; prefix, aname: String; begin g_Frames_CreateWAD(@RedFlagFrames, 'FRAMES_FLAG_RED', GameWAD + ':TEXTURES\FLAGRED', 64, 64, 5, False); g_Frames_CreateWAD(@BlueFlagFrames, 'FRAMES_FLAG_BLUE', GameWAD + ':TEXTURES\FLAGBLUE', 64, 64, 5, False); @@ -234,28 +241,30 @@ implementation end end end; - SetLength(Models[i].Gibs, PlayerModelsArray[i].GibsCount); - if PlayerModelsArray[i].GibsCount > 0 then - begin - r_PlayerModel_LoadResource(prefix + PlayerModelsArray[i].GibsResource, base, baseLen); - r_PlayerModel_LoadResource(prefix + PlayerModelsArray[i].GibsMask, mask, maskLen); - if (base <> nil) and (mask <> nil) then + {$IFDEF ENABLE_GIBS} + SetLength(Models[i].Gibs, PlayerModelsArray[i].GibsCount); + if PlayerModelsArray[i].GibsCount > 0 then begin - for a := 0 to PlayerModelsArray[i].GibsCount - 1 do + r_PlayerModel_LoadResource(prefix + PlayerModelsArray[i].GibsResource, base, baseLen); + r_PlayerModel_LoadResource(prefix + PlayerModelsArray[i].GibsMask, mask, maskLen); + if (base <> nil) and (mask <> nil) then begin - if e_CreateTextureMemEx(base, baseLen, Models[i].Gibs[a].base, a * 32, 0, 32, 32) and - e_CreateTextureMemEx(mask, maskLen, Models[i].Gibs[a].mask, a * 32, 0, 32, 32) then + for a := 0 to PlayerModelsArray[i].GibsCount - 1 do begin - Models[i].Gibs[a].rect := g_PlayerModel_CalcGibSize(base, baseLen, a * 32, 0, 32, 32); - with Models[i].Gibs[a].Rect do - if Height > 3 then - Height := Height - 1 - Random(2); // ??? + if e_CreateTextureMemEx(base, baseLen, Models[i].Gibs[a].base, a * 32, 0, 32, 32) and + e_CreateTextureMemEx(mask, maskLen, Models[i].Gibs[a].mask, a * 32, 0, 32, 32) then + begin + Models[i].Gibs[a].rect := g_PlayerModel_CalcGibSize(base, baseLen, a * 32, 0, 32, 32); + with Models[i].Gibs[a].Rect do + if Height > 3 then + Height := Height - 1 - Random(2); // ??? + end end - end - end; - FreeMem(mask); - FreeMem(base); - end + end; + FreeMem(mask); + FreeMem(base); + end + {$ENDIF} end end end; @@ -321,7 +330,9 @@ begin FlagAnimState, X + IfThen(pm.Direction = TDirection.D_LEFT, fp.X - 1, 2 * FLAG_BASEPOINT.X - fp.X + 1) - FLAG_BASEPOINT.X, Y + fp.Y - FLAG_BASEPOINT.Y + 1, + 0, Mirror, + False, p, IfThen(pm.Direction = TDirection.D_RIGHT, fa, -fa) ); @@ -363,15 +374,13 @@ begin // Модель: if (pm.Direction = TDirection.D_LEFT) and (Models[pm.id].Frames[TDirection.D_LEFT, pm.CurrentAnimation].base <> 0) then begin - pm.AnimState.Alpha := Alpha; // !!! FramesID := Models[pm.id].Frames[TDirection.D_LEFT, pm.CurrentAnimation].base; - r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, TMirrorType.None); + r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Alpha, TMirrorType.None, False); end else begin - pm.AnimState.Alpha := Alpha; // !!! FramesID := Models[pm.id].Frames[TDirection.D_RIGHT, pm.CurrentAnimation].base; - r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Mirror); + r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Alpha, Mirror, False); end; // Маска модели: @@ -379,15 +388,13 @@ begin if (pm.Direction = TDirection.D_LEFT) and (Models[pm.id].Frames[TDirection.D_LEFT, pm.CurrentAnimation].mask <> 0) then begin - pm.AnimState.Alpha := Alpha; // !!! FramesID := Models[pm.id].Frames[TDirection.D_LEFT, pm.CurrentAnimation].mask; - r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, TMirrorType.None); + r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Alpha, TMirrorType.None, False); end else begin - pm.AnimState.Alpha := Alpha; // !!! FramesID := Models[pm.id].Frames[TDirection.D_RIGHT, pm.CurrentAnimation].mask; - r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Mirror); + r_AnimationState_Draw(FramesID, pm.AnimState, X, Y, Alpha, Mirror, False); end; e_Colors.R := 255; @@ -395,6 +402,7 @@ begin e_Colors.B := 255; end; +{$IFDEF ENABLE_GIBS} procedure r_PlayerModel_DrawGibs; var i, fX, fY, m, id: Integer; a: TDFPoint; pobj: ^TObj; begin @@ -422,5 +430,6 @@ end; end end end; +{$ENDIF} end.