Finished fixing input back to prev-sokol feature parity

This commit is contained in:
2024-06-19 18:09:11 -04:00
parent 6f4a5e215c
commit 5d6f996d3c
11 changed files with 155 additions and 94 deletions

View File

@ -88,6 +88,9 @@ pull_staged_input_events :: proc( input : ^InputState, input_events : ^InputEve
key = event.key,
modifiers = event.modifiers
})
// logf("Key pressed(event pushed): %v", event.key)
// logf("last key event frame: %v", peek_back(& key_events).frame_id)
// logf("last event frame: %v", peek_back(& events).frame_id)
case .Key_Released:
push( & key_events, InputKeyEvent {
@ -96,6 +99,9 @@ pull_staged_input_events :: proc( input : ^InputState, input_events : ^InputEve
key = event.key,
modifiers = event.modifiers
})
// logf("Key released(event rpushed): %v", event.key)
// logf("last key event frame: %v", peek_back(& key_events).frame_id)
// logf("last event frame: %v", peek_back(& events).frame_id)
case .Unicode:
append( & codes_pressed, event.codepoint )
@ -175,22 +181,39 @@ poll_input_events :: proc( input, prev_input : ^InputState, input_events : Input
input.keyboard = {}
input.mouse = {}
// logf("m's value is: %v (prev)", prev_input.keyboard.keys[KeyCode.M] )
for prev_key, id in prev_input.keyboard.keys {
input.keyboard.keys[id].ended_down = prev_key.ended_down
}
for prev_btn, id in prev_input.mouse.btns {
input.mouse.btns[id].ended_down = prev_btn.ended_down
}
input_events := input_events
using input_events
@static prev_frame : u64 = u64_max
@static prev_frame : u64 = 0
last_frame := peek_front( & events).frame_id
last_frame : u64 = 0
if events.len > 0 {
last_frame = peek_back( & events).frame_id
}
// No new events, don't update
if prev_frame != 0 && last_frame == prev_frame do return
if last_frame == prev_frame do return
Iterate_Key_Events:
{
iter_obj := iterator( key_events ); iter := & iter_obj
for event := next( iter ); event != nil; event = next( iter )
{
if last_frame == event.frame_id do return
if last_frame > event.frame_id {
break
}
// logf("last_frame (iter): %v", last_frame)
// logf("frame (iter): %v", event.frame_id )
key := & input.keyboard.keys[event.key]
prev_key := prev_input.keyboard.keys[event.key]
@ -206,9 +229,6 @@ poll_input_events :: proc( input, prev_input : ^InputState, input_events : Input
key.half_transitions += 1
key.ended_down = false
}
frame_transition := first_transition && prev_key.ended_down != key.ended_down ? i32(1) : i32(0)
key.half_transitions += frame_transition
}
}
@ -217,7 +237,9 @@ poll_input_events :: proc( input, prev_input : ^InputState, input_events : Input
iter_obj := iterator( mouse_events ); iter := & iter_obj
for event := next( iter ); event != nil; event = next( iter )
{
if last_frame == event.frame_id do return
if last_frame > event.frame_id {
break
}
process_digital_btn :: proc( btn : ^DigitalBtn, prev_btn : DigitalBtn, ended_down : b32 )
{
@ -225,9 +247,6 @@ poll_input_events :: proc( input, prev_input : ^InputState, input_events : Input
btn.half_transitions += 1
btn.ended_down = ended_down
frame_transition := first_transition && prev_btn.ended_down != btn.ended_down ? i32(1) : i32(0)
btn.half_transitions += frame_transition
}
#partial switch event.type {

View File

@ -39,26 +39,30 @@ MouseBtn :: enum u32 {
KeyboardState :: struct #raw_union {
keys : [KeyCode.count] DigitalBtn,
using individual : struct {
ignored : DigitalBtn,
null : DigitalBtn, // 0x00
ignored : DigitalBtn, // 0x01
// GFLW / Sokol
menu,
world_1, world_2 : DigitalBtn,
// 0x02 - 0x04
__0x05_0x07_Unassigned__ : [ 3 * size_of( DigitalBtn)] u8,
tab, backspace : DigitalBtn,
// 0x08 - 0x09
right, left, up, down : DigitalBtn,
// 0x0A - 0x0D
enter : DigitalBtn,
enter : DigitalBtn, // 0x0E
__0x0F_Unassigned__ : [ 1 * size_of( DigitalBtn)] u8,
caps_lock,
scroll_lock,
num_lock : DigitalBtn,
// 0x10 - 0x12
left_alt,
left_shift,
@ -66,6 +70,7 @@ KeyboardState :: struct #raw_union {
right_alt,
right_shift,
right_control : DigitalBtn,
// 0x13 - 0x18
print_screen,
pause,
@ -75,6 +80,7 @@ KeyboardState :: struct #raw_union {
page_up,
page_down,
space : DigitalBtn,
// 0x19 - 0x20
exlamation,
quote_dbl,
@ -91,17 +97,18 @@ KeyboardState :: struct #raw_union {
minus,
period,
slash : DigitalBtn,
// 0x21 - 0x2F
nrow_0,
nrow_1,
nrow_2,
nrow_3,
nrow_4,
nrow_5,
nrow_6,
nrow_7,
nrow_8,
nrow_9,
nrow_0, // 0x30
nrow_1, // 0x31
nrow_2, // 0x32
nrow_3, // 0x33
nrow_4, // 0x34
nrow_5, // 0x35
nrow_6, // 0x36
nrow_7, // 0x37
nrow_8, // 0x38
nrow_9, // 0x39
__0x3A_Unassigned__ : [ 1 * size_of(DigitalBtn)] u8,