X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=04719fccc88dca671b0e98a9838a388f55d7170f;hb=4aae1df7801692bcde3df413028c83edd5c3c655;hp=45f9e6b5d80369ca2c9ea62ec458404871947ad1;hpb=082b546b38711030b4490facbefa37a331cb1a37;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 45f9e6b..04719fc 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -14,13 +14,14 @@ * along with this program. If not, see . *) {$INCLUDE ../shared/a_modes.inc} +{$M+} unit g_player; interface uses e_graphics, g_playermodel, g_basic, g_textures, - g_weapons, g_phys, g_sound, g_saveload, MAPSTRUCT, + g_weapons, g_phys, g_sound, g_saveload, MAPDEF, BinEditor, g_panel; const @@ -249,6 +250,11 @@ type FDummy: Boolean; FFireTime: Integer; + // debug: viewport offset + viewPortX, viewPortY, viewPortW, viewPortH: Integer; + + function isValidViewPort (): Boolean; inline; + constructor Create(); virtual; destructor Destroy(); override; procedure Respawn(Silent: Boolean; Force: Boolean = False); virtual; @@ -316,6 +322,11 @@ type procedure getMapBox (out x, y, w, h: Integer); inline; + public + property Vel: TPoint2i read FObj.Vel; + property Obj: TObj read FObj; + + published property Name: String read FName write FName; property Model: TPlayerModel read FModel; property Health: Integer read FHealth write FHealth; @@ -342,8 +353,6 @@ type property GameVelY: Integer read FObj.Vel.Y write FObj.Vel.Y; property GameAccelX: Integer read FObj.Accel.X write FObj.Accel.X; property GameAccelY: Integer read FObj.Accel.Y write FObj.Accel.Y; - property Vel: TPoint2i read FObj.Vel; - property Obj: TObj read FObj; property IncCam: Integer read FIncCam write FIncCam; property UID: Word read FUID write FUID; property JustTeleported: Boolean read FJustTeleported write FJustTeleported; @@ -519,8 +528,9 @@ implementation uses e_log, g_map, g_items, g_console, SysUtils, g_gfx, Math, - g_options, g_triggers, g_menu, MAPDEF, g_game, - wadreader, g_main, g_monsters, CONFIG, g_language, g_net, g_netmsg; + g_options, g_triggers, g_menu, g_game, g_grid, + wadreader, g_main, g_monsters, CONFIG, g_language, + g_net, g_netmsg, g_window, GL, g_holmes; type TBotProfile = record @@ -557,7 +567,7 @@ const ANGLE_LEFTUP = 125; ANGLE_LEFTDOWN = -145; PLAYER_HEADRECT: TRectWH = (X:24; Y:12; Width:20; Height:12); - WEAPONPOINT: Array [TDirection] of TPoint = ((X:16; Y:32), (X:47; Y:32)); + WEAPONPOINT: Array [TDirection] of TDFPoint = ((X:16; Y:32), (X:47; Y:32)); BOT_MAXJUMP = 84; BOT_LONGDIST = 300; BOT_UNSAFEDIST = 128; @@ -1705,7 +1715,7 @@ end; procedure g_Player_DrawCorpses(); var i: Integer; - a: TPoint; + a: TDFPoint; begin if gGibs <> nil then for i := 0 to High(gGibs) do @@ -1736,7 +1746,7 @@ end; procedure g_Player_DrawShells(); var i: Integer; - a: TPoint; + a: TDFPoint; begin if gShells <> nil then for i := 0 to High(gShells) do @@ -1844,6 +1854,8 @@ end; { T P l a y e r : } +function TPlayer.isValidViewPort (): Boolean; inline; begin result := (viewPortW > 0) and (viewPortH > 0); end; + procedure TPlayer.BFGHit(); begin g_Weapon_BFGHit(FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2), @@ -1987,6 +1999,11 @@ end; constructor TPlayer.Create(); begin + viewPortX := 0; + viewPortY := 0; + viewPortW := 0; + viewPortH := 0; + FIamBot := False; FDummy := False; FSpawned := False; @@ -2258,10 +2275,10 @@ begin e_GetTextureSize(ID, @w, @h); if FDirection = D_LEFT then e_Draw(ID, FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2)-(w div 2)+4, - FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7, 0, True, False) + FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+FObj.slopeUpLeft, 0, True, False) else e_Draw(ID, FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2)-(w div 2)-2, - FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7, 0, True, False); + FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+FObj.slopeUpLeft, 0, True, False); end; if FMegaRulez[MR_INVIS] > gTime then @@ -2274,15 +2291,15 @@ begin else dr := True; if dr then - FModel.Draw(FObj.X, FObj.Y, 200) + FModel.Draw(FObj.X, FObj.Y+FObj.slopeUpLeft, 200) else - FModel.Draw(FObj.X, FObj.Y); + FModel.Draw(FObj.X, FObj.Y+FObj.slopeUpLeft); end else - FModel.Draw(FObj.X, FObj.Y, 254); + FModel.Draw(FObj.X, FObj.Y+FObj.slopeUpLeft, 254); end else - FModel.Draw(FObj.X, FObj.Y); + FModel.Draw(FObj.X, FObj.Y+FObj.slopeUpLeft); end; if g_debug_Frames then @@ -2302,7 +2319,28 @@ begin DrawAim(); end; + procedure TPlayer.DrawAim(); + procedure drawCast (sz: Integer; ax0, ay0, ax1, ay1: Integer); + var + ex, ey: Integer; + begin + if isValidViewPort and (self = gPlayer1) then + begin + g_Holmes_plrLaser(ax0, ay0, ax1, ay1); + end; + + e_DrawLine(sz, ax0, ay0, ax1, ay1, 255, 0, 0, 96); + if (g_Map_traceToNearestWall(ax0, ay0, ax1, ay1, @ex, @ey) <> nil) then + begin + e_DrawLine(sz, ax0, ay0, ex, ey, 0, 255, 0, 96); + end + else + begin + e_DrawLine(sz, ax0, ay0, ex, ey, 0, 0, 255, 96); + end; + end; + var wx, wy, xx, yy: Integer; angle: SmallInt; @@ -2389,7 +2427,11 @@ begin end; xx := Trunc(Cos(-DegToRad(angle)) * len) + wx; yy := Trunc(Sin(-DegToRad(angle)) * len) + wy; + {$IF DEFINED(D2F_DEBUG)} + drawCast(sz, wx, wy, xx, yy); + {$ELSE} e_DrawLine(sz, wx, wy, xx, yy, 255, 0, 0, 96); + {$ENDIF} end; procedure TPlayer.DrawGUI();