~openmw/openmw/openmw-packaging2

« back to all changes in this revision

Viewing changes to apps/openmw/mwrender/camera.cpp

  • Committer: Scott Howard
  • Date: 2016-09-15 20:56:29 UTC
  • Revision ID: showard@debian.org-20160915205629-3tvfxe47zrb41a91
Cron update. Git hash: 37278b5

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
      mIsNearest(false),
55
55
      mHeight(124.f),
56
56
      mMaxCameraDistance(192.f),
57
 
      mDistanceAdjusted(false),
58
57
      mVanityToggleQueued(false),
 
58
      mVanityToggleQueuedValue(false),
59
59
      mViewModeToggleQueued(false),
60
60
      mCameraDistance(0.f)
61
61
    {
69
69
        mMainCam.yaw = 0.f;
70
70
        mMainCam.offset = 400.f;
71
71
 
 
72
        mCameraDistance = mMaxCameraDistance;
 
73
 
72
74
        mUpdateCallback = new UpdateRenderCameraCallback(this);
73
75
        mCamera->addUpdateCallback(mUpdateCallback);
74
76
    }
108
110
 
109
111
        osg::Quat orient =  osg::Quat(getPitch(), osg::Vec3d(1,0,0)) * osg::Quat(getYaw(), osg::Vec3d(0,0,1));
110
112
 
111
 
        osg::Vec3d offset = orient * osg::Vec3d(0, -mCameraDistance, 0);
 
113
        osg::Vec3d offset = orient * osg::Vec3d(0, isFirstPerson() ? 0 : -mCameraDistance, 0);
112
114
        position += offset;
113
115
 
114
116
        osg::Vec3d forward = orient * osg::Vec3d(0,1,0);
148
150
            // Now process the view changes we queued earlier
149
151
            if (mVanityToggleQueued)
150
152
            {
151
 
                toggleVanityMode(!mVanity.enabled);
 
153
                toggleVanityMode(mVanityToggleQueuedValue);
152
154
                mVanityToggleQueued = false;
153
155
            }
154
156
            if (mViewModeToggleQueued)
187
189
 
188
190
        mFirstPersonView = !mFirstPersonView;
189
191
        processViewChange();
190
 
 
191
 
        if (mFirstPersonView) {
192
 
            mCameraDistance = 0.f;
193
 
        } else {
194
 
            mCameraDistance = mMaxCameraDistance;
195
 
        }
196
192
    }
197
193
    
198
194
    void Camera::allowVanityMode(bool allow)
206
202
    {
207
203
        // Changing the view will stop all playing animations, so if we are playing
208
204
        // anything important, queue the view change for later
209
 
        if (isFirstPerson() && !mAnimation->upperBodyReady())
 
205
        if (mFirstPersonView && !mAnimation->upperBodyReady())
210
206
        {
211
207
            mVanityToggleQueued = true;
 
208
            mVanityToggleQueuedValue = enable;
212
209
            return false;
213
210
        }
214
211
 
313
310
 
314
311
    float Camera::getCameraDistance() const
315
312
    {
 
313
        if (isFirstPerson())
 
314
            return 0.f;
316
315
        return mCameraDistance;
317
316
    }
318
317
 
342
341
            } else if (!mFirstPersonView) {
343
342
                mMaxCameraDistance = mCameraDistance;
344
343
            }
345
 
        } else {
346
 
            mDistanceAdjusted = true;
347
344
        }
348
345
    }
349
346
 
350
347
    void Camera::setCameraDistance()
351
348
    {
352
 
        if (mDistanceAdjusted) {
353
 
            if (mVanity.enabled || mPreviewMode) {
354
 
                mCameraDistance = mPreviewCam.offset;
355
 
            } else if (!mFirstPersonView) {
356
 
                mCameraDistance = mMaxCameraDistance;
357
 
            }
 
349
        if (mVanity.enabled || mPreviewMode) {
 
350
            mCameraDistance = mPreviewCam.offset;
 
351
        } else if (!mFirstPersonView) {
 
352
            mCameraDistance = mMaxCameraDistance;
358
353
        }
359
 
        mDistanceAdjusted = false;
360
354
    }
361
355
 
362
356
    void Camera::setAnimation(NpcAnimation *anim)
395
389
 
396
390
        osg::Quat orient =  osg::Quat(getPitch(), osg::Vec3d(1,0,0)) * osg::Quat(getYaw(), osg::Vec3d(0,0,1));
397
391
 
398
 
        osg::Vec3d offset = orient * osg::Vec3d(0, -mCameraDistance, 0);
 
392
        osg::Vec3d offset = orient * osg::Vec3d(0, isFirstPerson() ? 0 : -mCameraDistance, 0);
399
393
        camera = focal + offset;
400
394
    }
401
395