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

Method validateEyePoint

Engine/source/afx/afxCamera.cpp:228–269  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

226
227
228void afxCamera::validateEyePoint(F32 pos, MatrixF *mat)
229{
230 if (pos != 0) {
231 // Use the eye transform to orient the camera
232 Point3F dir;
233 mat->getColumn(1, &dir);
234 pos *= mMaxOrbitDist - mMinOrbitDist;
235 // Use the camera node's pos.
236 Point3F startPos;
237 Point3F endPos;
238 mObjToWorld.getColumn(3,&startPos);
239
240 // Make sure we don't extend the camera into anything solid
241 if(mOrbitObject)
242 mOrbitObject->disableCollision();
243 disableCollision();
244 RayInfo collision;
245
246 SceneContainer* pContainer = isServerObject() ? &gServerContainer : &gClientContainer;
247 if (!pContainer->castRay(startPos, startPos - dir * 2.5 * pos, afxCameraData::sCameraCollisionMask, &collision))
248 endPos = startPos - dir * pos;
249 else
250 {
251 float dot = mDot(dir, collision.normal);
252 if(dot > 0.01)
253 {
254 float colDist = mDot(startPos - collision.point, dir) - (1 / dot) * CameraRadius;
255 if(colDist > pos)
256 colDist = pos;
257 if(colDist < 0)
258 colDist = 0;
259 endPos = startPos - dir * colDist;
260 }
261 else
262 endPos = startPos - dir * pos;
263 }
264 mat->setColumn(3,endPos);
265 enableCollision();
266 if(mOrbitObject)
267 mOrbitObject->enableCollision();
268 }
269}
270
271//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
272

Callers

nothing calls this directly

Calls 6

getColumnMethod · 0.80
setColumnMethod · 0.80
mDotFunction · 0.50
disableCollisionMethod · 0.45
castRayMethod · 0.45
enableCollisionMethod · 0.45

Tested by

no test coverage detected