|
@@ -898,17 +898,9 @@ ShapeBase::ShapeBase()
|
|
|
mCloakLevel( 0.0f ),
|
|
|
mDamageFlash( 0.0f ),
|
|
|
mWhiteOut( 0.0f ),
|
|
|
- mInvincibleEffect( 0.0f ),
|
|
|
- mInvincibleDelta( 0.0f ),
|
|
|
- mInvincibleCount( 0.0f ),
|
|
|
- mInvincibleSpeed( 0.0f ),
|
|
|
- mInvincibleTime( 0.0f ),
|
|
|
- mInvincibleFade( 0.1f ),
|
|
|
- mInvincibleOn( false ),
|
|
|
mIsControlled( false ),
|
|
|
mConvexList( new Convex ),
|
|
|
mCameraFov( 90.0f ),
|
|
|
- mShieldNormal( 0.0f, 0.0f, 1.0f ),
|
|
|
mFadeOut( true ),
|
|
|
mFading( false ),
|
|
|
mFadeVal( 1.0f ),
|
|
@@ -1382,9 +1374,6 @@ void ShapeBase::advanceTime(F32 dt)
|
|
|
mCloakLevel = 0.0;
|
|
|
}
|
|
|
}
|
|
|
- if(mInvincibleOn)
|
|
|
- updateInvincibleEffect(dt);
|
|
|
-
|
|
|
if(mFading)
|
|
|
{
|
|
|
mFadeElapsedTime += dt;
|
|
@@ -1987,119 +1976,6 @@ void ShapeBase::getCameraTransform(F32* pos,MatrixF* mat)
|
|
|
mat->mul( gCamFXMgr.getTrans() );
|
|
|
}
|
|
|
|
|
|
-// void ShapeBase::getCameraTransform(F32* pos,MatrixF* mat)
|
|
|
-// {
|
|
|
-// // Returns camera to world space transform
|
|
|
-// // Handles first person / third person camera position
|
|
|
-
|
|
|
-// if (isServerObject() && mShapeInstance)
|
|
|
-// mShapeInstance->animateNodeSubtrees(true);
|
|
|
-
|
|
|
-// if (*pos != 0) {
|
|
|
-// F32 min,max;
|
|
|
-// Point3F offset;
|
|
|
-// MatrixF eye,rot;
|
|
|
-// getCameraParameters(&min,&max,&offset,&rot);
|
|
|
-// getRenderEyeTransform(&eye);
|
|
|
-// mat->mul(eye,rot);
|
|
|
-
|
|
|
-// // Use the eye transform to orient the camera
|
|
|
-// VectorF vp,vec;
|
|
|
-// vp.x = vp.z = 0;
|
|
|
-// vp.y = -(max - min) * *pos;
|
|
|
-// eye.mulV(vp,&vec);
|
|
|
-
|
|
|
-// // Use the camera node's pos.
|
|
|
-// Point3F osp,sp;
|
|
|
-// if (mDataBlock->cameraNode != -1) {
|
|
|
-// mShapeInstance->mNodeTransforms[mDataBlock->cameraNode].getColumn(3,&osp);
|
|
|
-// getRenderTransform().mulP(osp,&sp);
|
|
|
-// }
|
|
|
-// else
|
|
|
-// getRenderTransform().getColumn(3,&sp);
|
|
|
-
|
|
|
-// // Make sure we don't extend the camera into anything solid
|
|
|
-// Point3F ep = sp + vec;
|
|
|
-// ep += offset;
|
|
|
-// disableCollision();
|
|
|
-// if (isMounted())
|
|
|
-// getObjectMount()->disableCollision();
|
|
|
-// RayInfo collision;
|
|
|
-// if (mContainer->castRay(sp,ep,(0xFFFFFFFF & ~(WaterObjectType|ForceFieldObjectType|GameBaseObjectType|DefaultObjectType)),&collision)) {
|
|
|
-// *pos = collision.t *= 0.9;
|
|
|
-// if (*pos == 0)
|
|
|
-// eye.getColumn(3,&ep);
|
|
|
-// else
|
|
|
-// ep = sp + vec * *pos;
|
|
|
-// }
|
|
|
-// mat->setColumn(3,ep);
|
|
|
-// if (isMounted())
|
|
|
-// getObjectMount()->enableCollision();
|
|
|
-// enableCollision();
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// getRenderEyeTransform(mat);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
-// void ShapeBase::getRenderCameraTransform(F32* pos,MatrixF* mat)
|
|
|
-// {
|
|
|
-// // Returns camera to world space transform
|
|
|
-// // Handles first person / third person camera position
|
|
|
-
|
|
|
-// if (isServerObject() && mShapeInstance)
|
|
|
-// mShapeInstance->animateNodeSubtrees(true);
|
|
|
-
|
|
|
-// if (*pos != 0) {
|
|
|
-// F32 min,max;
|
|
|
-// Point3F offset;
|
|
|
-// MatrixF eye,rot;
|
|
|
-// getCameraParameters(&min,&max,&offset,&rot);
|
|
|
-// getRenderEyeTransform(&eye);
|
|
|
-// mat->mul(eye,rot);
|
|
|
-
|
|
|
-// // Use the eye transform to orient the camera
|
|
|
-// VectorF vp,vec;
|
|
|
-// vp.x = vp.z = 0;
|
|
|
-// vp.y = -(max - min) * *pos;
|
|
|
-// eye.mulV(vp,&vec);
|
|
|
-
|
|
|
-// // Use the camera node's pos.
|
|
|
-// Point3F osp,sp;
|
|
|
-// if (mDataBlock->cameraNode != -1) {
|
|
|
-// mShapeInstance->mNodeTransforms[mDataBlock->cameraNode].getColumn(3,&osp);
|
|
|
-// getRenderTransform().mulP(osp,&sp);
|
|
|
-// }
|
|
|
-// else
|
|
|
-// getRenderTransform().getColumn(3,&sp);
|
|
|
-
|
|
|
-// // Make sure we don't extend the camera into anything solid
|
|
|
-// Point3F ep = sp + vec;
|
|
|
-// ep += offset;
|
|
|
-// disableCollision();
|
|
|
-// if (isMounted())
|
|
|
-// getObjectMount()->disableCollision();
|
|
|
-// RayInfo collision;
|
|
|
-// if (mContainer->castRay(sp,ep,(0xFFFFFFFF & ~(WaterObjectType|ForceFieldObjectType|GameBaseObjectType|DefaultObjectType)),&collision)) {
|
|
|
-// *pos = collision.t *= 0.9;
|
|
|
-// if (*pos == 0)
|
|
|
-// eye.getColumn(3,&ep);
|
|
|
-// else
|
|
|
-// ep = sp + vec * *pos;
|
|
|
-// }
|
|
|
-// mat->setColumn(3,ep);
|
|
|
-// if (isMounted())
|
|
|
-// getObjectMount()->enableCollision();
|
|
|
-// enableCollision();
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// getRenderEyeTransform(mat);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
void ShapeBase::getCameraParameters(F32 *min,F32* max,Point3F* off,MatrixF* rot)
|
|
|
{
|
|
|
*min = mDataBlock->cameraMinDist;
|
|
@@ -2153,52 +2029,6 @@ bool ShapeBase::useObjsEyePoint() const
|
|
|
return mDataBlock->useEyePoint;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-//----------------------------------------------------------------------------
|
|
|
-F32 ShapeBase::getInvincibleEffect() const
|
|
|
-{
|
|
|
- return mInvincibleEffect;
|
|
|
-}
|
|
|
-
|
|
|
-void ShapeBase::setupInvincibleEffect(F32 time, F32 speed)
|
|
|
-{
|
|
|
- if(isClientObject())
|
|
|
- {
|
|
|
- mInvincibleCount = mInvincibleTime = time;
|
|
|
- mInvincibleSpeed = mInvincibleDelta = speed;
|
|
|
- mInvincibleEffect = 0.0f;
|
|
|
- mInvincibleOn = true;
|
|
|
- mInvincibleFade = 1.0f;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mInvincibleTime = time;
|
|
|
- mInvincibleSpeed = speed;
|
|
|
- setMaskBits(InvincibleMask);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void ShapeBase::updateInvincibleEffect(F32 dt)
|
|
|
-{
|
|
|
- if(mInvincibleCount > 0.0f )
|
|
|
- {
|
|
|
- if(mInvincibleEffect >= ((0.3 * mInvincibleFade) + 0.05f) && mInvincibleDelta > 0.0f)
|
|
|
- mInvincibleDelta = -mInvincibleSpeed;
|
|
|
- else if(mInvincibleEffect <= 0.05f && mInvincibleDelta < 0.0f)
|
|
|
- {
|
|
|
- mInvincibleDelta = mInvincibleSpeed;
|
|
|
- mInvincibleFade = mInvincibleCount / mInvincibleTime;
|
|
|
- }
|
|
|
- mInvincibleEffect += mInvincibleDelta;
|
|
|
- mInvincibleCount -= dt;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mInvincibleEffect = 0.0f;
|
|
|
- mInvincibleOn = false;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
//----------------------------------------------------------------------------
|
|
|
void ShapeBase::setVelocity(const VectorF&)
|
|
|
{
|
|
@@ -3102,8 +2932,7 @@ U32 ShapeBase::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
|
}
|
|
|
|
|
|
if(!stream->writeFlag(mask & (NameMask | DamageMask | SoundMask | MeshHiddenMask |
|
|
|
- ThreadMask | ImageMask | CloakMask | InvincibleMask |
|
|
|
- ShieldMask | SkinMask)))
|
|
|
+ ThreadMask | ImageMask | CloakMask | SkinMask)))
|
|
|
return retMask;
|
|
|
|
|
|
if (stream->writeFlag(mask & DamageMask)) {
|
|
@@ -3173,7 +3002,7 @@ U32 ShapeBase::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
|
}
|
|
|
|
|
|
// Group some of the uncommon stuff together.
|
|
|
- if (stream->writeFlag(mask & (NameMask | ShieldMask | CloakMask | InvincibleMask | SkinMask | MeshHiddenMask ))) {
|
|
|
+ if (stream->writeFlag(mask & (NameMask | CloakMask | SkinMask | MeshHiddenMask ))) {
|
|
|
|
|
|
if (stream->writeFlag(mask & CloakMask))
|
|
|
{
|
|
@@ -3194,14 +3023,6 @@ U32 ShapeBase::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
|
if (stream->writeFlag(mask & NameMask)) {
|
|
|
con->packNetStringHandleU(stream, mShapeNameHandle);
|
|
|
}
|
|
|
- if (stream->writeFlag(mask & ShieldMask)) {
|
|
|
- stream->writeNormalVector(mShieldNormal, ShieldNormalBits);
|
|
|
- stream->writeFloat( getEnergyValue(), EnergyLevelBits );
|
|
|
- }
|
|
|
- if (stream->writeFlag(mask & InvincibleMask)) {
|
|
|
- stream->write(mInvincibleTime);
|
|
|
- stream->write(mInvincibleSpeed);
|
|
|
- }
|
|
|
|
|
|
if ( stream->writeFlag( mask & MeshHiddenMask ) )
|
|
|
stream->writeBits( mMeshHidden );
|
|
@@ -3443,25 +3264,6 @@ void ShapeBase::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
|
if (stream->readFlag()) { // NameMask
|
|
|
mShapeNameHandle = con->unpackNetStringHandleU(stream);
|
|
|
}
|
|
|
- if(stream->readFlag()) // ShieldMask
|
|
|
- {
|
|
|
- // Cloaking, Shield, and invul masking
|
|
|
- Point3F shieldNormal;
|
|
|
- stream->readNormalVector(&shieldNormal, ShieldNormalBits);
|
|
|
-
|
|
|
- // CodeReview [bjg 4/6/07] This is our energy level - why aren't we storing it? Was in a
|
|
|
- // local variable called energyPercent.
|
|
|
- stream->readFloat(EnergyLevelBits);
|
|
|
- }
|
|
|
-
|
|
|
- if (stream->readFlag())
|
|
|
- {
|
|
|
- // InvincibleMask
|
|
|
- F32 time, speed;
|
|
|
- stream->read(&time);
|
|
|
- stream->read(&speed);
|
|
|
- setupInvincibleEffect(time, speed);
|
|
|
- }
|
|
|
|
|
|
if ( stream->readFlag() ) // MeshHiddenMask
|
|
|
{
|
|
@@ -4826,18 +4628,6 @@ DefineEngineMethod( ShapeBase, setCameraFov, void, ( F32 fov ),,
|
|
|
object->setCameraFov( fov );
|
|
|
}
|
|
|
|
|
|
-DefineEngineMethod( ShapeBase, setInvincibleMode, void, ( F32 time, F32 speed ),,
|
|
|
- "@brief Setup the invincible effect.\n\n"
|
|
|
-
|
|
|
- "This effect is used for HUD feedback to the user that they are invincible.\n"
|
|
|
- "@note Currently not implemented\n"
|
|
|
-
|
|
|
- "@param time duration in seconds for the invincible effect\n"
|
|
|
- "@param speed speed at which the invincible effect progresses\n" )
|
|
|
-{
|
|
|
- object->setupInvincibleEffect( time, speed );
|
|
|
-}
|
|
|
-
|
|
|
DefineEngineMethod( ShapeBase, startFade, void, ( S32 time, S32 delay, bool fadeOut ),,
|
|
|
"@brief Fade the object in or out without removing it from the scene.\n\n"
|
|
|
|