[video output=day058 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Using the Spatial Partition" vod_platform=youtube id=W_z9VN1m2Oo annotator=schme annotator=Miblo] [0:28][Assets: handmade_hero_test_assets_002.zip is released] [2:01][Recap] [3:28][handmade.cpp: Pull in entities by chunk, rather than tile] [5:12][Blackboard: Pulling entities into the working set] [8:46][handmade.cpp: Figure out the CameraBounds situation] [15:25][Make a version of MakeEntityHighFrequency to be called at the lower level] [16:21][Introduce GetCameraSpaceP] [17:41][Continue writing these versions of MakeEntityHighFrequency] [20:18][Use these functions in SetCamera] [21:41][handmade_math.h: Introduce GetMinCorner, GetMaxCorner and GetCenter] [22:52][Debugger: Step through and see what's happening] [24:14][handmade.cpp: Fix the Assertion in MakeEntityHighFrequency] [24:34][Look at AddWall] [25:51][handmade_world.cpp: Look at Subtract and ChunkPositionFromTilePosition] [26:44][Debugger: Step in to AddWall] [28:56][handmade.cpp: Call ChangeEntityLocation in AddLowEntity and make it pass world_position P] [30:29][Pass the world_position P to AddPlayer and finish implementing the spatial partition] [34:53][Run it and see what's happening] [35:59][Debugger: Step into AddPlayer] [36:47][handmade.cpp: Tweak AddLowEntity] [38:02][Debugger: Continue debugging AddPlayer] [38:37][handmade_world.cpp: Tweak ChangeEntityLocation] [39:40][Debugger: Step through the loop in OffsetAndCheckFrequencyByArea] [41:25][handmade.cpp: Add an assertion in OffsetAndCheckFrequencyByArea] [42:37][Debugger: Step through and hit this assertion] [43:34][handmade.cpp: Introduce ValidateEntityPairs] [45:56][Debugger: The MakeEntityHighFrequency routine in SetCamera is the problem] [47:04][handmade.cpp: Pass the correct Index to this routine] [48:05][Run the game and note that the spatial partition is nominally working] [48:48][handmade.h and handmade.cpp: Test the new assets] [50:40][Run the game and find that the new trees are drawn at the wrong locations] [51:04][handmade.cpp: Stop drawing the textured background] [52:51][Assets: Find the base point for the tree in GIMP] [53:37][handmade.cpp: Set the tree's alignment and do DrawRectangle as well] [54:32][Run the game and observe our new trees in their correct positions] [57:44][Q&A][:speech] [58:52][Q: For zooming out, could you somehow modify MetersToPixels to make things smaller as you zoom?] [59:39][Q: What is inline v2?] [1:01:04][Q: Why use Emacs versus Visual Studio's IDE?] [1:02:36][Q: Is Emacs better than Vim, or is it just preference?] [1:03:43][Q: Do you think that how fast code runs is the best metric for good code, or do you value simplicity or extensibility as well?] [1:05:59][Q: Why are you using Visual Studio here if you use Emacs?] [1:06:34][@swagkitty69][Did you ever figure out a fix for Emacs whenever you try to create a new file and the patch changes?] [1:07:03][Q: What's guiding you to make steps towards completing the game, i.e. a list of requirements for the game?] [1:08:54][Q: Do you ever get annoyed with reading a high depth of nested for loops?] [1:09:55][Q: Was watching some ROM hacking earlier and watching the registers and memory update in real time was really cool. Do you think a debugger for C could work as well as that?] [1:10:39][Q: How much time do you spend outside the stream in thinking about the code and game design? If you coded eight hours a day, would you be able to code consistently with the same pace as during your stream?] [1:11:38][Q: Can you please put in a proper PRNG before you write world gen algorithms?] [1:12:46][Q: Do you ever feel the need to use recursive functions?] [1:13:15][Q: Do you build with build.exe in command prompt or batch file?] [1:14:11][Q: When you say "renderer", what exactly does that mean? If the drawing you have now isn't rendering, then at what point do we go from drawing to rendering?] [1:15:55][Q: Have any of your friends voiced disagreement with design decisions you've made in this engine?] [1:16:22][Q: How do you distinguish between what a lot of people might called "premature optimisation" versus ensuring a good design that allows for high performance? The difference there seems really subtle. I feel that designing for high performance is simply organising the code and writing in such a way that does not unnecessarily slow down the code and prevent future optimisations, while premature optimisation is simply optimising something because you think something will be slow without evidence] [1:19:52][Q: 4096 random numbers] [1:20:03][Q: Will we have positionless entities? Would something like the current price of Almond Milk futures be an entity?] [1:20:22][Q: Will you be making a level / tile map editor for this game, for easier level creation?] [1:20:40][Q: What is your algorithm for a collision with three and more entities?] [1:21:21][Blackboard: Moving in 1/30th sec] [1:23:15][Q: Do you plan to use some form of logging for debugging purposes?] [1:23:48][Q: When you remove a LowEntity from the Chunk list, you swap another into its place. Won't that mess with references?] [1:24:15][@happy_vertex][Even for slow frequency entities?] [1:24:59][We have come to the end of the questions][:speech] [/video]