void PlayPanel::setPos(int utick) { if(!cs) return; if (cachedTickPosition != utick) emit posChange(utick); updatePosLabel(utick); updateTimeLabel(cs->utick2utime(utick)); }
void PlayPanel::setPos(int tick) { if (cachedTickPosition != tick) emit posChange(tick); heartBeat(tick, tick); }
void PhysicalCamera::moveRelative(const opal::Vec3r& dir, opal::real dt) { // Construct the actual velocity vector. opal::Vec3r velocity = dir; if (!opal::areEqual(velocity.lengthSquared(), 0)) { velocity.normalize(); } velocity *= mTranslateSpeed; switch(mType) { case PHYSICAL: { assert(mSolid); // TODO: handle things differently if we're in midair. Ogre::Matrix4 camTransform; mOgreCamera->getParentSceneNode()->getWorldTransforms( &camTransform); Ogre::Vector3 localDir(velocity[0], velocity[1], velocity[2]); // Convert the local direction vector to a global direction // vector. Subtract out the camera's position. Ogre::Vector3 globalDir = camTransform * localDir; globalDir -= camTransform.getTrans(); opal::Vec3r opalVec(globalDir[0], globalDir[1], globalDir[2]); // Keep from flying. if (opalVec[1] > 0) { opalVec[1] = 0; } // Don't use the dt in this case; let Opal take care of the // velocity. mSolid->setGlobalLinearVel(opalVec); break; } case NON_CLIPPING: { Ogre::Vector3 posChange(velocity[0] * dt, velocity[1] * dt, velocity[2] * dt); mOgreCamera->getParentSceneNode()->translate(posChange, Ogre::Node::TS_LOCAL); break; } case NON_CLIPPING_ORBIT: { Ogre::Vector3 posChange(velocity[0] * dt, velocity[1] * dt, velocity[2] * dt); mOgreCamera->getParentSceneNode()->translate(posChange, Ogre::Node::TS_LOCAL); lookAt(mOrbitCenter); break; } default: assert(false); } }