layer, and playerControllerComponent shadowvar cleanups

This commit is contained in:
Azaezel 2018-03-14 13:12:26 -05:00
parent 1e65a01cf9
commit d80f35bb7d
3 changed files with 113 additions and 114 deletions

View file

@ -441,16 +441,15 @@ void PlayerControllerComponent::updateMove()
// get the head pitch and add it to the moveVec // get the head pitch and add it to the moveVec
// This more accurate swim vector calc comes from Matt Fairfax // This more accurate swim vector calc comes from Matt Fairfax
MatrixF xRot, zRot; MatrixF xRot;
xRot.set(EulerF(mOwner->getRotation().asEulerF().x, 0, 0)); xRot.set(EulerF(mOwner->getRotation().asEulerF().x, 0, 0));
zRot.set(EulerF(0, 0, mOwner->getRotation().asEulerF().z)); zRot.set(EulerF(0, 0, mOwner->getRotation().asEulerF().z));//reset prior uses
MatrixF rot; MatrixF rot;
rot.mul(zRot, xRot); rot.mul(zRot, xRot);
rot.getColumn(0, &moveVec); rot.getColumn(0, &moveVec);
moveVec *= move->x; moveVec *= move->x;
VectorF tv; rot.getColumn(1, &tv);//reset prior uses
rot.getColumn(1, &tv);
moveVec += tv * move->y; moveVec += tv * move->y;
rot.getColumn(2, &tv); rot.getColumn(2, &tv);
moveVec += tv * move->z; moveVec += tv * move->z;

View file

@ -1577,20 +1577,20 @@ Player::Player()
{ {
mTypeMask |= PlayerObjectType | DynamicShapeObjectType; mTypeMask |= PlayerObjectType | DynamicShapeObjectType;
delta.pos = mAnchorPoint = Point3F(0,0,100); mDelta.pos = mAnchorPoint = Point3F(0,0,100);
delta.rot = delta.head = Point3F(0,0,0); mDelta.rot = mDelta.head = Point3F(0,0,0);
delta.rotOffset.set(0.0f,0.0f,0.0f); mDelta.rotOffset.set(0.0f,0.0f,0.0f);
delta.warpOffset.set(0.0f,0.0f,0.0f); mDelta.warpOffset.set(0.0f,0.0f,0.0f);
delta.posVec.set(0.0f,0.0f,0.0f); mDelta.posVec.set(0.0f,0.0f,0.0f);
delta.rotVec.set(0.0f,0.0f,0.0f); mDelta.rotVec.set(0.0f,0.0f,0.0f);
delta.headVec.set(0.0f,0.0f,0.0f); mDelta.headVec.set(0.0f,0.0f,0.0f);
delta.warpTicks = 0; mDelta.warpTicks = 0;
delta.dt = 1.0f; mDelta.dt = 1.0f;
delta.move = NullMove; mDelta.move = NullMove;
mPredictionCount = sMaxPredictionTicks; mPredictionCount = sMaxPredictionTicks;
mObjToWorld.setColumn(3,delta.pos); mObjToWorld.setColumn(3, mDelta.pos);
mRot = delta.rot; mRot = mDelta.rot;
mHead = delta.head; mHead = mDelta.head;
mVelocity.set(0.0f, 0.0f, 0.0f); mVelocity.set(0.0f, 0.0f, 0.0f);
mDataBlock = 0; mDataBlock = 0;
mHeadHThread = mHeadVThread = mRecoilThread = mImageStateThread = 0; mHeadHThread = mHeadVThread = mRecoilThread = mImageStateThread = 0;
@ -2103,30 +2103,30 @@ void Player::processTick(const Move* move)
} }
} }
// Warp to catch up to server // Warp to catch up to server
if (delta.warpTicks > 0) { if (mDelta.warpTicks > 0) {
delta.warpTicks--; mDelta.warpTicks--;
// Set new pos // Set new pos
getTransform().getColumn(3, &delta.pos); getTransform().getColumn(3, &mDelta.pos);
delta.pos += delta.warpOffset; mDelta.pos += mDelta.warpOffset;
delta.rot += delta.rotOffset; mDelta.rot += mDelta.rotOffset;
// Wrap yaw to +/-PI // Wrap yaw to +/-PI
if (delta.rot.z < - M_PI_F) if (mDelta.rot.z < - M_PI_F)
delta.rot.z += M_2PI_F; mDelta.rot.z += M_2PI_F;
else if (delta.rot.z > M_PI_F) else if (mDelta.rot.z > M_PI_F)
delta.rot.z -= M_2PI_F; mDelta.rot.z -= M_2PI_F;
if (!ignore_updates) if (!ignore_updates)
{ {
setPosition(delta.pos,delta.rot); setPosition(mDelta.pos, mDelta.rot);
} }
updateDeathOffsets(); updateDeathOffsets();
updateLookAnimation(); updateLookAnimation();
// Backstepping // Backstepping
delta.posVec = -delta.warpOffset; mDelta.posVec = -mDelta.warpOffset;
delta.rotVec = -delta.rotOffset; mDelta.rotVec = -mDelta.rotOffset;
} }
else { else {
// If there is no move, the player is either an // If there is no move, the player is either an
@ -2139,7 +2139,7 @@ void Player::processTick(const Move* move)
if (mPredictionCount-- <= 0) if (mPredictionCount-- <= 0)
return; return;
move = &delta.move; move = &mDelta.move;
} }
else else
move = &NullMove; move = &NullMove;
@ -2215,8 +2215,8 @@ void Player::interpolateTick(F32 dt)
// Client side interpolation // Client side interpolation
Parent::interpolateTick(dt); Parent::interpolateTick(dt);
Point3F pos = delta.pos + delta.posVec * dt; Point3F pos = mDelta.pos + mDelta.posVec * dt;
Point3F rot = delta.rot + delta.rotVec * dt; Point3F rot = mDelta.rot + mDelta.rotVec * dt;
if (!ignore_updates) if (!ignore_updates)
setRenderPosition(pos,rot,dt); setRenderPosition(pos,rot,dt);
@ -2237,7 +2237,7 @@ void Player::interpolateTick(F32 dt)
*/ */
updateLookAnimation(dt); updateLookAnimation(dt);
delta.dt = dt; mDelta.dt = dt;
} }
void Player::advanceTime(F32 dt) void Player::advanceTime(F32 dt)
@ -2561,7 +2561,7 @@ void Player::updateMove(const Move* move)
} }
move = &my_move; move = &my_move;
} }
delta.move = *move; mDelta.move = *move;
#ifdef TORQUE_OPENVR #ifdef TORQUE_OPENVR
if (mControllers[0]) if (mControllers[0])
@ -2611,7 +2611,7 @@ void Player::updateMove(const Move* move)
// Update current orientation // Update current orientation
if (mDamageState == Enabled) { if (mDamageState == Enabled) {
F32 prevZRot = mRot.z; F32 prevZRot = mRot.z;
delta.headVec = mHead; mDelta.headVec = mHead;
bool doStandardMove = true; bool doStandardMove = true;
bool absoluteDelta = false; bool absoluteDelta = false;
@ -2772,29 +2772,29 @@ void Player::updateMove(const Move* move)
mRot.z -= M_2PI_F; mRot.z -= M_2PI_F;
} }
delta.rot = mRot; mDelta.rot = mRot;
delta.rotVec.x = delta.rotVec.y = 0.0f; mDelta.rotVec.x = mDelta.rotVec.y = 0.0f;
delta.rotVec.z = prevZRot - mRot.z; mDelta.rotVec.z = prevZRot - mRot.z;
if (delta.rotVec.z > M_PI_F) if (mDelta.rotVec.z > M_PI_F)
delta.rotVec.z -= M_2PI_F; mDelta.rotVec.z -= M_2PI_F;
else if (delta.rotVec.z < -M_PI_F) else if (mDelta.rotVec.z < -M_PI_F)
delta.rotVec.z += M_2PI_F; mDelta.rotVec.z += M_2PI_F;
delta.head = mHead; mDelta.head = mHead;
delta.headVec -= mHead; mDelta.headVec -= mHead;
if (absoluteDelta) if (absoluteDelta)
{ {
delta.headVec = Point3F(0, 0, 0); mDelta.headVec = Point3F(0, 0, 0);
delta.rotVec = Point3F(0, 0, 0); mDelta.rotVec = Point3F(0, 0, 0);
} }
for(U32 i=0; i<3; ++i) for(U32 i=0; i<3; ++i)
{ {
if (delta.headVec[i] > M_PI_F) if (mDelta.headVec[i] > M_PI_F)
delta.headVec[i] -= M_2PI_F; mDelta.headVec[i] -= M_2PI_F;
else if (delta.headVec[i] < -M_PI_F) else if (mDelta.headVec[i] < -M_PI_F)
delta.headVec[i] += M_2PI_F; mDelta.headVec[i] += M_2PI_F;
} }
} }
MatrixF zRot; MatrixF zRot;
@ -3028,7 +3028,7 @@ void Player::updateMove(const Move* move)
// get the head pitch and add it to the moveVec // get the head pitch and add it to the moveVec
// This more accurate swim vector calc comes from Matt Fairfax // This more accurate swim vector calc comes from Matt Fairfax
MatrixF xRot, zRot; MatrixF xRot;
xRot.set(EulerF(mHead.x, 0, 0)); xRot.set(EulerF(mHead.x, 0, 0));
zRot.set(EulerF(0, 0, mRot.z)); zRot.set(EulerF(0, 0, mRot.z));
MatrixF rot; MatrixF rot;
@ -3583,7 +3583,7 @@ void Player::updateLookAnimation(F32 dt)
return; return;
} }
// Calculate our interpolated head position. // Calculate our interpolated head position.
Point3F renderHead = delta.head + delta.headVec * dt; Point3F renderHead = mDelta.head + mDelta.headVec * dt;
// Adjust look pos. This assumes that the animations match // Adjust look pos. This assumes that the animations match
// the min and max look angles provided in the datablock. // the min and max look angles provided in the datablock.
@ -4421,8 +4421,8 @@ void Player::onImageStateAnimation(U32 imageSlot, const char* seqName, bool dire
if (!found && hasImageBasePrefix && hasScriptPrefix) if (!found && hasImageBasePrefix && hasScriptPrefix)
{ {
String seqName = String(imageBasePrefix) + String("_") + String(scriptPrefix) + String("_") + baseSeqName; String comboSeqName = String(imageBasePrefix) + String("_") + String(scriptPrefix) + String("_") + baseSeqName;
S32 index = mShapeInstance->getShape()->findSequence(seqName); S32 index = mShapeInstance->getShape()->findSequence(comboSeqName);
if (index != -1) if (index != -1)
{ {
seqIndex = index; seqIndex = index;
@ -4432,8 +4432,8 @@ void Player::onImageStateAnimation(U32 imageSlot, const char* seqName, bool dire
if (!found && hasImageBasePrefix) if (!found && hasImageBasePrefix)
{ {
String seqName = String(imageBasePrefix) + String("_") + baseSeqName; String imgSeqName = String(imageBasePrefix) + String("_") + baseSeqName;
S32 index = mShapeInstance->getShape()->findSequence(seqName); S32 index = mShapeInstance->getShape()->findSequence(imgSeqName);
if (index != -1) if (index != -1)
{ {
seqIndex = index; seqIndex = index;
@ -4443,8 +4443,8 @@ void Player::onImageStateAnimation(U32 imageSlot, const char* seqName, bool dire
if (!found && hasScriptPrefix) if (!found && hasScriptPrefix)
{ {
String seqName = String(scriptPrefix) + String("_") + baseSeqName; String scriptSeqName = String(scriptPrefix) + String("_") + baseSeqName;
S32 index = mShapeInstance->getShape()->findSequence(seqName); S32 index = mShapeInstance->getShape()->findSequence(scriptSeqName);
if (index != -1) if (index != -1)
{ {
seqIndex = index; seqIndex = index;
@ -5113,7 +5113,7 @@ void Player::_handleCollision( const Collision &collision )
bool Player::updatePos(const F32 travelTime) bool Player::updatePos(const F32 travelTime)
{ {
PROFILE_SCOPE(Player_UpdatePos); PROFILE_SCOPE(Player_UpdatePos);
getTransform().getColumn(3,&delta.posVec); getTransform().getColumn(3,&mDelta.posVec);
// When mounted to another object, only Z rotation used. // When mounted to another object, only Z rotation used.
if (isMounted()) { if (isMounted()) {
@ -5205,7 +5205,7 @@ bool Player::updatePos(const F32 travelTime)
else else
{ {
if ( mVelocity.isZero() ) if ( mVelocity.isZero() )
newPos = delta.posVec; newPos = mDelta.posVec;
else else
newPos = _move( travelTime, &col ); newPos = _move( travelTime, &col );
@ -5222,9 +5222,9 @@ bool Player::updatePos(const F32 travelTime)
// If on the client, calc delta for backstepping // If on the client, calc delta for backstepping
if (isClientObject()) if (isClientObject())
{ {
delta.pos = newPos; mDelta.pos = newPos;
delta.posVec = delta.posVec - delta.pos; mDelta.posVec = mDelta.posVec - mDelta.pos;
delta.dt = 1.0f; mDelta.dt = 1.0f;
} }
setPosition( newPos, mRot ); setPosition( newPos, mRot );
@ -5460,8 +5460,8 @@ bool Player::displaceObject(const Point3F& displacement)
sBalance--; sBalance--;
getTransform().getColumn(3, &delta.pos); getTransform().getColumn(3, &mDelta.pos);
delta.posVec.set(0.0f, 0.0f, 0.0f); mDelta.posVec.set(0.0f, 0.0f, 0.0f);
return result; return result;
} }
@ -5480,8 +5480,8 @@ bool Player::displaceObject(const Point3F& displacement)
bool result = updatePos(dt); bool result = updatePos(dt);
mObjToWorld.getColumn(3, &delta.pos); mObjToWorld.getColumn(3, &mDelta.pos);
delta.posVec.set(0.0f, 0.0f, 0.0f); mDelta.posVec.set(0.0f, 0.0f, 0.0f);
return result; return result;
} }
@ -5684,10 +5684,10 @@ void Player::getRenderEyeBaseTransform(MatrixF* mat, bool includeBank)
// Eye transform in world space. We only use the eye position // Eye transform in world space. We only use the eye position
// from the animation and supply our own rotation. // from the animation and supply our own rotation.
MatrixF pmat,xmat,zmat; MatrixF pmat,xmat,zmat;
xmat.set(EulerF(delta.head.x + delta.headVec.x * delta.dt, 0.0f, 0.0f)); xmat.set(EulerF(mDelta.head.x + mDelta.headVec.x * mDelta.dt, 0.0f, 0.0f));
if (mUseHeadZCalc) if (mUseHeadZCalc)
zmat.set(EulerF(0.0f, 0.0f, delta.head.z + delta.headVec.z * delta.dt)); zmat.set(EulerF(0.0f, 0.0f, mDelta.head.z + mDelta.headVec.z * mDelta.dt));
else else
zmat.identity(); zmat.identity();
@ -5697,7 +5697,7 @@ void Player::getRenderEyeBaseTransform(MatrixF* mat, bool includeBank)
MatrixF imat; MatrixF imat;
imat.mul(zmat, xmat); imat.mul(zmat, xmat);
MatrixF ymat; MatrixF ymat;
ymat.set(EulerF(0.0f, delta.head.y + delta.headVec.y * delta.dt, 0.0f)); ymat.set(EulerF(0.0f, mDelta.head.y + mDelta.headVec.y * mDelta.dt, 0.0f));
pmat.mul(imat, ymat); pmat.mul(imat, ymat);
} }
else else
@ -6234,7 +6234,7 @@ void Player::readPacketData(GameConnection *connection, BitStream *stream)
stream->read(&mVelocity.y); stream->read(&mVelocity.y);
stream->read(&mVelocity.z); stream->read(&mVelocity.z);
stream->setCompressionPoint(pos); stream->setCompressionPoint(pos);
delta.pos = pos; mDelta.pos = pos;
mJumpSurfaceLastContact = stream->readInt(4); mJumpSurfaceLastContact = stream->readInt(4);
if (stream->readFlag()) if (stream->readFlag())
@ -6257,7 +6257,7 @@ void Player::readPacketData(GameConnection *connection, BitStream *stream)
} }
} }
else else
pos = delta.pos; pos = mDelta.pos;
stream->read(&mHead.x); stream->read(&mHead.x);
if(stream->readFlag()) if(stream->readFlag())
{ {
@ -6269,8 +6269,8 @@ void Player::readPacketData(GameConnection *connection, BitStream *stream)
rot.x = rot.y = 0; rot.x = rot.y = 0;
if (!ignore_updates) if (!ignore_updates)
setPosition(pos,rot); setPosition(pos,rot);
delta.head = mHead; mDelta.head = mHead;
delta.rot = rot; mDelta.rot = rot;
if (stream->readFlag()) { if (stream->readFlag()) {
S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize);
@ -6348,7 +6348,7 @@ U32 Player::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
stream->writeFloat(mRot.z / M_2PI_F, 7); stream->writeFloat(mRot.z / M_2PI_F, 7);
stream->writeSignedFloat(mHead.x / (mDataBlock->maxLookAngle - mDataBlock->minLookAngle), 6); stream->writeSignedFloat(mHead.x / (mDataBlock->maxLookAngle - mDataBlock->minLookAngle), 6);
stream->writeSignedFloat(mHead.z / mDataBlock->maxFreelookAngle, 6); stream->writeSignedFloat(mHead.z / mDataBlock->maxFreelookAngle, 6);
delta.move.pack(stream); mDelta.move.pack(stream);
stream->writeFlag(!(mask & NoWarpMask)); stream->writeFlag(!(mask & NoWarpMask));
} }
// Ghost need energy to predict reliably // Ghost need energy to predict reliably
@ -6454,67 +6454,67 @@ void Player::unpackUpdate(NetConnection *con, BitStream *stream)
rot.z = stream->readFloat(7) * M_2PI_F; rot.z = stream->readFloat(7) * M_2PI_F;
mHead.x = stream->readSignedFloat(6) * (mDataBlock->maxLookAngle - mDataBlock->minLookAngle); mHead.x = stream->readSignedFloat(6) * (mDataBlock->maxLookAngle - mDataBlock->minLookAngle);
mHead.z = stream->readSignedFloat(6) * mDataBlock->maxFreelookAngle; mHead.z = stream->readSignedFloat(6) * mDataBlock->maxFreelookAngle;
delta.move.unpack(stream); mDelta.move.unpack(stream);
delta.head = mHead; mDelta.head = mHead;
delta.headVec.set(0.0f, 0.0f, 0.0f); mDelta.headVec.set(0.0f, 0.0f, 0.0f);
if (stream->readFlag() && isProperlyAdded()) if (stream->readFlag() && isProperlyAdded())
{ {
// Determine number of ticks to warp based on the average // Determine number of ticks to warp based on the average
// of the client and server velocities. // of the client and server velocities.
delta.warpOffset = pos - delta.pos; mDelta.warpOffset = pos - mDelta.pos;
F32 as = (speed + mVelocity.len()) * 0.5f * TickSec; F32 as = (speed + mVelocity.len()) * 0.5f * TickSec;
F32 dt = (as > 0.00001f) ? delta.warpOffset.len() / as: sMaxWarpTicks; F32 dt = (as > 0.00001f) ? mDelta.warpOffset.len() / as: sMaxWarpTicks;
delta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f);
if (delta.warpTicks) if (mDelta.warpTicks)
{ {
// Setup the warp to start on the next tick. // Setup the warp to start on the next tick.
if (delta.warpTicks > sMaxWarpTicks) if (mDelta.warpTicks > sMaxWarpTicks)
delta.warpTicks = sMaxWarpTicks; mDelta.warpTicks = sMaxWarpTicks;
delta.warpOffset /= (F32)delta.warpTicks; mDelta.warpOffset /= (F32)mDelta.warpTicks;
delta.rotOffset = rot - delta.rot; mDelta.rotOffset = rot - mDelta.rot;
// Ignore small rotation differences // Ignore small rotation differences
if (mFabs(delta.rotOffset.z) < 0.001f) if (mFabs(mDelta.rotOffset.z) < 0.001f)
delta.rotOffset.z = 0; mDelta.rotOffset.z = 0;
// Wrap rotation to +/-PI // Wrap rotation to +/-PI
if(delta.rotOffset.z < - M_PI_F) if(mDelta.rotOffset.z < - M_PI_F)
delta.rotOffset.z += M_2PI_F; mDelta.rotOffset.z += M_2PI_F;
else if(delta.rotOffset.z > M_PI_F) else if(mDelta.rotOffset.z > M_PI_F)
delta.rotOffset.z -= M_2PI_F; mDelta.rotOffset.z -= M_2PI_F;
delta.rotOffset /= (F32)delta.warpTicks; mDelta.rotOffset /= (F32)mDelta.warpTicks;
} }
else else
{ {
// Going to skip the warp, server and client are real close. // Going to skip the warp, server and client are real close.
// Adjust the frame interpolation to move smoothly to the // Adjust the frame interpolation to move smoothly to the
// new position within the current tick. // new position within the current tick.
Point3F cp = delta.pos + delta.posVec * delta.dt; Point3F cp = mDelta.pos + mDelta.posVec * mDelta.dt;
if (delta.dt == 0) if (mDelta.dt == 0)
{ {
delta.posVec.set(0.0f, 0.0f, 0.0f); mDelta.posVec.set(0.0f, 0.0f, 0.0f);
delta.rotVec.set(0.0f, 0.0f, 0.0f); mDelta.rotVec.set(0.0f, 0.0f, 0.0f);
} }
else else
{ {
F32 dti = 1.0f / delta.dt; F32 dti = 1.0f / mDelta.dt;
delta.posVec = (cp - pos) * dti; mDelta.posVec = (cp - pos) * dti;
delta.rotVec.z = mRot.z - rot.z; mDelta.rotVec.z = mRot.z - rot.z;
if(delta.rotVec.z > M_PI_F) if(mDelta.rotVec.z > M_PI_F)
delta.rotVec.z -= M_2PI_F; mDelta.rotVec.z -= M_2PI_F;
else if(delta.rotVec.z < -M_PI_F) else if(mDelta.rotVec.z < -M_PI_F)
delta.rotVec.z += M_2PI_F; mDelta.rotVec.z += M_2PI_F;
delta.rotVec.z *= dti; mDelta.rotVec.z *= dti;
} }
delta.pos = pos; mDelta.pos = pos;
delta.rot = rot; mDelta.rot = rot;
if (!ignore_updates) if (!ignore_updates)
setPosition(pos,rot); setPosition(pos,rot);
} }
@ -6522,12 +6522,12 @@ void Player::unpackUpdate(NetConnection *con, BitStream *stream)
else else
{ {
// Set the player to the server position // Set the player to the server position
delta.pos = pos; mDelta.pos = pos;
delta.rot = rot; mDelta.rot = rot;
delta.posVec.set(0.0f, 0.0f, 0.0f); mDelta.posVec.set(0.0f, 0.0f, 0.0f);
delta.rotVec.set(0.0f, 0.0f, 0.0f); mDelta.rotVec.set(0.0f, 0.0f, 0.0f);
delta.warpTicks = 0; mDelta.warpTicks = 0;
delta.dt = 0.0f; mDelta.dt = 0.0f;
if (!ignore_updates) if (!ignore_updates)
setPosition(pos,rot); setPosition(pos,rot);
} }

View file

@ -436,7 +436,7 @@ protected:
Point3F rotOffset; Point3F rotOffset;
/// @} /// @}
}; };
StateDelta delta; ///< Used for interpolation on the client. @see StateDelta StateDelta mDelta; ///< Used for interpolation on the client. @see StateDelta
S32 mPredictionCount; ///< Number of ticks to predict S32 mPredictionCount; ///< Number of ticks to predict
// Current pos, vel etc. // Current pos, vel etc.