[video output=day664 member=cmuratori stream_platform=twitch stream_username=molly_rocket project=code title="Simplifying Entity Storage Part II" vod_platform=youtube id=fUGCccR-B3c annotator=Miblo] [0:00][Recap and set the stage for the day][:speech] [2:37][Reacquaint ourselves with the brain_type enum][:"entity system" :research] [4:43][Delete Type_brain_monstar and AddMonstar()][:"entity system"] [5:32][Seek simplification of UpdateAndRenderEntities()][:"entity system" :research] [6:12][Delete the BoostTo branch from UpdateAndRenderEntities()][:"entity system"] [6:21][Scan through code to rewrite and keep][:"entity system" :research] [7:00][Consider moving the :camera with the entity in question, rather than by doing an entity lookup by ID][:"entity system" :research] [9:12][Reacquaint ourselves with the Type_brain_familiar case in ExecuteBrain()][:"entity system" :research] [12:29][Improve the wording of the Type_brain_familiar case in ExecuteBrain()][:"entity system"] [14:38][Consider changes to the entity struct that may mostly obviate the need for the sim region][:"data structure" :"entity system" :research] [16:36][Remove dAbsTileZ from entity][:"data structure" :"entity system"] [16:44][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme][:"entity system"] [19:07][Consider performing TransactionalOccupy() in the :movement, rather than the brain, code][:"entity system" :research] [20:16][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] [22:06][Reacquaint ourselves with the familiar velocity setting code][:"entity system" :movement :research] [24:04][Describe the purpose of TransactionalOccupy() in ExecuteBrain()][:"entity system" :movement :research] [24:58][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] [25:44][Note popping artifacts in this :movement code][:"entity system" :movement :research] [26:14][Introduce a v2s overload of V2()] [26:58][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] [27:17][Port UpdateAnimation() to our simplified entity storage scheme][:animation :"entity system"] [29:14][Port the move queue code in UpdateAndRenderEntities() to our simplified entity storage scheme, changing Delta in move_queue_entry to be a v2s][:"data structure" :"entity system"] [30:00][Consider making UpdateAndRenderEntities() set the TileIndex directly][:"entity system" :movement :research] [30:52][Port UpdateAndRenderEntities() to our simplified entity storage scheme, using a v2s TargetTile][:"entity system" :movement] [31:48][Port ExecuteBrainHero() to our simplified entity storage scheme, changing CanonicalDelta in move_pattern_entry, and AttackX and AttackY to be a v2s, and introducing V2S() and a v2s overload of operator*()][:"data structure" :"entity system"] [35:32][Port AddPlayer() to our simplified entity storage scheme][:"entity system"] [37:48][Port CheckForJoiningPlayers() to our simplified entity storage scheme, introducing GetClosestEmptyTileTo() and augmenting sim_region with OriginTileIndex][:"data structure" :"entity system"] [41:45][Consider introducing TileSpaceToSimRegion()][:"entity system" :research] [43:26][Respecify UpdateAnimation() to orient :movement around the delta of the current and previous tile][:"entity system"] [45:02][Fix typo in GetClosestEmptyTileTo()][:"entity system"] [45:22][Remove the sim_region overloads of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()][:"entity system" :movement] [46:10][Consider also removing the edit_grid version of PlaceEntityAtTraversable() and related functions][:"entity system" :movement :"procedural generation" :research] [49:17][Move the edit_tile traversal functions from handmade_edit_grid.cpp to handmade_sim_region.cpp][:"entity system" :"procedural generation"] [50:00][Consider removing the edit grid entirely][:"entity system" :research :"procedural generation"] [52:10][#if 0 GenerateApron() and GenerateRoom()][:"entity system" :"procedural generation"] [52:34][Rename TraversableIsOpen() to TileIsOpen(), and IsOccupied() to TileIsOccupied(), removing the former's check][:"entity system" :movement] [53:38][Consider changing FindRandomOpenTile() to spiral outwards][:"entity system" :research] [54:31][Delete handmade_gen_math.{h,cpp}, stowing the cpp code in handmade_math.h][:admin :mathematics :programming] [1:02:54][Remove the bulk of handmade_edit_grid.cpp][:"entity system" :"procedural generation"] [1:06:34][Relieve GenerateBlock() of calling BeginGridEdit(), removing the latter, EndGridEdit() and GetAbsoluteTileIndex()][:"entity system" :"procedural generation"] [1:10:56][Move IsOnEdge() from handmade_edit_grid.cpp to handmade_math.h][:"entity system" :mathematics :"procedural generation"] [1:12:45][Consider keeping code from handmade_edit_grid.cpp][:"entity system" :"procedural generation" :research] [1:14:04][Move GetTileVolume() from handmade_edit_grid.cpp to handmade_room_gen.cpp, and rewrite it][:"entity system" :"procedural generation"] [1:16:25][Move GetMinZCenterP() and GetVolumeFromMinZ() from handmade_edit_grid.cpp to handmade_room_gen.cpp][:"entity system" :"procedural generation"] [1:17:13][Relieve GenerateBlock() of calling IterateAsPlanarTiles(), removing the latter][:"entity system" :"procedural generation"] [1:18:21][Delete handmade_edit_grid.{h,cpp}][:admin] [1:19:16][Decide against debugging Visual Studio with Visual Studio][:admin] [1:19:49][Change GEN_CREATE_ENTITY_PATTERN() to take a world_generator][:"entity system" :"procedural generation"] [1:20:05][We can't compile][:admin] [1:22:41][Declare world_generator before GEN_CREATE_ENTITY_PATTERN()][:"entity system" :"procedural generation"] [1:23:17][Thoughts on compilers][:language :speech] [1:25:05][@kwmar][This is awesome though, but work in progress – Circle C++ Compiler[ref site="Circle C++ Compiler" url=https://www.circle-lang.org/] – especially the extensions that should've been in C++ for a long time already][:language] [1:25:23][@kwmar][It's a new C++ compiler][:language] [1:25:26][@haeristudios][C++ itself is a mess][:language] [1:25:55][Remove PlaceEntityAtP(), and the edit_grid versions of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()] [1:26:49][Write the edit grid out of SingleEnemyPattern()][:"entity system" :"procedural generation"] [1:27:29][@haeristudios][@molly_rocket Have you already discussed Carbon and Go? Would be interesting to hear your take on those languages][:language] [1:27:38][Write the edit grid out of SingleEnemyPattern() and SnakePattern(), augmenting world_generator with a *SimRegion][:"data structure" :"entity system" :"procedural generation"] [1:30:41][Change TileAlreadyExists() and AppendTile() to take a v2s][:"entity system" :"procedural generation"] [1:31:10][Write the edit grid out of TileSwitchPattern()][:"entity system" :"procedural generation"] [1:34:02][Introduce tile_result for GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to return][:"entity system" :"procedural generation"] [1:36:03][Update SingleEnemyPattern() and SnakePattern() to use our new tile_result][:"entity system" :"procedural generation"] [1:38:05][Investigate our FindAdjacentOpenTile() compile error][:"entity system" :research] [1:39:27][Make FindRandomOpenTile() and FindAdjacentOpenTile() NotImplemented][:"entity system"] [1:40:04][Update CheckForJoiningPlayers() to use our new tile_result][:"entity system"] [1:40:36][#if 0 the compile errors in BeginWorldChange()][:"entity system"] [1:40:53][Introduce a v2s overload of operator+=()][:language] [1:41:15][Update TileSwitchPattern() to use our new tile_result][:"entity system" :"procedural generation"] [1:43:30][Consider making TileSwitchPattern() generate an index list for GenerateBlock() to use][:"entity system" :"procedural generation" :research] [1:44:25][#if 0 TileSwitchPattern()][:"entity system" :"procedural generation"] [1:44:45][Update NPCPattern() to use our new tile_result][:"entity system" :"procedural generation"] [1:46:11][Fix compile errors in StandardLightingPattern() and remove CalcBasePForOffset()][:"entity system" :"procedural generation"] [1:47:39][Remove Z from SetSize()][:"entity system" :"procedural generation"] [1:48:10][Remove PlaceRoomInVolume(), PlaceRoom(), GetDeltaAlongAxisForCleanPlacement(), PlaceRoomAlongEdge(), GetRandomDirectionFromMask() and Layout()][:"entity system" :"procedural generation"] [1:48:58][Switch the block rasterisation code in CreateWorld() to use v2s][:"entity system" :"procedural generation"] [1:50:05][Switch rectangle2i to contain v2s Min and Max, and propagate this change][:"data structure"] [1:55:24][@lamarrr___][What do you think about Rust?][:language] [1:56:13][Switch HeroRoom in CreateWorld() to be a rectangle2i][:"entity system" :"procedural generation"] [1:56:48][Switch GetCameraOffsetZForDim() to take a v2s][:camera] [1:56:55][Switch GetMinZCenterP() and GetVolumeFromMinZ() to take a world_generator, not an edit_tile][:"entity system" :"procedural generation"] [1:58:16][Port GenerateBlock() and WinMainCRTStartup() to our updated rectangle2i][:"entity system" :"procedural generation"] [2:00:12][Rename Region to SimRegion in GenerateBlock(), and unset it at the end][:"entity system" :"procedural generation"] [2:00:32][Call it there][:speech] [/video]