Index hero/code633
This commit is contained in:
		
							parent
							
								
									2a5e2068e2
								
							
						
					
					
						commit
						3f7474aa26
					
				|  | @ -0,0 +1,104 @@ | ||||||
|  | [video output=day633 member=cmuratori stream_platform=twitch stream_username=handmade_hero  project=code title="Narrowing in on a Collision Scheme" vod_platform=youtube id=8-qq8FANzhs annotator=Miblo] | ||||||
|  | [0:00][Recap and set the stage for the day][:speech] | ||||||
|  | [0:25][Demo the current state of :movement][:run] | ||||||
|  | [1:00][Simple and stable :collision detection and resolution][:speech] | ||||||
|  | [2:14][Re-enable the MoveEntityLocally() loop in MoveEntity()][:collision] | ||||||
|  | [2:23][We lack :collision][:run] | ||||||
|  | [2:37][Double-check MoveEntity()][:collision :research] | ||||||
|  | [3:07][Our glove penetrates the wall][:collision :run] | ||||||
|  | [3:17][Make MoveEntityLocally() draw occupation state][:collision :"debug visualisation"] | ||||||
|  | [3:29][We detect :collision but then tunnel through the familiar][:run] | ||||||
|  | [3:41][Double-check MoveEntityLocally()][:collision :research] | ||||||
|  | [4:55][Increase the StepCount from 5 to 10 in MoveEntity()][:collision] | ||||||
|  | [5:03][We clearly see :collision detection in red][:run] | ||||||
|  | [5:21][Reacquaint ourselves with MoveEntityLocally() and MoveEntity()][:collision :research] | ||||||
|  | [8:29][The utility of stating a universally minimum thickness, as MOTION_DISPLACEMENT_SIZE][:collision :geometry :speech] | ||||||
|  | [10:39][Reacquaint ourselves with MoveEntityLocally() and MoveEntity() (cont.)][:collision :research] | ||||||
|  | [11:52][Prevent MoveEntity() from capping the StepCount][:collision] | ||||||
|  | [12:02][We still detect collisions, but tunnel][:collision :run] | ||||||
|  | [12:14][Scour MoveEntityLocally() for bugs][:collision :research] | ||||||
|  | [16:19][Delete VoxelI from MoveEntityLocally()][:collision] | ||||||
|  | [16:34][Scour MoveEntityLocally() for bugs (cont.)][:collision :research] | ||||||
|  | [16:43][Disable the BestP computation loop in MoveEntityLocally()][:collision] | ||||||
|  | [16:58][Entities can erroneously move][:collision :run] | ||||||
|  | [17:26][Scour MoveEntity() for bugs][:collision :research] | ||||||
|  | [18:08][Prevent MoveEntity() from modifying Entity->P][:collision] | ||||||
|  | [18:28][Entities can no longer move, as desired][:collision :run] | ||||||
|  | [18:34][Re-enable the BestP computation loop in MoveEntityLocally()][:collision] | ||||||
|  | [18:45][Entities now collide, but can get embedded][:collision :run] | ||||||
|  | [20:16][Conceptualising the voxelised :collision search, to prevent / recover from embedding][:research] | ||||||
|  | [28:06][Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target][:collision] | ||||||
|  | [31:15][Non-embedded entities collide nicely][:collision :run] | ||||||
|  | [33:32][A familiar has got stuck underground][:collision :run] | ||||||
|  | [34:02][Consider pathfinding our :collision through a stack of voxels][:collision :research] | ||||||
|  | [37:22][Enable MoveEntityLocally() to detect and resolve embedding][:collision] | ||||||
|  | [39:05][Our initially embedded glove may now move, but can tunnel][:collision :run] | ||||||
|  | [39:44][Investigate our tunneling issue][:collision :research] | ||||||
|  | [40:47][Make MoveEntityLocally() test the occupation state of all eight surrounding voxels][:collision] | ||||||
|  | [40:58][We still tunnel][:collision :run] | ||||||
|  | [41:05][Consider drawing more :collision information][:"debug visualisation" :research] | ||||||
|  | [42:24][Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target][:collision] | ||||||
|  | [42:46][Consider drawing more :collision information (cont.)][:"debug visualisation" :research] | ||||||
|  | [44:15][Take a closer look at our glove vs familiar :collision][:run] | ||||||
|  | [44:57][Wonder why it fails our AnyOpen check][:collision :research] | ||||||
|  | [45:45][Make MoveEntityLocally() test the occupation state of all eight surrounding voxels][:collision] | ||||||
|  | [46:02][We still tunnel][:collision :run] | ||||||
|  | [46:15][Prevent MoveEntityLocally() from using the target position if embedded][:collision] | ||||||
|  | [46:25][We can't test tunneling][:collision :run] | ||||||
|  | [46:32][Make AddPlayer() elevate the glove][:"entity system"] | ||||||
|  | [47:14][We can test it, and no longer tunnel][:collision :run] | ||||||
|  | [49:29][Let MoveEntityLocally() use the target position if embedded][:collision] | ||||||
|  | [49:43][We tunnel trivially][:collision :run] | ||||||
|  | [49:55][Make MoveEntityLocally() set AnyOpen using an OccupiedCount][:collision] | ||||||
|  | [51:35][We still tunnel][:collision :run] | ||||||
|  | [51:50][Wonder how MoveEntityLocally() detects embedding so often][:collision :research] | ||||||
|  | [53:04][Increase the ApronSize to the full MOTION_DISPLACEMENT_SIZE in MoveEntityLocally()][:collision] | ||||||
|  | [53:11][We still tunnel, but less easily][:collision :run] | ||||||
|  | [54:20][How are two frames disagreeing on which :collision volumes are occupied?][:research] | ||||||
|  | [56:41][Make MoveEntity() only allow one micro-move, i.e. one call to MoveEntityLocally()][:collision] | ||||||
|  | [57:11][We still tunnel][:collision :run] | ||||||
|  | [57:58][Delete VolumeDim and VolumeP from MoveEntityLocally()][:collision] | ||||||
|  | [58:08][Consider drawing more :collision information][:"debug visualisation" :research] | ||||||
|  | [1:01:20][Should we start visualisation now?][:"debug visualisation" :speech] | ||||||
|  | [1:01:45][@suspect__zero][The game looks like it lags hard when the punch flies around. Is that because of the debugging tools being active?][:performance] | ||||||
|  | [1:04:55][Compile in -Od] | ||||||
|  | [1:05:16][Show off the :performance in -Od][:run] | ||||||
|  | [1:05:32][Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_lighting.cpp][:language :lighting :performance] | ||||||
|  | [1:07:28][ComputeLightPropagationWork() takes 78% of our frame time][:lighting :performance :run] | ||||||
|  | [1:07:52][Toggle off MoveEntity()][:collision] | ||||||
|  | [1:08:25][Gauge our :performance in -Od][:lighting :run] | ||||||
|  | [1:09:03][Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_light_atlas.cpp][:language :lighting :performance] | ||||||
|  | [1:10:23][Gauge our :performance in -Od][:lighting :run] | ||||||
|  | [1:10:45][Remove the #prama optimize() and re-enable MoveEntity()][:collision :language :performance] | ||||||
|  | [1:11:52][Step through MoveEntityLocally()][:collision :run] | ||||||
|  | [1:12:48][Initialise a TestP in MoveEntityLocally()][:collision] | ||||||
|  | [1:13:29][Step through MoveEntityLocally() watching the TestP and other values][:collision :run] | ||||||
|  | [1:15:24][Set a break point in the !AnyOpen path][:collision :run] | ||||||
|  | [1:16:47][Tunnel through, without hitting that break point][:collision :run] | ||||||
|  | [1:18:18][Compile in -O2] | ||||||
|  | [1:18:27][@bearexplicit][It pushed the skeleton up over the glove?][:collision] | ||||||
|  | [1:18:36][The glove is not tunneling, but passing beneath the familiar][:collision :run] | ||||||
|  | [1:21:09][Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target][:collision] | ||||||
|  | [1:21:27][Our glove and familiar are stuck][:collision :run] | ||||||
|  | [1:22:16][Enable MoveEntityLocally() to clip away the voxel search directions behind our direction of motion][:collision] | ||||||
|  | [1:26:48][Our glove may be blocked from moving upwards, but may perhaps move sideways][:collision :run] | ||||||
|  | [1:27:11][Consider clipping the :collision box][:research] | ||||||
|  | [1:31:35][Start to make MoveEntityLocally() clip the :collision box] | ||||||
|  | [1:35:52][Consider making MoveEntityLocally() permit movement within the voxel interior][:collision :research] | ||||||
|  | [1:36:46][Enable MoveEntityLocally() to (dis)allow movement on a direction-by-direction basis][:collision] | ||||||
|  | [1:43:23][Our glove and familiar get unstuck][:collision :run] | ||||||
|  | [1:43:39][Make a note to pathfind through the voxel][:collision] | ||||||
|  | [1:44:09][@macielda][Q: The second if has a problem: it should be Dir.y not Dir.z][:collision] | ||||||
|  | [1:44:27][Our :movement is slow][:collision :run] | ||||||
|  | [1:44:52][Let MoveEntity() allow all micro-moves, i.e. multiple calls to MoveEntityLocally()][:collision] | ||||||
|  | [1:45:00][Our :movement is normal][:collision :run] | ||||||
|  | [1:45:44][That's it for today][:speech] | ||||||
|  | [1:46:16][Q&A][:speech] | ||||||
|  | [1:47:08][@mindmark42][Q: Can you explain this direction check a bit more?][:collision] | ||||||
|  | [1:48:33][@ommos61][Q: Have you forgotten to upload Day 632 to YouTube?] | ||||||
|  | [1:49:06][@mindmark42][Q: So it can't move backwards?][:collision] | ||||||
|  | [1:50:07][@gheoan][After discovering the glove was moving under the skull you are now trying to prevent that?][:collision] | ||||||
|  | [1:50:19][@sagian2005][Q: If you're trapped and have the vector in, why can't you just follow the vector back out?][:collision] | ||||||
|  | [1:51:57][@thesandvichmaker][Q: (Semi off-topic) With the live code reloading, I made a thing where global variables in the dll can be saved and restored when you reload the dll. Have you tried that before? I thought it's kind of neat][:"hot reloading"] | ||||||
|  | [1:53:16][Wrap it on up][:speech] | ||||||
|  | [/video] | ||||||
		Loading…
	
		Reference in New Issue