@@ -56,21 +56,6 @@ Vector g_playerTraceTeleportLocation;
5656int g_playerTraceTeleportSlot;
5757bool g_playerTraceNeedsTeleport = false ;
5858
59- enum MeshType {
60- GROUNDED = 0 ,
61- UNDER300,
62- AIRLOCKED,
63- MAX_TURN,
64- OVER300
65- };
66- static const Color mesh_colors[5 ] = {
67- { 255 , 0 , 0 }, // red: grounded
68- { 255 , 255 , 255 }, // white: speed < 300
69- { 150 , 75 , 0 }, // brown: speedlocked
70- { 255 , 220 , 0 }, // yellow: can't turn further
71- { 0 , 255 , 0 } // green: speed > 300
72- };
73-
7459static int tickInternalToUser (int tick, const Trace &trace) {
7560 if (tick == -1 ) return -1 ;
7661 switch (sar_trace_draw_time.GetInt ()) {
@@ -282,14 +267,11 @@ void PlayerTrace::DrawInWorld() const {
282267 Vector closest_pos;
283268 float closest_vel;
284269
285- int mesh_size[5 ] = {0 , 0 , 0 , 0 , 0 };
286- MeshId meshes[5 ] = {
287- OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[MeshType::GROUNDED ], draw_through_walls)),
288- OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[MeshType::UNDER300 ], draw_through_walls)),
289- OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[MeshType::AIRLOCKED], draw_through_walls)),
290- OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[MeshType::MAX_TURN ], draw_through_walls)),
291- OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[MeshType::OVER300 ], draw_through_walls))
292- };
270+ MeshId mesh_airlocked = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant ({ 150 , 75 , 0 }, draw_through_walls));
271+ MeshId mesh_max_turn = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant ({ 255 , 220 , 0 }, draw_through_walls));
272+ MeshId mesh_under300 = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant ({ 255 , 255 , 255 }, draw_through_walls));
273+ MeshId mesh_over300 = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant ({ 0 , 255 , 0 }, draw_through_walls));
274+ MeshId mesh_grounded = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant ({ 255 , 0 , 0 }, draw_through_walls));
293275
294276 Vector pos = trace.positions [slot][0 ];
295277 float speed = trace.velocities [slot][0 ].Length2D ();
@@ -348,21 +330,20 @@ void PlayerTrace::DrawInWorld() const {
348330 // Don't draw a line when going through a portal or 0 length line
349331 float pos_delta = (pos - new_pos).Length ();
350332 if (pos_delta < 127 && pos_delta > 0.001 ) {
333+ // Colors:
334+ // red: grounded
335+ // brown: speedlocked
336+ // yellow: can't turn further
337+ // green: speed>300
351338 Vector vel = trace.velocities [slot][i];
352- MeshType meshType = groundframes > 1 ? GROUNDED :
353- speed < 300 ? UNDER300 :
354- fabsf (vel. x ) >= 150 && fabsf (vel. y ) >= 150 ? AIRLOCKED :
355- fabsf (vel.x ) >= 60 && fabsf (vel.y ) >= 60 ? MAX_TURN :
356- OVER300;
357- MeshId mesh = meshes[meshType] ;
339+ MeshId &mesh =
340+ groundframes > 1 ? mesh_grounded :
341+ speed < 300 ? mesh_under300 :
342+ fabsf (vel.x ) >= 150 && fabsf (vel.y ) >= 150 ? mesh_airlocked :
343+ fabsf (vel. x ) >= 60 && fabsf (vel. y ) >= 60 ? mesh_max_turn :
344+ mesh_over300 ;
358345
359346 OverlayRender::addLine (mesh, pos, new_pos);
360-
361- mesh_size[meshType]++;
362- if (mesh_size[meshType] >= 8192 ) { // batches of 8192 to avoid crash by overflowing the vertex buffer
363- meshes[meshType] = OverlayRender::createMesh (RenderCallback::none, RenderCallback::constant (mesh_colors[meshType], draw_through_walls));
364- mesh_size[meshType] = 0 ;
365- }
366347 }
367348 if (pos_delta > 0.001 ) pos = new_pos;
368349 }
0 commit comments