MCPcopy Create free account
hub / github.com/ddnet/ddnet / IntersectLine

Method IntersectLine

src/game/collision.cpp:329–358  ·  view source on GitHub ↗

TODO: rewrite this smarter!

Source from the content-addressed store, hash-verified

327
328// TODO: rewrite this smarter!
329int CCollision::IntersectLine(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision) const
330{
331 float Distance = distance(Pos0, Pos1);
332 int End(Distance + 1);
333 vec2 Last = Pos0;
334 for(int i = 0; i <= End; i++)
335 {
336 float a = i / (float)End;
337 vec2 Pos = mix(Pos0, Pos1, a);
338 // Temporary position for checking collision
339 int ix = round_to_int(Pos.x);
340 int iy = round_to_int(Pos.y);
341
342 if(CheckPoint(ix, iy))
343 {
344 if(pOutCollision)
345 *pOutCollision = Pos;
346 if(pOutBeforeCollision)
347 *pOutBeforeCollision = Last;
348 return GetCollisionAt(ix, iy);
349 }
350
351 Last = Pos;
352 }
353 if(pOutCollision)
354 *pOutCollision = Pos1;
355 if(pOutBeforeCollision)
356 *pOutBeforeCollision = Pos1;
357 return 0;
358}
359
360int CCollision::IntersectLineTeleHook(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision, int *pTeleNr) const
361{

Callers 3

TickMethod · 0.80
TickMethod · 0.80
FireMethod · 0.80

Calls 3

distanceFunction · 0.85
mixFunction · 0.85
round_to_intFunction · 0.85

Tested by

no test coverage detected