MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / GetCollision

Method GetCollision

TombEngine/Physics/Objects/CollisionMesh.cpp:162–207  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

160 }
161
162 std::optional<CollisionMeshRayCollisionData> CollisionMesh::GetCollision(const Ray& ray, float dist) const
163 {
164 // Get matrices.
165 auto rotMatrix = GetRotationMatrix();
166 auto transformMatrix = rotMatrix * GetTranslationMatrix();
167
168 // Calculate local ray.
169 auto localRay = Ray(Vector3::Transform(ray.position, transformMatrix.Invert()), Vector3::Transform(ray.direction, rotMatrix.Invert()));
170
171 // Get bounded triangle IDs.
172 auto triIds = _triangleTree.GetBoundedObjectIds(localRay, dist);
173 if (triIds.empty())
174 return std::nullopt;
175
176 const LocalCollisionTriangle* closestTri = nullptr;
177 float closestDist = dist;
178
179 // Find closest triangle.
180 for (int triId : triIds)
181 {
182 const auto& tri = _triangles[triId];
183
184 float intersectDist = 0.0f;
185 if (tri.Intersects(localRay, intersectDist, _vertices) && intersectDist <= closestDist)
186 {
187 closestTri = &tri;
188 closestDist = intersectDist;
189 }
190 }
191
192 // No triangle collision; return early.
193 if (closestTri == nullptr)
194 return std::nullopt;
195
196 // Create and return ray-mesh collision.
197 auto meshColl = CollisionMeshRayCollisionData{};
198 meshColl.Triangle.Vertices =
199 {
200 Vector3::Transform(closestTri->GetVertex0(_vertices), transformMatrix),
201 Vector3::Transform(closestTri->GetVertex1(_vertices), transformMatrix),
202 Vector3::Transform(closestTri->GetVertex2(_vertices), transformMatrix)
203 };
204 meshColl.Triangle.Normal = Vector3::Transform(closestTri->GetNormal(_vertices), rotMatrix);
205 meshColl.Distance = closestDist;
206 return meshColl;
207 }
208
209 void CollisionMesh::SetPosition(const Vector3& pos)
210 {

Callers 1

GetRoomLosCollisionFunction · 0.80

Calls 5

RayClass · 0.85
IntersectsMethod · 0.80
GetNormalMethod · 0.80
GetBoundedObjectIdsMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected