X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_holmes.pas;h=d96d234503f202420944fdd9c4e7e840fb602745;hb=52cb3c5b37a706c085c14e89b33361ac349bbe74;hp=d7ab6bfec15ac5484115a67a40a23b0f22d30b24;hpb=a17222535319cb4089e3f9a92711731c015819b3;p=d2df-sdl.git diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas index d7ab6bf..d96d234 100644 --- a/src/game/g_holmes.pas +++ b/src/game/g_holmes.pas @@ -102,14 +102,17 @@ var msY: Integer = -666; msB: Word = 0; // button state kbS: Word = 0; // keyboard modifiers state + showGrid: Boolean = true; showMonsInfo: Boolean = false; showMonsLOS2Plr: Boolean = false; showAllMonsCells: Boolean = false; + showMapCurPos: Boolean = false; // ////////////////////////////////////////////////////////////////////////// // {$INCLUDE g_holmes.inc} + // ////////////////////////////////////////////////////////////////////////// // procedure g_Holmes_VidModeChanged (); begin @@ -143,6 +146,7 @@ var laserX0, laserY0, laserX1, laserY1: Integer; monMarkedUID: Integer = -1; + procedure g_Holmes_plrView (viewPortX, viewPortY, viewPortW, viewPortH: Integer); begin vpSet := true; @@ -172,8 +176,11 @@ procedure plrDebugMouse (var ev: THMouseEvent); function wallToggle (pan: TPanel; tag: Integer): Boolean; begin result := false; // don't stop - e_WriteLog(Format('wall #%d(%d); enabled=%d (%d)', [pan.arrIdx, pan.proxyId, Integer(pan.Enabled), Integer(mapGrid.proxyEnabled[pan.proxyId])]), MSG_NOTIFY); - if pan.Enabled then g_Map_DisableWall(pan.arrIdx) else g_Map_EnableWall(pan.arrIdx); + e_WriteLog(Format('wall #%d(%d); enabled=%d (%d); (%d,%d)-(%d,%d)', [pan.arrIdx, pan.proxyId, Integer(pan.Enabled), Integer(mapGrid.proxyEnabled[pan.proxyId]), pan.X, pan.Y, pan.Width, pan.Height]), MSG_NOTIFY); + if ((kbS and THKeyEvent.ModAlt) <> 0) then + begin + if pan.Enabled then g_Map_DisableWall(pan.arrIdx) else g_Map_EnableWall(pan.arrIdx); + end; end; function monsAtDump (mon: TMonster; tag: Integer): Boolean; @@ -397,9 +404,9 @@ begin glPushMatrix(); glTranslatef(-vpx, -vpy, 0); - drawTileGrid(); + if (showGrid) then drawTileGrid(); - g_Mons_AlongLine(laserX0, laserY0, laserX1, laserY1, monsCollector, true); + if (laserSet) then g_Mons_AlongLine(laserX0, laserY0, laserX1, laserY1, monsCollector, true); if (monMarkedUID <> -1) then begin @@ -414,9 +421,9 @@ begin if showAllMonsCells then g_Mons_ForEach(highlightAllMonsterCells); - //e_DrawPoint(16, laserX0, laserY0, 255, 255, 255); - glPopMatrix(); + + if showMapCurPos then drawText8(4, gWinSizeY-10, Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY]), 255, 255, 0); end; @@ -436,6 +443,15 @@ end; function g_Holmes_KeyEvent (var ev: THKeyEvent): Boolean; var mon: TMonster; + pan: TPanel; + x, y, w, h: Integer; + ex, ey: Integer; + dx, dy: Integer; + + procedure dummyWallTrc (cx, cy: Integer); + begin + end; + begin result := false; msB := ev.bstate; @@ -489,6 +505,57 @@ begin end; exit; end; + // C-T: teleport player + if (ev.scan = SDL_SCANCODE_T) and ((ev.kstate and THKeyEvent.ModCtrl) <> 0) then + begin + result := true; + //e_WriteLog(Format('TELEPORT: (%d,%d)', [pmsCurMapX, pmsCurMapY]), MSG_NOTIFY); + if (gPlayers[0] <> nil) then + begin + gPlayers[0].getMapBox(x, y, w, h); + gPlayers[0].TeleportTo(pmsCurMapX-w div 2, pmsCurMapY-h div 2, true, 69); // 69: don't change dir + end; + exit; + end; + // C-P: show cursor position on the map + if (ev.scan = SDL_SCANCODE_P) and ((ev.kstate and THKeyEvent.ModCtrl) <> 0) then + begin + result := true; + showMapCurPos := not showMapCurPos; + exit; + end; + // C-G: toggle grid + if (ev.scan = SDL_SCANCODE_G) and ((ev.kstate and THKeyEvent.ModCtrl) <> 0) then + begin + result := true; + showGrid := not showGrid; + exit; + end; + // C-UP, C-DOWN, C-LEFT, C-RIGHT: trace 10 pixels from cursor in the respective direction + if ((ev.scan = SDL_SCANCODE_UP) or (ev.scan = SDL_SCANCODE_DOWN) or (ev.scan = SDL_SCANCODE_LEFT) or (ev.scan = SDL_SCANCODE_RIGHT)) and + ((ev.kstate and THKeyEvent.ModCtrl) <> 0) then + begin + result := true; + dx := pmsCurMapX; + dy := pmsCurMapY; + case ev.scan of + SDL_SCANCODE_UP: dy -= 120; + SDL_SCANCODE_DOWN: dy += 120; + SDL_SCANCODE_LEFT: dx -= 120; + SDL_SCANCODE_RIGHT: dx += 120; + end; + {$IF DEFINED(D2F_DEBUG)} + //mapGrid.dbgRayTraceTileHitCB := dummyWallTrc; + mapGrid.dbgShowTraceLog := true; + {$ENDIF} + pan := g_Map_traceToNearest(pmsCurMapX, pmsCurMapY, dx, dy, (GridTagWall or GridTagDoor or GridTagStep or GridTagAcid1 or GridTagAcid2 or GridTagWater), @ex, @ey); + {$IF DEFINED(D2F_DEBUG)} + //mapGrid.dbgRayTraceTileHitCB := nil; + mapGrid.dbgShowTraceLog := false; + {$ENDIF} + e_LogWritefln('v-trace: (%d,%d)-(%d,%d); end=(%d,%d); hit=%d', [pmsCurMapX, pmsCurMapY, dx, dy, ex, ey, (pan <> nil)]); + exit; + end; end; end;