Platform-independent User 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)
0:40Overview of the day's goals
0:40Overview of the day's goals
0:40Overview of the day's goals
2:35Function Overloading (accidental and intentional)
2:35Function Overloading (accidental and intentional)
2:35Function Overloading (accidental and intentional)
7:29Extending GameUpdateAndRender() to take input
7:29Extending GameUpdateAndRender() to take input
7:29Extending GameUpdateAndRender() to take input
8:33Pulling structs into a header file for readability
8:33Pulling structs into a header file for readability
8:33Pulling structs into a header file for readability
9:48On iterating towards an API and avoiding premature design
9:48On iterating towards an API and avoiding premature design
9:48On iterating towards an API and avoiding premature design
13:35Writing our usage code first
13:35Writing our usage code first
13:35Writing our usage code first
15:12Diagram of input over time
15:12Diagram of input over time
15:12Diagram of input over time
20:47Looking at one common method of parsing game input
20:47Looking at one common method of parsing game input
20:47Looking at one common method of parsing game input
23:43An less expressive but simpler way
23:43An less expressive but simpler way
23:43An less expressive but simpler way
28:29But Casey, what about the stick?
28:29But Casey, what about the stick?
28:29But Casey, what about the stick?
35:47Writing usage for some game_input structures
35:47Writing usage for some game_input structures
35:47Writing usage for some game_input structures
37:51Adding the structures and filling them out
37:51Adding the structures and filling them out
37:51Adding the structures and filling them out
40:45Handmade Hero: Better than cooking shows!
40:45Handmade Hero: Better than cooking shows!
40:45Handmade Hero: Better than cooking shows!
42:14Porting our platform layer over to the new API
42:14Porting our platform layer over to the new API
42:14Porting our platform layer over to the new API
46:16Factoring out button processing into Win32ProcessXInputDigitalButton()
46:16Factoring out button processing into Win32ProcessXInputDigitalButton()
46:16Factoring out button processing into Win32ProcessXInputDigitalButton()
48:47Processing all the buttons
48:47Processing all the buttons
48:47Processing all the buttons
51:11ArrayCount() used but not implemented yet
51:11ArrayCount() used but not implemented yet
51:11ArrayCount() used but not implemented yet
53:16Swapping NewInput and OldInput, how do we want to do it?
53:16Swapping NewInput and OldInput, how do we want to do it?
53:16Swapping NewInput and OldInput, how do we want to do it?
54:36Finally defining NewInput and OldInput
54:36Finally defining NewInput and OldInput
54:36Finally defining NewInput and OldInput
56:04More explanation about swapping
56:04More explanation about swapping
56:04More explanation about swapping
57:28Defining the ArrayCount() macro
57:28Defining the ArrayCount() macro
57:28Defining the ArrayCount() macro
58:50But Casey, what about the stick?
58:50But Casey, what about the stick?
58:50But Casey, what about the stick?
1:00:11Normalizing our stick values
1:00:11Normalizing our stick values
1:00:11Normalizing our stick values
1:04:54Wrap up and Final Thoughts
1:04:54Wrap up and Final Thoughts
1:04:54Wrap up and Final Thoughts
1:06:55Q&A
🗩
1:06:55Q&A
🗩
1:06:55Q&A
🗩
1:07:05When normalizing the thumbstick value, is it worse to just add 32768 then multiply it by 2/65535 then subtract 1? I don't like the necessary if statement personally.
1:07:05When normalizing the thumbstick value, is it worse to just add 32768 then multiply it by 2/65535 then subtract 1? I don't like the necessary if statement personally.
1:07:05When normalizing the thumbstick value, is it worse to just add 32768 then multiply it by 2/65535 then subtract 1? I don't like the necessary if statement personally.
1:08:45Nitpick, but is it a bit misleading that the half transition count is zero or one, rather than an actual count?
1:08:45Nitpick, but is it a bit misleading that the half transition count is zero or one, rather than an actual count?
1:08:45Nitpick, but is it a bit misleading that the half transition count is zero or one, rather than an actual count?
1:09:17Will we be completely ignoring platform code for most of the rest of the series?
1:09:17Will we be completely ignoring platform code for most of the rest of the series?
1:09:17Will we be completely ignoring platform code for most of the rest of the series?
1:09:48Can you describe the struct inside of the union in more detail?
1:09:48Can you describe the struct inside of the union in more detail?
1:09:48Can you describe the struct inside of the union in more detail?
1:13:37Does it give any problems with capturing inputs over time when, due to some circumstances from Windows, the game lags and the frame timebase expands?
1:13:37Does it give any problems with capturing inputs over time when, due to some circumstances from Windows, the game lags and the frame timebase expands?
1:13:37Does it give any problems with capturing inputs over time when, due to some circumstances from Windows, the game lags and the frame timebase expands?
1:16:03Your normalizing code has an error, they both divide by positive.
1:16:03Your normalizing code has an error, they both divide by positive.
1:16:03Your normalizing code has an error, they both divide by positive.
1:17:53What happens if there's a name conflict between struct scope and a non-nested struct?
1:17:53What happens if there's a name conflict between struct scope and a non-nested struct?
1:17:53What happens if there's a name conflict between struct scope and a non-nested struct?
1:18:35Do you plan on abstracting the input more. For example, instead of having a player respond to a button press, have them respond to an action that is bound to a button or stick?
1:18:35Do you plan on abstracting the input more. For example, instead of having a player respond to a button press, have them respond to an action that is bound to a button or stick?
1:18:35Do you plan on abstracting the input more. For example, instead of having a player respond to a button press, have them respond to an action that is bound to a button or stick?
1:20:01Why is GameUpdateAndRender() internal when it's designed to be called from the platform layer?
1:20:01Why is GameUpdateAndRender() internal when it's designed to be called from the platform layer?
1:20:01Why is GameUpdateAndRender() internal when it's designed to be called from the platform layer?
1:20:35Comment about using re-bindable keys and buttons for left-handed people.
1:20:35Comment about using re-bindable keys and buttons for left-handed people.
1:20:35Comment about using re-bindable keys and buttons for left-handed people.
1:21:17When will you decide to actually remove all the TODOs in your code?
1:21:17When will you decide to actually remove all the TODOs in your code?
1:21:17When will you decide to actually remove all the TODOs in your code?
1:21:51Aside about rebindable keys.
1:21:51Aside about rebindable keys.
1:21:51Aside about rebindable keys.
1:23:01How is the old controller persisted across frames?
1:23:01How is the old controller persisted across frames?
1:23:01How is the old controller persisted across frames?
1:23:59Will the Windows callbacks for keyboard inputs require a great deal of extra work for you to implement?
1:23:59Will the Windows callbacks for keyboard inputs require a great deal of extra work for you to implement?
1:23:59Will the Windows callbacks for keyboard inputs require a great deal of extra work for you to implement?
1:25:18What about people who only have left arms?
1:25:18What about people who only have left arms?
1:25:18What about people who only have left arms?
1:25:45Will we eventually be using a timer to poll the controller input, or just a thread?
1:25:45Will we eventually be using a timer to poll the controller input, or just a thread?
1:25:45Will we eventually be using a timer to poll the controller input, or just a thread?
1:26:40timeBeginPeriod(1) will tick at 1 millisecond resolution.
1:26:40timeBeginPeriod(1) will tick at 1 millisecond resolution.
1:26:40timeBeginPeriod(1) will tick at 1 millisecond resolution.
1:27:37Have you done much physics coding, related to games or otherwise?
1:27:37Have you done much physics coding, related to games or otherwise?
1:27:37Have you done much physics coding, related to games or otherwise?
1:28:25Would you be fine with people using the platform as a base for making their own games, with attribution?
1:28:25Would you be fine with people using the platform as a base for making their own games, with attribution?
1:28:25Would you be fine with people using the platform as a base for making their own games, with attribution?
1:29:49How much will you need to explore other platforms before knowing what the abstraction API will look like?
1:29:49How much will you need to explore other platforms before knowing what the abstraction API will look like?
1:29:49How much will you need to explore other platforms before knowing what the abstraction API will look like?
1:30:26What kinds of numerical methods are used in game physics?
1:30:26What kinds of numerical methods are used in game physics?
1:30:26What kinds of numerical methods are used in game physics?
1:31:26Final Wrap Up
🗩
1:31:26Final Wrap Up
🗩
1:31:26Final Wrap Up
🗩