Unified Keyboard and Gamepad Input
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
2:19Overview of the previous day's work
2:19Overview of the previous day's work
2:19Overview of the previous day's work
5:11An introduction to functional programming
5:11An introduction to functional programming
5:11An introduction to functional programming
10:44Methods for making our programs more functional
10:44Methods for making our programs more functional
10:44Methods for making our programs more functional
11:41Rationale for moving keyboard handling out of Win32MainWindowCallback()
11:41Rationale for moving keyboard handling out of Win32MainWindowCallback()
11:41Rationale for moving keyboard handling out of Win32MainWindowCallback()
14:37Finishing the keyboard processing code
14:37Finishing the keyboard processing code
14:37Finishing the keyboard processing code
15:55Adding a fifth controller (the keyboard)
15:55Adding a fifth controller (the keyboard)
15:55Adding a fifth controller (the keyboard)
17:00Adding 32-bit and 64-bit compiler options to the build.bat
17:00Adding 32-bit and 64-bit compiler options to the build.bat
17:00Adding 32-bit and 64-bit compiler options to the build.bat
19:54Ensuring keyboard state persists across frames
19:54Ensuring keyboard state persists across frames
19:54Ensuring keyboard state persists across frames
22:35An Assert() that we didn't do anything stupid
22:35An Assert() that we didn't do anything stupid
22:35An Assert() that we didn't do anything stupid
23:50Finishing our directional stick code with deadzone processing, no zombies.
23:50Finishing our directional stick code with deadzone processing, no zombies.
23:50Finishing our directional stick code with deadzone processing, no zombies.
29:36Using the deadzone values from MSDN
29:36Using the deadzone values from MSDN
29:36Using the deadzone values from MSDN
35:05Iterating across all the controllers in GameUpdateAndRender()
35:05Iterating across all the controllers in GameUpdateAndRender()
35:05Iterating across all the controllers in GameUpdateAndRender()
36:23Testing new input code
36:23Testing new input code
36:23Testing new input code
37:34Changing game_controller_input to work across both keyboard and gamepad
37:34Changing game_controller_input to work across both keyboard and gamepad
37:34Changing game_controller_input to work across both keyboard and gamepad
41:12Adapting the keyboard and gamepad code to the new structure
41:12Adapting the keyboard and gamepad code to the new structure
41:12Adapting the keyboard and gamepad code to the new structure
44:55Connecting the stick input into a fake directional pad
44:55Connecting the stick input into a fake directional pad
44:55Connecting the stick input into a fake directional pad
48:16Hooking up the real DPad
48:16Hooking up the real DPad
48:16Hooking up the real DPad
52:05Adding an IsConnected member to game_controller_input
52:05Adding an IsConnected member to game_controller_input
52:05Adding an IsConnected member to game_controller_input
53:07Buffer Overrun encourages some bounds checking
53:07Buffer Overrun encourages some bounds checking
53:07Buffer Overrun encourages some bounds checking
56:44Why did we overrun the buffer?
56:44Why did we overrun the buffer?
56:44Why did we overrun the buffer?
59:26Adding some last minute keyboard inputs
59:26Adding some last minute keyboard inputs
59:26Adding some last minute keyboard inputs
1:00:06Final Thoughts
1:00:06Final Thoughts
1:00:06Final Thoughts
1:02:28Q&A
🗩
1:02:28Q&A
🗩
1:02:28Q&A
🗩
1:02:50Check the array in the Buttons union, you might want 12 now that you've added start and back
1:02:50Check the array in the Buttons union, you might want 12 now that you've added start and back
1:02:50Check the array in the Buttons union, you might want 12 now that you've added start and back
1:08:54Is that some copypasta, or is it really supposed to be all MoveLefts?
1:08:54Is that some copypasta, or is it really supposed to be all MoveLefts?
1:08:54Is that some copypasta, or is it really supposed to be all MoveLefts?
1:11:24Could it be good to apply some integration on the keys, so we don't just set the value to binary -1/1?
1:11:24Could it be good to apply some integration on the keys, so we don't just set the value to binary -1/1?
1:11:24Could it be good to apply some integration on the keys, so we don't just set the value to binary -1/1?
1:12:56Can you talk about the deadzone being round vs rectangular at hardware USB, HID, and XInput API layers?
1:12:56Can you talk about the deadzone being round vs rectangular at hardware USB, HID, and XInput API layers?
1:12:56Can you talk about the deadzone being round vs rectangular at hardware USB, HID, and XInput API layers?
1:19:15Maybe it's a round deadzone?
1:19:15Maybe it's a round deadzone?
1:19:15Maybe it's a round deadzone?
1:23:40I'm 16 days behind, is there a better way to catch up than watching all the days on YouTube?
1:23:40I'm 16 days behind, is there a better way to catch up than watching all the days on YouTube?
1:23:40I'm 16 days behind, is there a better way to catch up than watching all the days on YouTube?
1:24:22For the build.bat, you can build for Windows XP 64-bit using 5.2 instead of 5.1
1:24:22For the build.bat, you can build for Windows XP 64-bit using 5.2 instead of 5.1
1:24:22For the build.bat, you can build for Windows XP 64-bit using 5.2 instead of 5.1
1:24:33On the inline method for GetController(), what happens if you pass in -1 for index?
1:24:33On the inline method for GetController(), what happens if you pass in -1 for index?
1:24:33On the inline method for GetController(), what happens if you pass in -1 for index?
1:25:50Can you do struct buttons_type (name the structure) and still get the benefits..?
1:25:50Can you do struct buttons_type (name the structure) and still get the benefits..?
1:25:50Can you do struct buttons_type (name the structure) and still get the benefits..?
1:26:39I don't get using Win32 prefix for function names when compiling for 64-bit.
1:26:39I don't get using Win32 prefix for function names when compiling for 64-bit.
1:26:39I don't get using Win32 prefix for function names when compiling for 64-bit.
1:27:34I was thinking about processing game input in a separate thread so it is framerate independent, but I heard you could introduce input lag. Is that true?
1:27:34I was thinking about processing game input in a separate thread so it is framerate independent, but I heard you could introduce input lag. Is that true?
1:27:34I was thinking about processing game input in a separate thread so it is framerate independent, but I heard you could introduce input lag. Is that true?
1:28:46You said a circular deadzone would be good for gameplay, why don't you just make it circular? The deadzone would just be a little bit bigger.
1:28:46You said a circular deadzone would be good for gameplay, why don't you just make it circular? The deadzone would just be a little bit bigger.
1:28:46You said a circular deadzone would be good for gameplay, why don't you just make it circular? The deadzone would just be a little bit bigger.
1:32:02DirectInput vs XInput, which is better?
1:32:02DirectInput vs XInput, which is better?
1:32:02DirectInput vs XInput, which is better?
1:33:17You deleted the Min/Max macro TODO...
1:33:17You deleted the Min/Max macro TODO...
1:33:17You deleted the Min/Max macro TODO...
1:34:03So when you use the ZeroController, why not just go *NewKeyboardController = {}?
1:34:03So when you use the ZeroController, why not just go *NewKeyboardController = {}?
1:34:03So when you use the ZeroController, why not just go *NewKeyboardController = {}?
1:35:29stddef should include offsetof(), you can use that to make your assert a little simpler.
1:35:29stddef should include offsetof(), you can use that to make your assert a little simpler.
1:35:29stddef should include offsetof(), you can use that to make your assert a little simpler.
1:37:56Final Wrap-Up
🗩
1:37:56Final Wrap-Up
🗩
1:37:56Final Wrap-Up
🗩