[video output=day212 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Integrating Debug UI into Game Code" vod_platform=youtube id=fbsZW4BzW6k annotator=Miblo]
[1:10]["We will be in sync..."][quote 286]
[1:34][Recap and set the stage for the day]
[3:16][Run the game and show that the picking system is kind of random and janky]
[5:58][handmade.cpp: Look at the current picking system and consider what we'd like to do]
[9:14][handmade.cpp: Decouple the hit testing and the output]
[13:41][handmade.cpp: Use debug_id in order to unify the system]
[16:14][On the uses of pointers as a location in memory and a name]
[20:24][handmade.cpp: Make DEBUG_HIT take LocalMouseP.z]
[23:34][handmade_debug_interface.h: #define the necessary values and implement them]
[29:31][handmade.cpp: Introduce DEBUG_REQUESTED]
[30:50][handmade_debug_interface.h: Give debug_event the concept of a DebugID]
[31:51][handmade_debug.cpp: Introduce DEBUG_HIT, DEBUG_HIGHLIGHTED and DEBUG_REQUESTED]
[33:12][handmade_debug.cpp: Check for the existence of Memory in DEBUGGetState]
[35:26][Run the game and hit an assertion]
[37:34][handmade_debug.cpp: Replace the Assert in DEBUGGetState with a check for DebugState]
[38:10][Run the game and find that the debug system highlights everyone]
[38:29][handmade_debug.h: Add DebugInteraction_Select to debug_interaction_type]
[39:45][handmade_debug.cpp: Introduce DebugIDInteraction based on VarLinkInteraction which takes the Type and ID]
[41:47][handmade_debug.h: Add debug_id SelectedID to debug_state]
[42:03][handmade_debug.cpp: Write DEBUG_HIGHLIGHTED and DEBUG_REQUESTED]
[43:00][handmade_debug.cpp: Introduce IsSelected]
[44:56][Run the game see that it doesn't look very exciting]
[45:09][handmade_debug.cpp: Clear the NextHotInteraction when we end]
[45:47][Run the game and see that we're in much better shape]
[47:14][Q&A][:speech]
[47:40][@ChronalDragon][You technically have 15 more minutes since we started late]
[48:25][Use the 10 remaining minutes to nefarious ends][quote 287]
[48:37][handmade_debug_interface.h: Make DEBUG_HIGHLIGHTED take *Color]
[48:47][On compiling something out and using ... as the parameters]
[49:17][handmade_debug.cpp: Highlight entities in different colours]
[51:33][Run the game and see that the picked entity persists]
[52:08][handmade_debug.cpp: Make DEBUG_REQUESTED work on both the selected and hovered entities]
[53:00][handmade_debug.h: Add SelectedIDCount to debug_state]
[53:32][handmade_debug.cpp: Make IsSelected loop over all of the SelectedIDCounts]
[54:11][handmade_debug.cpp: Introduce ClearSelection and AddToSelection]
[55:59][handmade_debug.cpp: Make DebugInteraction_Select handle multiple selections]
[57:40][Run the game and select as many things as we want]
[58:20][Q&A Take #2]
[59:05][@insobot][<3. *handmade?]
[59:24][@desuused][You can emulate expression blocks with lambdas if you don't mind the craziness of C++11]
[59:44][@ChronalDragon][insobot checks for your !qa thing I believe, yeah]
[1:00:05][@elxenoaizd][Would you think it's better to start at a junior position at a company and then working my way up? Or try to apply for a higher position immediately?]
[1:00:23][@Mr4thDimention][About universal IDs, what if some things want to be identified in the same system, but don't have fixed storage location or conflicts in some other way with the universal uniqueness?]
[1:01:50][@adamantoise17][Do you know yet if the HandMadeCon talks are going to be streamed and / or recorded?]
[1:02:19][@flamedog][Bots on bots... Damn, imagine all the off-by-one errors]
[1:02:27][@cubercaleb][Yeah, but wouldn't bots teaching bots how to program be the beginning of the singularity?]
[1:02:36][@LeagueofWoWScape][You have recommended The C Programming Language book after watching your introductory series. Are there any other books you would suggest such as proper programming practices or reference books?]
[1:03:05][@elxenoaizd][You mentioned that the pointer could be used as a key and the thing it's pointing to is the value. So do you mean something like this: PairOf X*, X?]
[1:03:25][@VeezyTreezy][What else are you working on outside this project?]
[1:04:00][@bbkane_twitch][If you're just starting to watch these videos and you don't have time to watch them all, which ones are most important?]
[1:05:09][@UnrelentingBerts][How do you pick apart code of other programs / websites, etc.? Sorry for the newbish spam, I just want to get started in the morning]
[1:06:33][@elxenoaizd][Trying to work with others and reading their code, do you try to understand everything they wrote or just understand enough to solve your problems?]
[1:08:00][@VeezyTreezy][Is there a programming pattern you see all the time that you can't stand or hate?]
[1:09:42][@elxenoaizd][How do you deal with programming colleagues that use OOP, getters / setters, etc.? Do you try to give them advice or stay away from them if possible?]
[1:10:06][@Ashanmaril][I only know C++ really, but what's the alternative to getters / setters?]
[1:10:20][Story: C++ getters / setters][quote 288]
[1:15:10][@insofaras][What about a getter than does some calculation on private variables? Like a getDay function on a class that stores an integer representation of time / date?]
[1:15:25][@Manicthenobody][Jon should do that for JAI]
[1:15:37][@ezysigh][C# does what you describe]
[1:16:12][@VeezyTreezy][The getters and setters are less performant too, right?]
[1:16:21][@cubercaleb][I know you mostly work on code in smaller groups of people, although what is it like to program in teams and how does the work get split?]
[1:17:10][@TheSizik][What about the downside that you don't know whether a value you're accessing does a function call or not?]
[1:17:55][Wrap this up][:speech]
[1:18:26][Announcement: The speaker list for HandmadeCon 2015 is up[ref
    site="Molly Rocket"
    page="HandmadeCon 2015 Schedule"
    url="http://mollyrocket.com/news_0006.html"]][:speech]
[/video]
