Hit-Testing Boxes in 3D
?
?

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:30Run the game and point out the discombobulation of the cat artwork
🏃
0:30Run the game and point out the discombobulation of the cat artwork
🏃
0:30Run the game and point out the discombobulation of the cat artwork
🏃
1:33View the intro_art_v2.hha file in TabView
🗹
1:33View the intro_art_v2.hha file in TabView
🗹
1:33View the intro_art_v2.hha file in TabView
🗹
2:34The three things to do: 1. Use the alignment points; 2a. Get alignment data into our metadata file; 2b. Edit results in real time
🗩
2:34The three things to do: 1. Use the alignment points; 2a. Get alignment data into our metadata file; 2b. Edit results in real time
🗩
2:34The three things to do: 1. Use the alignment points; 2a. Get alignment data into our metadata file; 2b. Edit results in real time
🗩
5:42Set up to provide a way to edit placement points
🏃
5:42Set up to provide a way to edit placement points
🏃
5:42Set up to provide a way to edit placement points
🏃
7:27Consider reconceptualising the debug system as an integral part of the shipped game
🏃
7:27Consider reconceptualising the debug system as an integral part of the shipped game
🏃
7:27Consider reconceptualising the debug system as an integral part of the shipped game
🏃
9:19Set up to integrate the entity picking code into the game
9:19Set up to integrate the entity picking code into the game
9:19Set up to integrate the entity picking code into the game
12:47Begin to enable UpdateAndRenderEntities() to handle picking of all sprites
12:47Begin to enable UpdateAndRenderEntities() to handle picking of all sprites
12:47Begin to enable UpdateAndRenderEntities() to handle picking of all sprites
14:19Run the game to see our sprite debug visualisation
🏃
14:19Run the game to see our sprite debug visualisation
🏃
14:19Run the game to see our sprite debug visualisation
🏃
14:48Change UpdateAndRenderEntities() to use PushRectOutline() for the sprite debug visualisation
14:48Change UpdateAndRenderEntities() to use PushRectOutline() for the sprite debug visualisation
14:48Change UpdateAndRenderEntities() to use PushRectOutline() for the sprite debug visualisation
16:27Run the game to see the more sensible, if incorrectly scaled sprite debug visualisation
🏃
16:27Run the game to see the more sensible, if incorrectly scaled sprite debug visualisation
🏃
16:27Run the game to see the more sensible, if incorrectly scaled sprite debug visualisation
🏃
17:00Remove the EntityTransform.OffsetP addition from the WorldP computation in UpdateAndRenderEntities()
17:00Remove the EntityTransform.OffsetP addition from the WorldP computation in UpdateAndRenderEntities()
17:00Remove the EntityTransform.OffsetP addition from the WorldP computation in UpdateAndRenderEntities()
18:26Run the game to see the better positioned sprite debug visualisation
🏃
18:26Run the game to see the better positioned sprite debug visualisation
🏃
18:26Run the game to see the better positioned sprite debug visualisation
🏃
18:49Adjust the dimensions of the sprite debug visualisation
18:49Adjust the dimensions of the sprite debug visualisation
18:49Adjust the dimensions of the sprite debug visualisation
20:12Run the game to see the cat's sprites correctly visualised
🏃
20:12Run the game to see the cat's sprites correctly visualised
🏃
20:12Run the game to see the cat's sprites correctly visualised
🏃
20:47Create a sprite-picking mouse cursor in UpdateAndRenderEntities()
20:47Create a sprite-picking mouse cursor in UpdateAndRenderEntities()
20:47Create a sprite-picking mouse cursor in UpdateAndRenderEntities()
32:30Run the game to find that the sprite-picking mouse cursor sort of works
🏃
32:30Run the game to find that the sprite-picking mouse cursor sort of works
🏃
32:30Run the game to find that the sprite-picking mouse cursor sort of works
🏃
33:05Decouple the use of WorldP and Piece->Offset in UpdateAndRenderEntities() to correctly locate entities and render their debug visualisation
33:05Decouple the use of WorldP and Piece->Offset in UpdateAndRenderEntities() to correctly locate entities and render their debug visualisation
33:05Decouple the use of WorldP and Piece->Offset in UpdateAndRenderEntities() to correctly locate entities and render their debug visualisation
35:22Run the game to find that the sprite-picking is pretty close, but that the Y is wrong
🏃
35:22Run the game to find that the sprite-picking is pretty close, but that the Y is wrong
🏃
35:22Run the game to find that the sprite-picking is pretty close, but that the Y is wrong
🏃
36:42Enable UpdateAndRenderEntities() to draw a line connecting the cursor and the picked entity
36:42Enable UpdateAndRenderEntities() to draw a line connecting the cursor and the picked entity
36:42Enable UpdateAndRenderEntities() to draw a line connecting the cursor and the picked entity
40:10Run the game to see our cursor–entity connection, but with incorrect projection to the entity
🏃
40:10Run the game to see our cursor–entity connection, but with incorrect projection to the entity
🏃
40:10Run the game to see our cursor–entity connection, but with incorrect projection to the entity
🏃
42:03Create a picking ray in UpdateAndRenderEntities()
42:03Create a picking ray in UpdateAndRenderEntities()
42:03Create a picking ray in UpdateAndRenderEntities()
49:59Run the game to find that the picking ray is pegged to the correct location
🏃
49:59Run the game to find that the picking ray is pegged to the correct location
🏃
49:59Run the game to find that the picking ray is pegged to the correct location
🏃
50:22Enable UpdateAndRenderEntities() to draw and highlight the outline of picking boxes using PushVolumeOutline()
50:22Enable UpdateAndRenderEntities() to draw and highlight the outline of picking boxes using PushVolumeOutline()
50:22Enable UpdateAndRenderEntities() to draw and highlight the outline of picking boxes using PushVolumeOutline()
54:34Run the game to see outlines around all volumes
🏃
54:34Run the game to see outlines around all volumes
🏃
54:34Run the game to see outlines around all volumes
🏃
54:48Introduce RayIntersectsBox() based on RayCast()
54:48Introduce RayIntersectsBox() based on RayCast()
54:48Introduce RayIntersectsBox() based on RayCast()
1:02:57Run the game to find that the picking is working
🏃
1:02:57Run the game to find that the picking is working
🏃
1:02:57Run the game to find that the picking is working
🏃
1:03:20Enable RayIntersectsBox() and UpdateAndRenderEntities() to highlight only the nearest intersection
1:03:20Enable RayIntersectsBox() and UpdateAndRenderEntities() to highlight only the nearest intersection
1:03:20Enable RayIntersectsBox() and UpdateAndRenderEntities() to highlight only the nearest intersection
1:07:33Run the game to find that it only picks the closest hit
🏃
1:07:33Run the game to find that it only picks the closest hit
🏃
1:07:33Run the game to find that it only picks the closest hit
🏃
1:07:54Enable UpdateAndRenderEntities() to support sprite picking
1:07:54Enable UpdateAndRenderEntities() to support sprite picking
1:07:54Enable UpdateAndRenderEntities() to support sprite picking
1:09:38Run the game to find that sprites may be picked, and consider how to proceed, including the problem of disambiguating layered (transparent) sprites
🏃
1:09:38Run the game to find that sprites may be picked, and consider how to proceed, including the problem of disambiguating layered (transparent) sprites
🏃
1:09:38Run the game to find that sprites may be picked, and consider how to proceed, including the problem of disambiguating layered (transparent) sprites
🏃
1:14:43insobot 16 minutes into the Q&A, -1 until end. (based on NOTE)
🗪
1:14:43insobot 16 minutes into the Q&A, -1 until end. (based on NOTE)
🗪
1:14:43insobot 16 minutes into the Q&A, -1 until end. (based on NOTE)
🗪
1:15:57Look forward to further improving the lighting
🏃
1:15:57Look forward to further improving the lighting
🏃
1:15:57Look forward to further improving the lighting
🏃
1:17:09Consider displaying errors recorded for a picked bitmap
🗩
1:17:09Consider displaying errors recorded for a picked bitmap
🗩
1:17:09Consider displaying errors recorded for a picked bitmap
🗩
1:22:22Augment hha_annotation with an error stream and propagate this addition to WriteHHA_V2() and PrintContents()
1:22:22Augment hha_annotation with an error stream and propagate this addition to WriteHHA_V2() and PrintContents()
1:22:22Augment hha_annotation with an error stream and propagate this addition to WriteHHA_V2() and PrintContents()
1:32:12Check out local.hha in TabView to see no mention of error streams
🗹
1:32:12Check out local.hha in TabView to see no mention of error streams
🗹
1:32:12Check out local.hha in TabView to see no mention of error streams
🗹
1:33:04Consider where to write asset import error messages
🗩
1:33:04Consider where to write asset import error messages
🗩
1:33:04Consider where to write asset import error messages
🗩
1:36:51Enable WriteImageToHHA() to write out asset and file errors, introducing WriteAssetStream()
1:36:51Enable WriteImageToHHA() to write out asset and file errors, introducing WriteAssetStream()
1:36:51Enable WriteImageToHHA() to write out asset and file errors, introducing WriteAssetStream()
1:46:00Trigger an asset reimport and check out local.hha in TabView to see the Errors field, but with no content
🗹
1:46:00Trigger an asset reimport and check out local.hha in TabView to see the Errors field, but with no content
🗹
1:46:00Trigger an asset reimport and check out local.hha in TabView to see the Errors field, but with no content
🗹
1:47:21Fix typo in PrintContents()
1:47:21Fix typo in PrintContents()
1:47:21Fix typo in PrintContents()
1:47:33Trigger another asset import and see errors, with slightly incorrect printout
🗹
1:47:33Trigger another asset import and see errors, with slightly incorrect printout
🗹
1:47:33Trigger another asset import and see errors, with slightly incorrect printout
🗹
1:48:17Fix PrintContents() to correctly parse out the errors
1:48:17Fix PrintContents() to correctly parse out the errors
1:48:17Fix PrintContents() to correctly parse out the errors
1:50:02Reimport and check out local.hha in TabView to see that all is correct
🗹
1:50:02Reimport and check out local.hha in TabView to see that all is correct
🗹
1:50:02Reimport and check out local.hha in TabView to see that all is correct
🗹
1:50:23Add newlines to the asset and file error messages
1:50:23Add newlines to the asset and file error messages
1:50:23Add newlines to the asset and file error messages
1:51:19Reimport and check out local.hha in TabView to cleanly see our errors
🗹
1:51:19Reimport and check out local.hha in TabView to cleanly see our errors
🗹
1:51:19Reimport and check out local.hha in TabView to cleanly see our errors
🗹
1:52:25Q&A
🗩
1:52:25Q&A
🗩
1:52:25Q&A
🗩
1:53:12desuused Q: Is it possible to account for sprite opacity when selecting items, for the selection to be more intuitive? Is it useful to generate a more slim triangulation for sprites?
🗪
1:53:12desuused Q: Is it possible to account for sprite opacity when selecting items, for the selection to be more intuitive? Is it useful to generate a more slim triangulation for sprites?
🗪
1:53:12desuused Q: Is it possible to account for sprite opacity when selecting items, for the selection to be more intuitive? Is it useful to generate a more slim triangulation for sprites?
🗪
1:55:36frostyninja Q: Instead of fussing with selecting the individual sprite parts, wouldn't it be handier to list them in a picked entity HUD
🗪
1:55:36frostyninja Q: Instead of fussing with selecting the individual sprite parts, wouldn't it be handier to list them in a picked entity HUD
🗪
1:55:36frostyninja Q: Instead of fussing with selecting the individual sprite parts, wouldn't it be handier to list them in a picked entity HUD
🗪
1:55:50somebody_took_my_name Q: Is the .Count inclusive with strings? In other words, do you really need the nested ifs in the line printer?
🗪
1:55:50somebody_took_my_name Q: Is the .Count inclusive with strings? In other words, do you really need the nested ifs in the line printer?
🗪
1:55:50somebody_took_my_name Q: Is the .Count inclusive with strings? In other words, do you really need the nested ifs in the line printer?
🗪
1:56:08desuused Q: You spent a lot of time optimizing the hash function, but is it worth it? Most of the time you calculate hashes when doing I/O, which will always be significantly slower, so you'll save more time if you calculate the hash in parallel with I/O. This way MeowHash and SHA512 would have the same impact on runtime, despite MeowHash being 80 times faster
🗪
1:56:08desuused Q: You spent a lot of time optimizing the hash function, but is it worth it? Most of the time you calculate hashes when doing I/O, which will always be significantly slower, so you'll save more time if you calculate the hash in parallel with I/O. This way MeowHash and SHA512 would have the same impact on runtime, despite MeowHash being 80 times faster
🗪
1:56:08desuused Q: You spent a lot of time optimizing the hash function, but is it worth it? Most of the time you calculate hashes when doing I/O, which will always be significantly slower, so you'll save more time if you calculate the hash in parallel with I/O. This way MeowHash and SHA512 would have the same impact on runtime, despite MeowHash being 80 times faster
🗪
2:00:26somebody_took_my_name Q: You check for At == Count, but I should think that by then you would already be past the last character in the stream
🗪
2:00:26somebody_took_my_name Q: You check for At == Count, but I should think that by then you would already be past the last character in the stream
🗪
2:00:26somebody_took_my_name Q: You check for At == Count, but I should think that by then you would already be past the last character in the stream
🗪
2:01:20Simplify the error printing in PrintContents()
2:01:20Simplify the error printing in PrintContents()
2:01:20Simplify the error printing in PrintContents()
2:01:52Check out local.hha in TabView to find that the error printing remains correct
🗹
2:01:52Check out local.hha in TabView to find that the error printing remains correct
🗹
2:01:52Check out local.hha in TabView to find that the error printing remains correct
🗹
2:02:57Hashing performance, in terms of (not) being memory or I/O bound
🗩
2:02:57Hashing performance, in terms of (not) being memory or I/O bound
🗩
2:02:57Hashing performance, in terms of (not) being memory or I/O bound
🗩
2:09:14Wrap it up
🗩
2:09:14Wrap it up
🗩
2:09:14Wrap it up
🗩