EBLAN_ENGINE/include/engine_input.inc
Artvasil09 a1d1baa869 feat: complete engine and editor subsystems (Stages 1-5 from TODO_ARTEM)
- Stage 1: Eliminate fish-eye distortion with precomputed tangential ray offset table and fractional DDA depth
- Stage 2: Full asset management in EblanStudio (stb_image/stb_image_write, 128x128 BGRA texture packaging, WAV sound manager)
- Stage 3: Multi-level room streaming, LevelTransition/CELL_PORTAL trigger system, 16-frame screen fade to black
- Stage 4: 60Hz cutscene engine in pure x86 ASM (v4 binary track, waypoint camera motion, shortest-arc pan, CP1251 Russian subtitles, letterbox overlay, audio)
- Stage 5: EblanStudio cutscene timeline (F6) and windowless Live ASM Viewport over shared-memory IPC directly rendered into DX11
- Tooling & Tests: comprehensive regression test suite (94 editor + 107 engine tests), IPC tests, and cutscene demo
2026-10-22 16:24:22 +03:00

168 lines
3.8 KiB
PHP

; ==============================================================================
; EBLAN ENGINE - Input System (Keyboard via GetAsyncKeyState)
; ==============================================================================
.code
; ------------------------------------------------------------------------------
; PollInput: Reads keyboard state and updates movement & action flags
; ------------------------------------------------------------------------------
PollInput PROC uses eax ebx
mov keyForward, 0
mov keyBackward, 0
mov keyStrafeLeft, 0
mov keyStrafeRight, 0
mov keyTurnLeft, 0
mov keyTurnRight, 0
mov keyRun, 0
mov keyAction, 0
mov keyScreenshot, 0
mov keyCutscene, 0
mov keySkipScene, 0
invoke GetForegroundWindow
cmp eax, hEngineWnd
je input_has_focus
mov keyActionHeld, 0
mov keyMapHeld, 0
mov keyShotHeld, 0
mov keySceneHeld, 0
mov keySkipHeld, 0
ret
input_has_focus:
; 1. Forward (W / Up Arrow)
invoke GetAsyncKeyState, VK_KEY_W
mov bx, ax
invoke GetAsyncKeyState, VK_KEY_UP
or bx, ax
test bx, 8000h
jz @F
mov keyForward, 1
@@:
; 2. Backward (S / Down Arrow)
invoke GetAsyncKeyState, VK_KEY_S
mov bx, ax
invoke GetAsyncKeyState, VK_KEY_DOWN
or bx, ax
test bx, 8000h
jz @F
mov keyBackward, 1
@@:
; 3. Strafe Left (A)
invoke GetAsyncKeyState, VK_KEY_A
test ax, 8000h
jz @F
mov keyStrafeLeft, 1
@@:
; 4. Strafe Right (D)
invoke GetAsyncKeyState, VK_KEY_D
test ax, 8000h
jz @F
mov keyStrafeRight, 1
@@:
; 5. Turn Left (Left Arrow)
invoke GetAsyncKeyState, VK_KEY_LEFT
test ax, 8000h
jz @F
mov keyTurnLeft, 1
@@:
; 6. Turn Right (Right Arrow)
invoke GetAsyncKeyState, VK_KEY_RIGHT
test ax, 8000h
jz @F
mov keyTurnRight, 1
@@:
; Actions are emitted once per physical press (also for E + Space).
invoke GetAsyncKeyState, VK_KEY_E
mov bx, ax
invoke GetAsyncKeyState, VK_KEY_SPACE
or bx, ax
test bx, 8000h
jz action_released
cmp keyActionHeld, 0
jne action_sampled
mov keyAction, 1
mov keyActionHeld, 1
jmp action_sampled
action_released:
mov keyActionHeld, 0
action_sampled:
; 8. Run / Sprint (Shift)
invoke GetAsyncKeyState, VK_KEY_SHIFT
test ax, 8000h
jz @F
mov keyRun, 1
@@:
invoke GetAsyncKeyState, VK_KEY_M
test ax, 8000h
jz map_key_released
cmp keyMapHeld, 0
jne map_key_sampled
xor keyShowMap, 1
mov keyMapHeld, 1
jmp map_key_sampled
map_key_released:
mov keyMapHeld, 0
map_key_sampled:
invoke GetAsyncKeyState, VK_KEY_F12
test ax, 8000h
jz shot_key_released
cmp keyShotHeld, 0
jne shot_key_sampled
mov keyScreenshot, 1
mov keyShotHeld, 1
jmp shot_key_sampled
shot_key_released:
mov keyShotHeld, 0
shot_key_sampled:
invoke GetAsyncKeyState, VK_KEY_C
test ax, 8000h
jz scene_key_released
cmp keySceneHeld, 0
jne scene_key_sampled
mov keyCutscene, 1
mov keySceneHeld, 1
jmp scene_key_sampled
scene_key_released:
mov keySceneHeld, 0
scene_key_sampled:
invoke GetAsyncKeyState, VK_KEY_TAB
test ax, 8000h
jz skip_key_released
cmp keySkipHeld, 0
jne skip_key_sampled
mov keySkipScene, 1
mov keySkipHeld, 1
jmp skip_key_sampled
skip_key_released:
mov keySkipHeld, 0
skip_key_sampled:
cmp isCutsceneActive, 0
je normal_keys_enabled
mov keyForward, 0
mov keyBackward, 0
mov keyStrafeLeft, 0
mov keyStrafeRight, 0
mov keyTurnLeft, 0
mov keyTurnRight, 0
mov keyRun, 0
mov keyAction, 0
normal_keys_enabled:
; 11. Escape - Exit application
invoke GetAsyncKeyState, VK_KEY_ESCAPE
test ax, 8000h
jz @F
mov isRunning, 0
@@:
ret
PollInput ENDP