[video output=day280 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Cleaned Up Streaming Entity Simulation" vod_platform=youtube id=jdknM4bPUcc annotator=Miblo]
[0:50][Recap and set the stage for the day]
[1:11][handmade_world.cpp: Get the sizeof *Source in PackEntityIntoChunk]
[2:15][handmade_sim_region.h: Rename StorageIndex to ID in entity]
[4:12][handmade_sim_region.cpp: Rename GetHashFromStorage to GetHashFromID]
[4:55][handmade_sim_region.h and .cpp: Remove EntityFlag_Nonspacial from entity_flags and continue cleaning stuff up]
[8:06][handmade_world_mode.cpp and handmade_entity.h: Remove the Sword]
[12:34][handmade_world.cpp: Make PackEntityIntoWorld store the entity's location]
[15:40][Debugger: Step into BeginSim and find that we don't get any entities out in our initial pack]
[18:21][Debugger: Step into PackEntityIntoWorld and follow the code through to RemoveWorldChunk]
[23:57][handmade_world.cpp: Increment the Chunk->EntityCount in PackEntityIntoChunk]
[25:03][Run the game and see that we're getting closer, but that the body has stopped tracking the head]
[27:46][handmade_sim_region.cpp: Collapse down AddEntityRaw and AddEntity]
[32:14][Run the game and see exactly the same thing]
[32:21][handmade_sim_region.cpp: Introduce ConnectEntityPointers]
[34:55][Run the game and find that the head and body remain connected]
[35:17][handmade_entity.h: Move the entity-related structs in from handmade_sim_region.h]
[38:33][handmade_world_mode.cpp: Disable the Z-movement and then try traversing the world]
[39:48][handmade_sim_region.cpp: Introduce DeleteEntity]
[43:26][Run the game and test entering and exiting it]
[45:13][handmade_entity.h: Explain why world_position is no longer necessary and consider removing it]
[48:07][handmade_sim_region.cpp: Make BeginSim compute world_position and pass ChunkDelta to AddEntity]
[51:19][handmade_sim_region.cpp: Make the EntityP in EndSim relative to ChunkP]
[56:42][Run the game and find that we can go off the screen okay]
[56:58][handmade_sim_region.cpp: Set the Entity->P and chunk movements at the end of EndSim]
[57:48][Run the game and find that the camera does now follow the hero]
[58:42][Q&A][:speech]
[1:00:25][@dustinten][Is there any real difference between #ifndef and #if !defined? I always use the first but I see you use the latter]
[1:00:55][@dudeinbasement1][Do you feel like we take steps backward when we get into code we haven't been in in a while, e.g. the problems with moving the screen?]
[1:01:22][@grub_smub][Do you use a lot of header files?]
[1:01:53][Remove all instances of #if !defined]
[1:06:07][@xgabrielxal][Why not #pragma once?]
[1:08:56][@erdomina][Would you say the architecture of the entity system is based more on experience than on exploration?]
[1:09:28][@dustinten][Do you have a plan for the "components" of the entities? Just use the flags like you are now?]
[1:09:47][@longboolean][As a codebase grows new functions are created and others are no longer called anywhere. Are there any good ways that you recommend for finding out which functions / blocks of code are never used anywhere?]
[1:11:29][@duroate][Is there a way to run the game "entirely" and find out what parts of your code aren't being used, to get rid of?]
[1:13:02][@josianmarriott][The dynamite jack entity system is similar (but without compression)]
[1:13:37][@ttbjm][Have you checked LOC recently?]
[1:14:14][@Jim0_o][How is your arm now? Any chance of a streamathon?]
[1:14:39][@dudeinbasement1][CTime needs cloc built-in]
[1:15:37][@J_vanRijn][Re code coverage, when Farbrausch was trying to cut down size of Kkrieger they wrote a quick code coverage tool called Lekktor and because someone didn't use a certain key in the menu, the code to handle it was left out in the released version]
[1:20:33][Wrap it up][:speech]
[/video]
