[video output=day481 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Encoding Cube UVs" vod_platform=youtube id=Oj4J9b8t7ck annotator=Miblo]
[0:02][Recap and set the stage for the day focusing on the :"asset system"][:speech]
[4:24][Determine to decorate the world and bind assets to entities][:"asset system" :"entity system" :"procedural generation" :run]
[11:20][Open "Fog is broken!" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Fog is Broken!"
    url=https://github.com/HandmadeHero/cpp/issues/78]][:admin :rendering]
[12:51][A few words on learning GitHub for Meow hash[ref
    site=GitHub
    page="cmuratori / meow_hash"
    url=https://github.com/cmuratori/meow_hash/]][:hashing :speech :vcs]
[13:49][Determine to work on asset binding, using Snuffleupagus-Oriented Programming][:"asset system" :"entity system" :"procedural generation" :speech]
[17:45][Snuffleupagus-Oriented Programming (SOP)][:speech]
[19:42][Set up to bind assets to entities][:"asset system" :"entity system" :"procedural generation" :speech]
[24:59][Change the multi-dimensional version of AddPiece() to take a v3 Dim][:"entity system" :"procedural generation"]
[30:25][:Run the game to see that all is well and good][:"entity system" :"procedural generation"]
[32:19][Introduce EncodeCubeUVLayout()][:"asset system" :"entity system"]
[46:26][Consider the visibility of our :art, with an eye to the possible future existence of floor tiles that reflect the undersides of tiles above them][:"asset system" :"entity system" :run]
[49:21][Make EncodeCubeUVLayout() encode the BottomIndex and BottomFacingIndex in the final two bits of our UV layout, and PushCube() decode UV layouts][:"asset system" :"entity system"]
[1:04:38][Enable PushCube() to directly decrypt coordinates without a table lookup][:"asset system" :"entity system" :mathematics]
[1:13:58][Switch the Renderer Test over to use our new UV layout][:"asset system" :"entity system"]
[1:16:15][:Run the Renderer Test to see that we may have got our bottom and top reversed][:"asset system" :"entity system"]
[1:16:36][Fix PushCube() to offset the top faces by 0.75][:"asset system" :"entity system"]
[1:17:02][:Run the Renderer Test to see that everything looks correct][:"asset system" :"entity system"]
[1:17:09][Test our UV encoding by making PushSimpleScene() rotate the WallEndUV by 90°][:"asset system" :"entity system"]
[1:17:43][:Run the Renderer Test to see the wall end top-facing texture rotated 90°][:"asset system" :"entity system"]
[1:17:53][Further test the UV encoding by rotating the full WallUV by 270°][:"asset system" :"entity system" :programming :run]
[1:19:56][Enable PushCube() to correctly decode negative offsets for the bottom and top faces][:"asset system" :"entity system"]
[1:21:06][Orientation of Textures][:"asset system" :blackboard :"entity system"]
[1:23:33][Fix CubeDecodeX() and CubeDecodeY() to rotate textures 90° anticlockwise from 0 to 3][:"asset system" :"entity system"]
[1:25:12][:Run the Renderer Test to see that the rotation is good][:"asset system" :"entity system"]
[1:25:41][Reflect on the bandwidth saving of our layout encoding][:"asset system" :"entity system" :speech]
[1:26:47][Augment entity_visible_piece with a CubeUVLayout for AddPiece() to set][:"asset system" :"entity system"]
[1:31:28][Consider supporting mirroring][:"asset system" :"entity system" :speech]
[1:33:12][Move on to asset tagging, possibly using a two-tier system: 1) select asset set; 2) use entity information to pick asset from set][:"asset system" :"entity system" :speech]
[1:41:20][Introduce the notion of an asset_basic_category][:"asset system" :"entity system"]
[1:52:01][:Run the game with a view to building import tables to bind textures to our scene][:"asset system" :"entity system"]
[1:53:23][Q&A][:speech]
[1:53:51][@Rounin][Q: In the Renderer Test, the corner blocks that are on the side of the building have their diagonal beams reversed, due to sharing their texture with the front blocks. Do you have a plan for handling that?][:"asset system" :"entity system"]
[1:54:37][Change the cube_uv_layout struct to just be a u16 to future-proof the renderer, and enable the Renderer Test to set UV layouts for elements][:"asset system" :"entity system"]
[2:04:44][:Run the Renderer Test to see the current texture layout][:"asset system" :"entity system"]
[2:05:08][Enable PlaceRectangularWall() to explicitly lay out the lower-left corner texture][:"asset system" :"entity system"]
[2:07:27][:Run the Renderer Test to see the lower-left corner texture correctly rotated][:"asset system" :"entity system"]
[2:08:28][Enable PlaceRectangularWall() to explicitly lay out the lower-right corner texture][:"asset system" :"entity system"]
[2:09:38][:Run the Renderer Test to see the lower-right corner texture correctly rotated][:"asset system" :"entity system"]
[2:09:52][Enable PlaceRectangularWall() to explicitly lay out the far corner textures][:"asset system" :"entity system"]
[2:11:00][:Run the Renderer Test to see all our exterior wall textures correctly rotated][:"asset system" :"entity system"]
[2:12:47][Enable PlaceRectangularWall() to decorate the horizontal interior walls][:"asset system" :"entity system"]
[2:15:09][:Run the Renderer Test to see no interior beaming][:"asset system" :"entity system"]
[2:16:10][Fix typo in PlaceRectangularWall()][:"asset system" :"entity system"]
[2:17:11][:Run the Renderer Test to see interior beaming][:"asset system" :"entity system"]
[2:17:50][Enable PlaceRectangularWall() to decorate the vertical interior walls][:"asset system" :"entity system"]
[2:23:00][:Run the Renderer Test to see beaming everywhere][:"asset system" :"entity system"]
[2:23:59][@fzes_95][Q: When will you use the new ~4coder update?]
[2:24:19][That's it for today][:speech]
[/video]
