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