void TurretShape::getImageTransform(U32 imageSlot,S32 node,MatrixF* mat) { // Same as ShapeBase::getImageTransform() other than getRenderWeaponMountTransform() below // Image transform in world space MountedImage& image = mMountedImageList[imageSlot]; if (image.dataBlock) { if (node != -1) { ShapeBaseImageData& data = *image.dataBlock; U32 shapeIndex = getImageShapeIndex(image); MatrixF nmat = image.shapeInstance[shapeIndex]->mNodeTransforms[node]; MatrixF mmat; if (data.useEyeNode && isFirstPerson() && data.eyeMountNode[shapeIndex] != -1) { // We need to animate, even on the server, to make sure the nodes are in the correct location. image.shapeInstance[shapeIndex]->animate(); MatrixF emat; getEyeBaseTransform(&emat, mDataBlock->mountedImagesBank); MatrixF mountTransform = image.shapeInstance[shapeIndex]->mNodeTransforms[data.eyeMountNode[shapeIndex]]; mountTransform.affineInverse(); mmat.mul(emat, mountTransform); } else if (data.useEyeOffset && isFirstPerson()) { MatrixF emat; getEyeTransform(&emat); mmat.mul(emat,data.eyeOffset); } else { MatrixF emat; getWeaponMountTransform( imageSlot, MatrixF::Identity, &emat ); mmat.mul(emat,data.mountTransform[shapeIndex]); } mat->mul(mmat, nmat); } else getImageTransform(imageSlot,mat); } else *mat = mObjToWorld; }
bool Camera::toggleVanityMode(bool enable) { // Changing the view will stop all playing animations, so if we are playing // anything important, queue the view change for later if (isFirstPerson() && !mAnimation->upperBodyReady()) { mVanityToggleQueued = true; return false; } if(!mVanity.allowed && enable) return false; if(mVanity.enabled == enable) return true; mVanity.enabled = enable; processViewChange(); float offset = mPreviewCam.offset; if (mVanity.enabled) { setPitch(osg::DegreesToRadians(-30.f)); mMainCam.offset = mCameraDistance; } else { offset = mMainCam.offset; } mCameraDistance = offset; return true; }
osg::Vec3d Camera::getFocalPoint() { const osg::Node* trackNode = mTrackingNode; if (!trackNode) return osg::Vec3d(); osg::MatrixList mats = trackNode->getWorldMatrices(); if (!mats.size()) return osg::Vec3d(); const osg::Matrix& worldMat = mats[0]; osg::Vec3d position = worldMat.getTrans(); if (!isFirstPerson()) position.z() += mHeight; return position; }
void TurretShape::getImageTransform(U32 imageSlot,MatrixF* mat) { // Image transform in world space MountedImage& image = mMountedImageList[imageSlot]; if (image.dataBlock) { ShapeBaseImageData& data = *image.dataBlock; MatrixF nmat; if (data.useEyeOffset && isFirstPerson()) { getEyeTransform(&nmat); mat->mul(nmat,data.eyeOffset); } else { getWeaponMountTransform( imageSlot, MatrixF::Identity, &nmat ); mat->mul(nmat,data.mountTransform[getImageShapeIndex(image)]); } } else *mat = mObjToWorld; }