[video output=day490 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Merging Debug and Developer UI" vod_platform=youtube id=ja4X99Spj7o annotator=Miblo]
[0:00][Recap and set the stage for the day and December's surprise streams in celebration of Krampuslauf][:speech]
[1:46][:Run the game and set up to edit asset annotations][:"asset system" :ui]
[4:58][Review AssetEditor() and the beginnings of our :UI functionality][:"asset system" :research]
[7:20][Set up to merge the debug system's layout code into our multipurpose :UI system][:speech]
[8:51][Begin to merge the debug system's :UI code into handmade_dev_ui.h, for use by both the debug and asset systems][:"asset system" :"debug system"]
[18:58][Move :UI data from debug_state to dev_ui_context and propagate this change to all functions][:"asset system" :"debug system"]
[29:37][Rename dev_ui_context to dev_ui, and continue our :UI code merge][:"asset system" :"debug system"]
[34:09][Organise the debug_state struct into data that will remain and be merged out][:"debug system" :ui]
[36:03][Remind ourselves how we use the SelectedID][:"debug system" :research :run]
[39:33][Switch the :"debug system" over to use our new general :UI layout code]
[57:17][Introduce InitializeUI() and BeginUIFrame() to perform the :UI layout functionality of DEBUGStart()]
[1:12:22][Switch UpdateAndRenderEditor() over to use our new general :UI system, and introduce InitializeEditor()][:"asset system"]
[1:20:21][Make GameUpdateAndRender() call BeginUIFrame() and EndUIFrame()][:ui]
[1:23:13][Implement EndUIFrame() based on the :UI layout code of DEBUGEnd(), and make BeginUIFrame() perform the mouse handling from DEBUGInteract()][:"input handling"]
[1:35:54][Clean up compile errors in the :UI merge across the asset and debug systems][:"asset system" :"debug system" :ui]
[1:42:46][:Run the game to find that all of that just worked][:ui]
[1:43:43][Delete BeginLine() and EndLine() in favour of BeginRow() and EndRow()][:ui]
[1:45:04][Implement Button(), calling ActionButton() and Label()][:ui]
[1:47:30][:Run the game to see our asset :UI][:"asset system"]
[1:47:57][Implement Labelf()][:"asset system" :ui]
[1:51:28][:Run the game to see our :UI labels][:"asset system"]
[1:51:37][Implement fake versions of EditableBoolean(), EditableType(), EditableSize() and EditablePxy()][:"asset system" :ui]
[1:52:18][:Run the game to see even more :UI][:"asset system"]
[1:52:29][Q&A][:speech]
[1:54:15][Wrap it up][:speech]
[/video]
