From 40c58fcaeb654e30884f78a6e13ce8aef1a31200 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sun, 2 Dec 2018 02:39:00 +0000 Subject: [PATCH] Annotate hero/code492 --- cmuratori/hero/code/code492.hmml | 63 +++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/cmuratori/hero/code/code492.hmml b/cmuratori/hero/code/code492.hmml index ebb2c14..aba6b41 100644 --- a/cmuratori/hero/code/code492.hmml +++ b/cmuratori/hero/code/code492.hmml @@ -1,2 +1,61 @@ -[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Adding More Editor Interactions" vod_platform=youtube id=F5fgotKYqQU annotator=] -[/video] \ No newline at end of file +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Adding More Editor Interactions" vod_platform=youtube id=F5fgotKYqQU annotator=Miblo] +[0:01][Recap and set the stage for the day continuing with our asset editing :UI][:"asset system" :speech] +[1:22][:Run the game to show our asset editing :UI and consider positioning and styling it, and aggregate continuous interactions (e.g. drags)][:"asset system"] +[8:00][Set up to enable the :"undo / redo" system to aggregate continuous interactions, introducing the notion of an InProgressSentinel in the in_game_editor][:"asset system" :ui] +[15:22][Implement EditableBoolean(), with a few words on functional decomposition][:"asset system" :language :ui] +[19:32][:Run the game to see that our boolean button doesn't toggle][:"asset system" :language :ui] +[19:36][Augment dev_ui_layout with EditOccurred and dev_ui_edit_block with PrevEditOccurred, for EndEditBlock() and BeginEndBlock() to set][:"asset system" :ui] +[23:30][:Run the game to find that our boolean button toggles][:"asset system" :ui] +[24:22][Implement EditableType(), introducing a version of Button() that takes an additional Classifier][:"asset system" :ui] +[30:09][:Run the game to see our editable type button][:"asset system" :ui] +[30:36][Make EditableType() print out the value][:"asset system" :ui] +[31:32][:Run the game to find that our editable type button does not cycle through the types][:"asset system" :ui] +[32:17][Enable AssetEditor() to wrap the values of the editable type button][:"asset system" :ui] +[36:15][Break in to EditableType() and watch what happens upon clicking the button][:"asset system" :run :ui] +[37:04][Fix EditableType() to correctly increment and decrement the Value][:"asset system" :ui] +[37:51][:Run the game to find that that doesn't fix our problem][:"asset system" :ui] +[39:01][Change ToExecute and NextToExecute in dev_ui to be of the type dev_ui_interaction, and propagate this change][:"asset system" :ui] +[40:25][:Run the game to find that our EditableType button works fine][:"asset system" :ui] +[41:27][Enable EditableSize() and EditablePxy() to print out the Value][:"asset system" :ui] +[43:13][Check out the Size and Percent values in our :UI][:"asset system" :run] +[43:28][Enable EditableSize to draw a special widget with BasicTextElement()][:"asset system" :ui] +[45:43][Check out the Size button widget in our :UI][:"asset system" :run] +[45:53][Give the Size widget some border][:"asset system" :ui] +[46:40][Check out the bordered Size widget in our :UI][:"asset system" :run] +[47:11][Enable EditablePxy() to draw a widget like the Size button, and this function and EditableSize() to handle draggable interactions][:"asset system" :ui] +[56:26][Try dragging our Percent widget, without success][:"asset system" :run :ui] +[56:59][Peruse the code for the possible cause of our dragging bug][:"asset system" :research :ui] +[58:59][Step in to EditablePxy() to see what's happening][:"asset system" :run :ui] +[59:35][Make EditableBoolean(), EditableType(), EditableSize(), EditablePxy() to all set EditOccured to true][:"asset system" :ui] +[1:00:18][Try dragging our Percent and Size widgets, successfully][:"asset system" :run :ui] +[1:01:16][Make EditablePxy() clamp the values to the passed in Min and Max][:"asset system" :ui] +[1:02:04][Try out our clamped Percent widget, and demonstrate the need for edit aggregation][:"asset system" :run :ui :"undo / redo"] +[1:03:44][Introduce GetOrCreateEditInProgress() to aggregate edits, replacing AllocateEditorEdit()][:"asset system" :ui :"undo / redo"] +[1:15:23][Enable EditorInteract() to handle the notion of EndInteraction][:"asset system" :ui :"undo / redo"] +[1:20:13][:Run the game and crash in EditorInteract()][:"asset system" :ui :"undo / redo"] +[1:20:26][Fix InitializeEditor() to initialise the InProgresSentinel][:"asset system" :ui :"undo / redo"] +[1:21:02][Try out our aggregated undo, and consider how to make ][:"asset system" :run :ui :"undo / redo"] +[1:22:31][Consider how to handle coexistence of the debug and developer :UI][:"asset system" :"debug system"] +[1:24:06][Investigate the :font baseline issue] +[1:27:10][Change TextOp() to factor in the AscenderHeight to the glyph's offset][:font] +[1:31:48][Check out the :font drawing in our :UI][:run] +[1:32:11][Refresh our memories on our :font encoding][:research] +[1:36:46][Check out testfonts_v2.hha in TabView][:admin :font] +[1:40:05][The :mathematics of the :font alignment percentage][:blackboard] +[1:48:42][Make SetAlignPoint() and GetPPercent() clamp alignment percentages to the range -2 to 2][:font] +[1:50:34][:Run the game and get nutso stuff on the :font alignment][:ui] +[1:50:42][Regenerate our .hha files to get our newly aligned fonts][:admin :"asset system" :font] +[1:52:17][:Run the game to find that our :font baselines are now correct][:ui] +[1:53:08][Q&A][:speech] +[1:53:38][@jojomunki][Q: What does ## mean? I looked it up but I don't think I understand what its use is. Is it supposed to link different variables into one variable?][:language] +[1:57:36][@skinpop][Q: I've been trying to implement the walk system from your recent talk.[ref + site="Casey's Blog" + page="Killing the Walk Monster" + url=https://caseymuratori.com/blog_0032] In the talk you make the point that "shrinking" the walk edge is trivial. I've made it that far in my own code but I haven't been able to figure how to do the shrinking without testing all edges against all segments of the walk edge. That approach doesn't scale well. So I was wondering if you could say a few words about how you did it - assuming you had another approach. I am using a half-edge structure for the manifold][:geometry :movement] +[1:58:54][Efficiently shrinking the walk edge as per the walk system from The Witness][:blackboard :geometry :movement] +[2:01:07][@centhusiast][Q: Do you know how to rotate a :font? Do you use stb_truetype.h[ref + site=GitHub + page="nothings / stb / stb_truetype.h" + url=https://github.com/nothings/stb/blob/master/stb_truetype.h] for font rendering?][:library] +[2:05:37][Wrap it up][:speech] +[/video]