Handmade Hero»Episode Guide
Implementing Undo and Redo
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Recap and set the stage for the day implementing our asset editor UI
🗩
0:00Recap and set the stage for the day implementing our asset editor UI
🗩
0:00Recap and set the stage for the day implementing our asset editor UI
🗩
0:36Run the game to see the current UI capabilities of our profiling debug system
🏃
0:36Run the game to see the current UI capabilities of our profiling debug system
🏃
0:36Run the game to see the current UI capabilities of our profiling debug system
🏃
4:16Review the purpose of AssetEditor(), editing Alignment Points
📖
4:16Review the purpose of AssetEditor(), editing Alignment Points
📖
4:16Review the purpose of AssetEditor(), editing Alignment Points
📖
6:05Dive straight into undo / redo functionality for UpdateAndRenderEditor(), introducing in_game_edit struct, IsEmpty(), UndoAvailable() and RedoAvailable()
6:05Dive straight into undo / redo functionality for UpdateAndRenderEditor(), introducing in_game_edit struct, IsEmpty(), UndoAvailable() and RedoAvailable()
6:05Dive straight into undo / redo functionality for UpdateAndRenderEditor(), introducing in_game_edit struct, IsEmpty(), UndoAvailable() and RedoAvailable()
16:57Introduce align_point_edit as one of the types for in_game_edit to contain
16:57Introduce align_point_edit as one of the types for in_game_edit to contain
16:57Introduce align_point_edit as one of the types for in_game_edit to contain
19:51Introduce EditAlignPoint() and AlignPointFromAssetAndIndex() for AssetEditor() to call
19:51Introduce EditAlignPoint() and AlignPointFromAssetAndIndex() for AssetEditor() to call
19:51Introduce EditAlignPoint() and AlignPointFromAssetAndIndex() for AssetEditor() to call
25:24Introduce ApplyEditChange() as a dual-purpose undo / redo function for UpdateAndRenderEditor() to call
25:24Introduce ApplyEditChange() as a dual-purpose undo / redo function for UpdateAndRenderEditor() to call
25:24Introduce ApplyEditChange() as a dual-purpose undo / redo function for UpdateAndRenderEditor() to call
31:08Introduce IsDirty(), and separate Undo() and Redo() functions for UpdateAndRenderEditor() to use in the "REVERT" case
31:08Introduce IsDirty(), and separate Undo() and Redo() functions for UpdateAndRenderEditor() to use in the "REVERT" case
31:08Introduce IsDirty(), and separate Undo() and Redo() functions for UpdateAndRenderEditor() to use in the "REVERT" case
38:19Create handmade_dev_ui.cpp and .h to separate the game, editor and debug system's UI
38:19Create handmade_dev_ui.cpp and .h to separate the game, editor and debug system's UI
38:19Create handmade_dev_ui.cpp and .h to separate the game, editor and debug system's UI
54:06Confirm that the debug system still draws
🏃
54:06Confirm that the debug system still draws
🏃
54:06Confirm that the debug system still draws
🏃
54:42Get the whole in-game editor compiling with the reorganised code
54:42Get the whole in-game editor compiling with the reorganised code
54:42Get the whole in-game editor compiling with the reorganised code
57:39Introduce AllocateEditorEdit() using an interesting macro trick
57:39Introduce AllocateEditorEdit() using an interesting macro trick
57:39Introduce AllocateEditorEdit() using an interesting macro trick
1:01:40Continue to get the in-game editor compiling
1:01:40Continue to get the in-game editor compiling
1:01:40Continue to get the in-game editor compiling
1:06:20Stub out all the UI functions called by AssetEditor()
1:06:20Stub out all the UI functions called by AssetEditor()
1:06:20Stub out all the UI functions called by AssetEditor()
1:12:19Introduce PopFirst(), PushFirst(), Link() and Unlink()
1:12:19Introduce PopFirst(), PushFirst(), Link() and Unlink()
1:12:19Introduce PopFirst(), PushFirst(), Link() and Unlink()
1:16:10Finish cleaning up compile errors, making UpdateAndRenderEditor() initialise a Layout
1:16:10Finish cleaning up compile errors, making UpdateAndRenderEditor() initialise a Layout
1:16:10Finish cleaning up compile errors, making UpdateAndRenderEditor() initialise a Layout
1:18:45Run the game to see that we're working as before
🏃
1:18:45Run the game to see that we're working as before
🏃
1:18:45Run the game to see that we're working as before
🏃
1:19:41Consider merging almost the entire debug system layout code into the general UI code
📖
1:19:41Consider merging almost the entire debug system layout code into the general UI code
📖
1:19:41Consider merging almost the entire debug system layout code into the general UI code
📖
1:22:38Trim away unused parts of the debug system
1:22:38Trim away unused parts of the debug system
1:22:38Trim away unused parts of the debug system
1:25:20Try tearing off UI elements unsuccessfully
🏃
1:25:20Try tearing off UI elements unsuccessfully
🏃
1:25:20Try tearing off UI elements unsuccessfully
🏃
1:26:13Change DEBUGEnd() to initiate tear on Alt-Click
1:26:13Change DEBUGEnd() to initiate tear on Alt-Click
1:26:13Change DEBUGEnd() to initiate tear on Alt-Click
1:27:06Successfully tear off UI elements
🏃
1:27:06Successfully tear off UI elements
🏃
1:27:06Successfully tear off UI elements
🏃
1:27:56Continue to trim away unused parts of the debug system and switch it over from debug_id to a unified dev_id
1:27:56Continue to trim away unused parts of the debug system and switch it over from debug_id to a unified dev_id
1:27:56Continue to trim away unused parts of the debug system and switch it over from debug_id to a unified dev_id
1:31:04Spot that our font baselines are wrong
🏃
1:31:04Spot that our font baselines are wrong
🏃
1:31:04Spot that our font baselines are wrong
🏃
1:32:11Replace debug_interaction_type with a unified dev_ui_interaction_type
1:32:11Replace debug_interaction_type with a unified dev_ui_interaction_type
1:32:11Replace debug_interaction_type with a unified dev_ui_interaction_type
1:35:30Run the game to find it working as before
🏃
1:35:30Run the game to find it working as before
🏃
1:35:30Run the game to find it working as before
🏃
1:36:20Q&A
🗩
1:36:20Q&A
🗩
1:36:20Q&A
🗩
1:36:44ginger_bill Q: (For after stream) Do you want the viewer to be able to edit things or just view things?
🗪
1:36:44ginger_bill Q: (For after stream) Do you want the viewer to be able to edit things or just view things?
🗪
1:36:44ginger_bill Q: (For after stream) Do you want the viewer to be able to edit things or just view things?
🗪
1:40:06guybru5h_vi Q: Hey Casey, I know this is kind of off-topic but do you have any advice / resources to read on shadow mapping implementations?
🗪
1:40:06guybru5h_vi Q: Hey Casey, I know this is kind of off-topic but do you have any advice / resources to read on shadow mapping implementations?
🗪
1:40:06guybru5h_vi Q: Hey Casey, I know this is kind of off-topic but do you have any advice / resources to read on shadow mapping implementations?
🗪
1:42:53mariaberry Q: Are you still planning on removing the CRT in the game layer?
🗪
1:42:53mariaberry Q: Are you still planning on removing the CRT in the game layer?
🗪
1:42:53mariaberry Q: Are you still planning on removing the CRT in the game layer?
🗪
1:43:11abarishu Q: Following up on the pre-stream discussion on executable size. I nuked out the CRT in my project and it reduced its size from 150K to 35K. I did not think it insert so much crud
🗪
1:43:11abarishu Q: Following up on the pre-stream discussion on executable size. I nuked out the CRT in my project and it reduced its size from 150K to 35K. I did not think it insert so much crud
🗪
1:43:11abarishu Q: Following up on the pre-stream discussion on executable size. I nuked out the CRT in my project and it reduced its size from 150K to 35K. I did not think it insert so much crud
🗪
1:43:57jmc516 Q: Do you think programming books are worth the effort to read? Or is there a better way to learn?
🗪
1:43:57jmc516 Q: Do you think programming books are worth the effort to read? Or is there a better way to learn?
🗪
1:43:57jmc516 Q: Do you think programming books are worth the effort to read? Or is there a better way to learn?
🗪
1:44:21reductum Q: Are we still planning to port to Linux and bare-metal Raspberry Pi?
🗪
1:44:21reductum Q: Are we still planning to port to Linux and bare-metal Raspberry Pi?
🗪
1:44:21reductum Q: Are we still planning to port to Linux and bare-metal Raspberry Pi?
🗪
1:44:29lucid_frost Q: How useful would it be to get additional performance information from the CPU? I know Intel provides some stuff for things like branch prediction and cache misses
🗪
1:44:29lucid_frost Q: How useful would it be to get additional performance information from the CPU? I know Intel provides some stuff for things like branch prediction and cache misses
🗪
1:44:29lucid_frost Q: How useful would it be to get additional performance information from the CPU? I know Intel provides some stuff for things like branch prediction and cache misses
🗪
1:46:10mariaberry Q: Will you be avoiding the CRT on Linux in the future. Sorry it's the same topic, but I'm curious!
🗪
1:46:10mariaberry Q: Will you be avoiding the CRT on Linux in the future. Sorry it's the same topic, but I'm curious!
🗪
1:46:10mariaberry Q: Will you be avoiding the CRT on Linux in the future. Sorry it's the same topic, but I'm curious!
🗪
1:46:58jmc516 Q: How can you determine the validity of the book and its usefulness?
🗪
1:46:58jmc516 Q: How can you determine the validity of the book and its usefulness?
🗪
1:46:58jmc516 Q: How can you determine the validity of the book and its usefulness?
🗪
1:48:010lpbm Q: As a Linux supportr I want my $15 back (to buy a spellchecker, apparently)
🗪
1:48:010lpbm Q: As a Linux supportr I want my $15 back (to buy a spellchecker, apparently)
🗪
1:48:010lpbm Q: As a Linux supportr I want my $15 back (to buy a spellchecker, apparently)
🗪
1:48:39areriff Q: What's that empty space in the thread debug view?
🗪
1:48:39areriff Q: What's that empty space in the thread debug view?
🗪
1:48:39areriff Q: What's that empty space in the thread debug view?
🗪
1:48:53The debug system's Threads view
🏃
1:48:53The debug system's Threads view
🏃
1:48:53The debug system's Threads view
🏃
1:52:49xxthebigfoxx Q: Are you already testing some JAI?
🗪
1:52:49xxthebigfoxx Q: Are you already testing some JAI?
🗪
1:52:49xxthebigfoxx Q: Are you already testing some JAI?
🗪
1:53:09soysaucethekid Q: When updating the anchor points, does this mean the .hha file has to be recompiled each time that happens?
🗪
1:53:09soysaucethekid Q: When updating the anchor points, does this mean the .hha file has to be recompiled each time that happens?
🗪
1:53:09soysaucethekid Q: When updating the anchor points, does this mean the .hha file has to be recompiled each time that happens?
🗪
1:53:26joesweeney Q: How would you change this work scheme for a mobile platform where we are concerned about battery usage?
🗪
1:53:26joesweeney Q: How would you change this work scheme for a mobile platform where we are concerned about battery usage?
🗪
1:53:26joesweeney Q: How would you change this work scheme for a mobile platform where we are concerned about battery usage?
🗪
1:55:10areriff Q: Can new lighting propagation be computed while the GPU is doing its stuff? Seems like a lot of waiting
🗪
1:55:10areriff Q: Can new lighting propagation be computed while the GPU is doing its stuff? Seems like a lot of waiting
🗪
1:55:10areriff Q: Can new lighting propagation be computed while the GPU is doing its stuff? Seems like a lot of waiting
🗪
1:55:54Traverse the world and look forward to the completed asset editing
🏃
1:55:54Traverse the world and look forward to the completed asset editing
🏃
1:55:54Traverse the world and look forward to the completed asset editing
🏃
1:57:09uplinkcoder Q: We can only start to render if the lighting is done, no?
🗪
1:57:09uplinkcoder Q: We can only start to render if the lighting is done, no?
🗪
1:57:09uplinkcoder Q: We can only start to render if the lighting is done, no?
🗪
1:59:53jessef Q: I read your article on the manipulation tool work you did on The Witness1 and it helped me debug my problems. Do you have a good way to manipulate rotation? Is it to ray-test on a sphere and then take the dMouse hit and then see how long the delta arc is on a specific axis?
🗪
1:59:53jessef Q: I read your article on the manipulation tool work you did on The Witness1 and it helped me debug my problems. Do you have a good way to manipulate rotation? Is it to ray-test on a sphere and then take the dMouse hit and then see how long the delta arc is on a specific axis?
🗪
1:59:53jessef Q: I read your article on the manipulation tool work you did on The Witness1 and it helped me debug my problems. Do you have a good way to manipulate rotation? Is it to ray-test on a sphere and then take the dMouse hit and then see how long the delta arc is on a specific axis?
🗪
2:00:53easylovingyou Q: Could you get NSight to work and did it help you with anything?
🗪
2:00:53easylovingyou Q: Could you get NSight to work and did it help you with anything?
🗪
2:00:53easylovingyou Q: Could you get NSight to work and did it help you with anything?
🗪
2:01:39That's all, folks
🗩
2:01:39That's all, folks
🗩
2:01:39That's all, folks
🗩