X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_holmes.pas;h=60aa34b159d10418be898938321f893d87d8c09c;hb=1bddfaf7b6421f1659a6f211dfdb1dfaef5d5173;hp=0b5c00de044b53516432b702412a73a6e5d6f48d;hpb=772128d5e2cfed3d8abbb325573a1c873d4fd912;p=d2df-sdl.git diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas index 0b5c00d..60aa34b 100644 --- a/src/game/g_holmes.pas +++ b/src/game/g_holmes.pas @@ -1,4 +1,4 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,8 +32,7 @@ uses procedure g_Holmes_Draw (); procedure g_Holmes_DrawUI (); -procedure g_Holmes_MouseEvent (var ev: TFUIMouseEvent); -procedure g_Holmes_KeyEvent (var ev: TFUIKeyEvent); +procedure g_Holmes_OnEvent (var ev: TFUIEvent); // hooks for player procedure g_Holmes_plrViewPos (viewPortX, viewPortY: Integer); @@ -201,7 +200,7 @@ procedure createHelpWindow (); box.appendChild(stx); // span span := TUISpan.Create(); - span.flDefaultSize := TLaySize.Create(4, 1); + span.flDefaultSize := TLaySize.Create(12, 1); span.flExpand := true; box.appendChild(span); // text @@ -331,6 +330,7 @@ begin //winHelp.appendChild(llb); uiLayoutCtl(winHelp); + winHelp.escClose := true; winHelp.centerInScreen(); end; @@ -488,10 +488,15 @@ end; procedure toggleHelpWindow (arg: Integer=-1); begin - if (winHelp = nil) then createHelpWindow(); + if (winHelp = nil) then + begin + if (arg = 0) then exit; + createHelpWindow(); + end; if (arg < 0) then begin if not uiVisibleWindow(winHelp) then uiAddWindow(winHelp) else uiRemoveWindow(winHelp); end else if (arg = 0) then begin if uiVisibleWindow(winHelp) then uiRemoveWindow(winHelp); end - else begin if not uiVisibleWindow(winHelp) then uiAddWindow(winHelp); end + else begin if (not uiVisibleWindow(winHelp)) then uiAddWindow(winHelp); end; + if (not uiVisibleWindow(winHelp)) then FreeAndNil(winHelp); end; procedure toggleOptionsWindow (arg: Integer=-1); @@ -543,16 +548,6 @@ function pmsCurMapX (): Integer; inline; begin result := round(msX/g_dbg_scale)+ function pmsCurMapY (): Integer; inline; begin result := round(msY/g_dbg_scale)+vpy; end; -procedure plrDebugMouse (var ev: TFUIMouseEvent); -begin - //e_WriteLog(Format('mouse: x=%d; y=%d; but=%d; bstate=%d', [msx, msy, but, bstate]), MSG_NOTIFY); - if (gPlayer1 = nil) or not vpSet then exit; - //if (ev.kind <> TFUIMouseEvent.Press) then exit; - //e_WriteLog(Format('mev: %d', [Integer(ev.kind)]), MSG_NOTIFY); - msbindExecute(ev); -end; - - {$IFDEF HOLMES_OLD_OUTLINES} var edgeBmp: array of Byte = nil; @@ -1084,7 +1079,7 @@ procedure plrDebugDraw (); if showMonsInfo then begin //fillRect(mx-4, my-7*8-6, 110, 7*8+6, 0, 0, 94, 250); - hlmContext.font := 'msx'; + hlmContext.font := 'msx6'; hlmContext.color := TGxRGBA.Create(255, 127, 0); hlmContext.darkenRect(mx-4, my-7*hlmContext.charWidth(' ')-6, 110, 7*hlmContext.charWidth(' ')+6, 128); @@ -1149,7 +1144,7 @@ procedure plrDebugDraw (); tts: AnsiString; tx: Integer; begin - hlmContext.font := 'msx'; + hlmContext.font := 'msx6'; hlmContext.color := TGxRGBA.Create(255, 0, 255, 96); hlmContext.fillRect(trig.x, trig.y, trig.width, trig.height); tts := trigType2Str(trig.TriggerType); @@ -1308,7 +1303,7 @@ begin if showMapCurPos then begin gxSetContext(hlmContext); - hlmContext.font := 'dos'; + hlmContext.font := 'win8'; hlmContext.color := TGxRGBA.Create(255, 255, 0); hlmContext.drawText(4, gWinSizeY-10, Format('mappos:(%d,%d)', [pmsCurMapX, pmsCurMapY])); gxSetContext(nil); @@ -1317,35 +1312,9 @@ end; // ////////////////////////////////////////////////////////////////////////// // -procedure g_Holmes_MouseEvent (var ev: TFUIMouseEvent); -var - he: TFUIMouseEvent; -begin - if g_Game_IsNet then exit; - if not g_holmes_enabled then exit; - if g_holmes_imfunctional then exit; - - holmesInitCommands(); - holmesInitBinds(); - msX := ev.x; - msY := ev.y; - msB := ev.bstate; - kbS := ev.kstate; - msB := msB; - he := ev; - he.x := he.x; - he.y := he.y; - uiMouseEvent(he); - if (he.alive) then plrDebugMouse(he); - ev.eat(); -end; - - -// ////////////////////////////////////////////////////////////////////////// // -procedure g_Holmes_KeyEvent (var ev: TFUIKeyEvent); -var - doeat: Boolean = false; +procedure onKeyEvent (var ev: TFUIEvent); {$IF DEFINED(D2F_DEBUG)} +var pan: TPanel; ex, ey: Integer; dx, dy: Integer; @@ -1356,32 +1325,13 @@ var end; begin - if g_Game_IsNet then exit; - if not g_holmes_enabled then exit; - if g_holmes_imfunctional then exit; - - holmesInitCommands(); - holmesInitBinds(); - - msB := ev.bstate; - kbS := ev.kstate; - case ev.scan of - SDL_SCANCODE_LCTRL, SDL_SCANCODE_RCTRL, - SDL_SCANCODE_LALT, SDL_SCANCODE_RALT, - SDL_SCANCODE_LSHIFT, SDL_SCANCODE_RSHIFT: - doeat := true; - end; - - uiKeyEvent(ev); - if (not ev.alive) then exit; - if keybindExecute(ev) then begin ev.eat(); exit; end; // press if (ev.press) then begin {$IF DEFINED(D2F_DEBUG)} // 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 TFUIKeyEvent.ModCtrl) <> 0) then + ((ev.kstate and TFUIEvent.ModCtrl) <> 0) then begin ev.eat(); dx := pmsCurMapX; @@ -1406,7 +1356,61 @@ begin end; {$ENDIF} end; +end; + + +// ////////////////////////////////////////////////////////////////////////// // +procedure g_Holmes_OnEvent (var ev: TFUIEvent); +{$IF not DEFINED(HEADLESS)} +var + doeat: Boolean = false; +{$ENDIF} +begin +{$IF not DEFINED(HEADLESS)} + if g_Game_IsNet then exit; + if not g_holmes_enabled then exit; + if g_holmes_imfunctional then exit; + + holmesInitCommands(); + holmesInitBinds(); + + msB := ev.bstate; + kbS := ev.kstate; + + if (ev.key) then + begin + case ev.scan of + SDL_SCANCODE_LCTRL, SDL_SCANCODE_RCTRL, + SDL_SCANCODE_LALT, SDL_SCANCODE_RALT, + SDL_SCANCODE_LSHIFT, SDL_SCANCODE_RSHIFT: + doeat := true; + end; + end + else if (ev.mouse) then + begin + msX := ev.x; + msY := ev.y; + msB := ev.bstate; + kbS := ev.kstate; + msB := msB; + end; + + uiDispatchEvent(ev); + if (not ev.alive) then exit; + + if (ev.mouse) then + begin + if (gPlayer1 <> nil) and (vpSet) then msbindExecute(ev); + ev.eat(); + end + else + begin + if keybindExecute(ev) then ev.eat(); + if (ev.alive) then onKeyEvent(ev); + end; + if (doeat) then ev.eat(); +{$ENDIF} end; @@ -1414,6 +1418,8 @@ end; procedure g_Holmes_Draw (); begin if g_Game_IsNet then exit; + if not g_holmes_enabled then exit; + if g_holmes_imfunctional then exit; {$IF not DEFINED(HEADLESS)} holmesInitCommands(); @@ -1437,6 +1443,7 @@ begin if g_Game_IsNet then exit; if not g_holmes_enabled then exit; if g_holmes_imfunctional then exit; + {$IF not DEFINED(HEADLESS)} gGfxDoClear := false; //if assigned(prerenderFrameCB) then prerenderFrameCB(); @@ -1715,24 +1722,12 @@ begin end; -procedure onMouseEvent (var ev: TFUIMouseEvent); begin - if not g_holmes_enabled then exit; - if g_holmes_imfunctional then exit; - g_Holmes_MouseEvent(ev); -end; - -procedure onKeyEvent (var ev: TFUIKeyEvent); -begin - if not g_holmes_enabled then exit; - if g_holmes_imfunctional then exit; - g_Holmes_KeyEvent(ev); -end; - + // shut up, fpc! + msB := msB; + vpSet := vpSet; -begin - evMouseCB := onMouseEvent; - evKeyCB := onKeyEvent; + fuiEventCB := g_Holmes_OnEvent; //uiContext.font := 'win14'; conRegVar('hlm_ui_scale', @fuiRenderScale, 0.01, 5.0, 'Holmes UI scale', '', false);