DEADSOFTWARE

holmes now can work without lasersight
[d2df-sdl.git] / src / game / g_player.pas
index 1c9996dc526f307bfadbf96abf618f1108bdf441..ebbd2043e5fc69d7784346b031c5b51d804f637c 100644 (file)
@@ -249,6 +249,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;
@@ -521,7 +526,7 @@ uses
   e_log, g_map, g_items, g_console, SysUtils, g_gfx, Math,
   g_options, g_triggers, g_menu, MAPDEF, g_game, g_grid,
   wadreader, g_main, g_monsters, CONFIG, g_language,
-  g_net, g_netmsg;
+  g_net, g_netmsg, g_window, GL, g_holmes;
 
 type
   TBotProfile = record
@@ -1845,6 +1850,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),
@@ -1988,6 +1995,11 @@ end;
 
 constructor TPlayer.Create();
 begin
+  viewPortX := 0;
+  viewPortY := 0;
+  viewPortW := 0;
+  viewPortH := 0;
+
   FIamBot := False;
   FDummy := False;
   FSpawned := False;
@@ -2303,37 +2315,25 @@ begin
     DrawAim();
 end;
 
+
 procedure TPlayer.DrawAim();
   procedure drawCast (sz: Integer; ax0, ay0, ax1, ay1: Integer);
   var
     ex, ey: Integer;
-    mon: TMonster;
-    mx, my, mw, mh: Integer;
   begin
-    e_DrawLine(sz, ax0, ay0, ax1, ay1, 255, 0, 0, 96);
-    if g_Map_traceToNearestWall(ax0, ay0, ax1, ay1, @ex, @ey) then
-    begin
-      e_DrawLine(sz, ax0, ay0, ex, ey, 0, 255, 0, 96);
-      e_DrawPoint(4, ex, ey, 255, 127, 0);
-    end
-    else
+    if isValidViewPort and (self = gPlayer1) then
     begin
-      e_DrawLine(sz, ax0, ay0, ex, ey, 0, 0, 255, 96);
+      g_Holmes_plrLaser(ax0, ay0, ax1, ay1);
     end;
 
-    mon := g_Mons_ByIdx(0);
-    mon.getMapBox(mx, my, mw, mh);
-    ax1 := mx+mw div 2;
-    ay1 := my+mh div 2;
-    e_DrawLine(2, ax0, ay0, ax1, ay1, 0, 96, 96, 96);
-
-    if lineAABBIntersects(ax0, ay0, ax1, ay1,  mx, my, mw, mh, ex, ey) then
+    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(2, ax0, ay0, ex, ey, 255, 255, 0, 96);
+      e_DrawLine(sz, ax0, ay0, ex, ey, 0, 255, 0, 96);
     end
     else
     begin
-      e_DrawLine(2, ax0, ay0, ex, ey, 255, 127, 0, 96);
+      e_DrawLine(sz, ax0, ay0, ex, ey, 0, 0, 255, 96);
     end;
   end;
 
@@ -2423,10 +2423,10 @@ begin
   end;
   xx := Trunc(Cos(-DegToRad(angle)) * len) + wx;
   yy := Trunc(Sin(-DegToRad(angle)) * len) + wy;
-  {$IF FALSE}
-  e_DrawLine(sz, wx, wy, xx, yy, 255, 0, 0, 96);
-  {$ELSE}
+  {$IF DEFINED(D2F_DEBUG)}
   drawCast(sz, wx, wy, xx, yy);
+  {$ELSE}
+  e_DrawLine(sz, wx, wy, xx, yy, 255, 0, 0, 96);
   {$ENDIF}
 end;