MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / collideLine

Method collideLine

Engine/source/math/mBox.cpp:50–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48//-----------------------------------------------------------------------------
49
50bool Box3F::collideLine(const Point3F& start, const Point3F& end, F32* t, Point3F* n) const
51{
52 // Collide against bounding box. Need at least this for the editor.
53 F32 st,et;
54 F32 fst = 0;
55 F32 fet = 1;
56 const F32* bmin = &minExtents.x;
57 const F32* bmax = &maxExtents.x;
58 const F32* si = &start.x;
59 const F32* ei = &end.x;
60
61 static const Point3F na[3] = { Point3F(1.0f, 0.0f, 0.0f), Point3F(0.0f, 1.0f, 0.0f), Point3F(0.0f, 0.0f, 1.0f) };
62 Point3F finalNormal(0.0f, 0.0f, 0.0f);
63
64 for (S32 i = 0; i < 3; i++) {
65 bool n_neg = false;
66 if (si[i] < ei[i]) {
67 if (si[i] > bmax[i] || ei[i] < bmin[i])
68 return false;
69 F32 di = ei[i] - si[i];
70 st = (si[i] < bmin[i]) ? (bmin[i] - si[i]) / di : 0.0f;
71 et = (ei[i] > bmax[i]) ? (bmax[i] - si[i]) / di : 1.0f;
72 n_neg = true;
73 }
74 else {
75 if (ei[i] > bmax[i] || si[i] < bmin[i])
76 return false;
77 F32 di = ei[i] - si[i];
78 st = (si[i] > bmax[i]) ? (bmax[i] - si[i]) / di : 0.0f;
79 et = (ei[i] < bmin[i]) ? (bmin[i] - si[i]) / di : 1.0f;
80 }
81 if (st > fst) {
82 fst = st;
83 finalNormal = na[i];
84 if ( n_neg )
85 finalNormal.neg();
86 }
87 if (et < fet)
88 fet = et;
89
90 if (fet < fst)
91 return false;
92 }
93
94 *t = fst;
95 *n = finalNormal;
96 return true;
97}
98
99//-----------------------------------------------------------------------------
100

Callers 10

_castRayMethod · 0.80
castRayMethod · 0.80
collideRayMethod · 0.80
castrayMethod · 0.80
castRayMethod · 0.80
collideRayMethod · 0.80
castRayMethod · 0.80
castRayBaseMethod · 0.80
castRayMethod · 0.80
collideAxisGizmoMethod · 0.80

Calls 2

Point3FClass · 0.70
negMethod · 0.45

Tested by

no test coverage detected