requested alterations.

bool AIPlayer::checkLosClear(Point3F _pos) removed as not fit for purpose at the present time. Something to revisit when I'm spread less thin, or give someone else a crack at it.
This commit is contained in:
Azaezel 2014-07-13 12:24:17 -05:00
parent 9bed39b7d0
commit e332609003
2 changed files with 33 additions and 41 deletions

View file

@ -609,17 +609,22 @@ DefineEngineMethod( AIPlayer, getAimObject, S32, (),,
bool AIPlayer::checkInLos(GameBase* target, bool _useMuzzle, bool _checkEnabled)
{
if (!isServerObject()) return false;
if (!(bool(target)))
if (!target)
{
target = mAimObject.getPointer();
if (!(bool(target)))
if (!target)
return false;
}
if (_checkEnabled)
{
ShapeBase *shapeBaseCheck = dynamic_cast<ShapeBase *>(target);
if (shapeBaseCheck)
if (shapeBaseCheck->getDamageState() != Enabled) return false;
if (target->getTypeMask() & ShapeBaseObjectType)
{
ShapeBase *shapeBaseCheck = static_cast<ShapeBase *>(target);
if (shapeBaseCheck)
if (shapeBaseCheck->getDamageState() != Enabled) return false;
}
else
return false;
}
RayInfo ri;
@ -652,42 +657,34 @@ bool AIPlayer::checkInLos(GameBase* target, bool _useMuzzle, bool _checkEnabled)
return hit;
}
bool AIPlayer::checkLosClear(Point3F _pos)
{
if (!isServerObject()) return false;
RayInfo ri;
disableCollision();
Point3F muzzlePoint;
getMuzzlePointAI(0, &muzzlePoint);
gServerContainer.castRay(muzzlePoint, _pos, sAIPlayerLoSMask, &ri);
bool emptySpace = bool(ri.object == NULL);
enableCollision();
return emptySpace;
}
DefineEngineMethod(AIPlayer, checkInLos, bool, (ShapeBase* obj, bool useMuzzle, bool checkEnabled),(NULL, false, false),
"@brief Check for an object in line of sight.\n"
"@obj Object to check. if blank it will check the current target.\n"
"@useMuzzle Use muzzle position (otherwise use eye position).\n"
"@checkEnabled check if the object is not disabled.\n")
"@brief Check whether an object is in line of sight.\n"
"@obj Object to check. (If blank, it will check the current target).\n"
"@useMuzzle Use muzzle position. Otherwise use eye position. (defaults to false).\n"
"@checkEnabled check whether the object can take damage and if so is still alive.(Defaults to false)\n")
{
return object->checkInLos(obj, useMuzzle, checkEnabled);
}
bool AIPlayer::checkInFoV(GameBase* target, F32 camFov, bool _checkEnabled)
{
if (!isServerObject()) return false;
if (!(bool(target))) return false;
if (!target)
{
target = mAimObject.getPointer();
if (!target)
return false;
}
if (_checkEnabled)
{
ShapeBase *shapeBaseCheck = dynamic_cast<ShapeBase *>(target);
if (shapeBaseCheck)
if (shapeBaseCheck->getDamageState() != Enabled) return false;
if (target->getTypeMask() & ShapeBaseObjectType)
{
ShapeBase *shapeBaseCheck = static_cast<ShapeBase *>(target);
if (shapeBaseCheck)
if (shapeBaseCheck->getDamageState() != Enabled) return false;
}
else
return false;
}
MatrixF cam = getTransform();
@ -699,11 +696,7 @@ bool AIPlayer::checkInFoV(GameBase* target, F32 camFov, bool _checkEnabled)
camFov = mDegToRad(camFov) / 2;
Point3F shapePos;
// Use the render transform instead of the box center
// otherwise it'll jitter.
MatrixF srtMat = target->getTransform();
srtMat.getColumn(3, &shapePos);
Point3F shapePos = target->getBoxCenter();
VectorF shapeDir = shapePos - camPos;
// Test to see if it's within our viewcone, this test doesn't
// actually match the viewport very well, should consider
@ -714,10 +707,10 @@ bool AIPlayer::checkInFoV(GameBase* target, F32 camFov, bool _checkEnabled)
}
DefineEngineMethod(AIPlayer, checkInFoV, bool, (ShapeBase* obj, F32 fov, bool checkEnabled), (NULL, 45.0f, false),
"@brief Check for an object within a specified veiw cone.\n"
"@obj Object to check. if blank it will check the current target.\n"
"@fov view angle (in degrees)\n"
"@checkEnabled check if the object is not disabled.\n")
"@brief Check whether an object is within a specified veiw cone.\n"
"@obj Object to check. (If blank, it will check the current target).\n"
"@fov view angle in degrees.(Defaults to 45)\n"
"@checkEnabled check whether the object can take damage and if so is still alive.(Defaults to false)\n")
{
return object->checkInFoV(obj, fov, checkEnabled);
}

View file

@ -81,7 +81,6 @@ public:
Point3F getAimLocation() const { return mAimLocation; }
void clearAim();
bool checkInLos(GameBase* target = NULL, bool _useMuzzle = false, bool _checkEnabled = false);
bool checkLosClear(Point3F _pos);
bool checkInFoV(GameBase* target = NULL, F32 camFov = 45.0f, bool _checkEnabled = false);
// Movement sets/gets