[video 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]