Finished fixing input back to prev-sokol feature parity
This commit is contained in:
@ -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 {
|
||||
|
@ -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,
|
||||
|
||||
|
Reference in New Issue
Block a user