Beispiel #1
0
void PlayPanel::setPos(int utick)
      {
      if(!cs)
            return;
      if (cachedTickPosition != utick)
            emit posChange(utick);
      updatePosLabel(utick);
      updateTimeLabel(cs->utick2utime(utick));
      }
Beispiel #2
0
void PlayPanel::setPos(int tick)
      {
      if (cachedTickPosition != tick)
            emit posChange(tick);
      heartBeat(tick, tick);
      }
Beispiel #3
0
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);
    }
}