History

Merge branch 'master' of github.com:highfidelity/hifi into tablet-ui

Seth Alves committed 9 years ago

Commit cc4ddd12 parents b0b3fe2 b2abe5a78 files · +664 −3888Browse files

Showing the changes to interface/src/Application.cpp (1 of 78 files). Show all

Unified · Split

interface/src/Application.cpp+49−127
@@ -217,18 +217,10 @@ static const QString FBX_EXTENSION = ".fbx"; · 216 unmodified lines
217217 static const QString OBJ_EXTENSION = ".obj";
218218 static const QString AVA_JSON_EXTENSION = ".ava.json";
219219
220−static const int MIRROR_VIEW_TOP_PADDING = 5;
221−static const int MIRROR_VIEW_LEFT_PADDING = 10;
222−static const int MIRROR_VIEW_WIDTH = 265;
223−static const int MIRROR_VIEW_HEIGHT = 215;
224220 static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f;
225−static const float MIRROR_REARVIEW_DISTANCE = 0.722f;
226−static const float MIRROR_REARVIEW_BODY_DISTANCE = 2.56f;
227−static const float MIRROR_FIELD_OF_VIEW = 30.0f;
228221
229222 static const quint64 TOO_LONG_SINCE_LAST_SEND_DOWNSTREAM_AUDIO_STATS = 1 * USECS_PER_SECOND;
230223
231−static const QString INFO_WELCOME_PATH = "html/interface-welcome.html";
232224 static const QString INFO_EDIT_ENTITIES_PATH = "html/edit-commands.html";
233225 static const QString INFO_HELP_PATH = "html/help.html";
234226
@@ -427,6 +419,7 @@ static const QString STATE_CAMERA_THIRD_PERSON = "CameraThirdPerson"; · 192 unmodified lines
427419 static const QString STATE_CAMERA_ENTITY = "CameraEntity";
428420 static const QString STATE_CAMERA_INDEPENDENT = "CameraIndependent";
429421 static const QString STATE_SNAP_TURN = "SnapTurn";
422+static const QString STATE_ADVANCED_MOVEMENT_CONTROLS = "AdvancedMovement";
430423 static const QString STATE_GROUNDED = "Grounded";
431424 static const QString STATE_NAV_FOCUSED = "NavigationFocused";
432425
@@ -519,7 +512,7 @@ bool setupEssentials(int& argc, char** argv) { · 86 unmodified lines
519512 DependencyManager::set<MessagesClient>();
520513 controller::StateController::setStateVariables({ { STATE_IN_HMD, STATE_CAMERA_FULL_SCREEN_MIRROR,
521514 STATE_CAMERA_FIRST_PERSON, STATE_CAMERA_THIRD_PERSON, STATE_CAMERA_ENTITY, STATE_CAMERA_INDEPENDENT,
522− STATE_SNAP_TURN, STATE_GROUNDED, STATE_NAV_FOCUSED } });
515+ STATE_SNAP_TURN, STATE_ADVANCED_MOVEMENT_CONTROLS, STATE_GROUNDED, STATE_NAV_FOCUSED } });
523516 DependencyManager::set<UserInputMapper>();
524517 DependencyManager::set<controller::ScriptingInterface, ControllerScriptingInterface>();
525518 DependencyManager::set<InterfaceParentFinder>();
@@ -572,7 +565,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 46 unmodified lines
572565 _entityClipboardRenderer(false, this, this),
573566 _entityClipboard(new EntityTree()),
574567 _lastQueriedTime(usecTimestampNow()),
575− _mirrorViewRect(QRect(MIRROR_VIEW_LEFT_PADDING, MIRROR_VIEW_TOP_PADDING, MIRROR_VIEW_WIDTH, MIRROR_VIEW_HEIGHT)),
576568 _previousScriptLocation("LastScriptLocation", DESKTOP_LOCATION),
577569 _fieldOfView("fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES),
578570 _hmdTabletScale("hmdTabletScale", DEFAULT_HMD_TABLET_SCALE_PERCENT),
@@ -1139,6 +1131,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 560 unmodified lines
11391131 _applicationStateDevice->setInputVariant(STATE_SNAP_TURN, []() -> float {
11401132 return qApp->getMyAvatar()->getSnapTurn() ? 1 : 0;
11411133 });
1134+ _applicationStateDevice->setInputVariant(STATE_ADVANCED_MOVEMENT_CONTROLS, []() -> float {
1135+ return qApp->getMyAvatar()->useAdvancedMovementControls() ? 1 : 0;
1136+ });
1137+
11421138 _applicationStateDevice->setInputVariant(STATE_GROUNDED, []() -> float {
11431139 return qApp->getMyAvatar()->getCharacterController()->onGround() ? 1 : 0;
11441140 });
@@ -2129,21 +2125,6 @@ void Application::paintGL() { · 984 unmodified lines
21292125 batch.resetStages();
21302126 });
21312127
2132− auto inputs = AvatarInputs::getInstance();
2133− if (inputs->mirrorVisible()) {
2134− PerformanceTimer perfTimer("Mirror");
2135−
2136− renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE;
2137− renderArgs._blitFramebuffer = DependencyManager::get<FramebufferCache>()->getSelfieFramebuffer();
2138−
2139− _mirrorViewRect.moveTo(inputs->x(), inputs->y());
2140−
2141− renderRearViewMirror(&renderArgs, _mirrorViewRect, inputs->mirrorZoomed());
2142−
2143− renderArgs._blitFramebuffer.reset();
2144− renderArgs._renderMode = RenderArgs::DEFAULT_RENDER_MODE;
2145− }
2146−
21472128 {
21482129 PerformanceTimer perfTimer("renderOverlay");
21492130 // NOTE: There is no batch associated with this renderArgs
@@ -2391,10 +2372,6 @@ void Application::setSettingConstrainToolbarPosition(bool setting) { · 241 unmodified lines
23912372 DependencyManager::get<OffscreenUi>()->setConstrainToolbarToCenterX(setting);
23922373 }
23932374
2394−void Application::aboutApp() {
2395− InfoView::show(INFO_WELCOME_PATH);
2396−}
2397−
23982375 void Application::showHelp() {
23992376 static const QString HAND_CONTROLLER_NAME_VIVE = "vive";
24002377 static const QString HAND_CONTROLLER_NAME_OCULUS_TOUCH = "oculus";
@@ -2776,8 +2753,6 @@ void Application::keyPressEvent(QKeyEvent* event) { · 375 unmodified lines
27762753 case Qt::Key_S:
27772754 if (isShifted && isMeta && !isOption) {
27782755 Menu::getInstance()->triggerOption(MenuOption::SuppressShortTimings);
2779− } else if (isOption && !isShifted && !isMeta) {
2780− Menu::getInstance()->triggerOption(MenuOption::ScriptEditor);
27812756 } else if (!isOption && !isShifted && isMeta) {
27822757 takeSnapshot(true);
27832758 }
@@ -2896,51 +2871,49 @@ void Application::keyPressEvent(QKeyEvent* event) { · 112 unmodified lines
28962871 break;
28972872 #endif
28982873
2899− case Qt::Key_H:
2900− if (isShifted) {
2901− Menu::getInstance()->triggerOption(MenuOption::MiniMirror);
2902− } else {
2903− // whenever switching to/from full screen mirror from the keyboard, remember
2904− // the state you were in before full screen mirror, and return to that.
2905− auto previousMode = _myCamera.getMode();
2906− if (previousMode != CAMERA_MODE_MIRROR) {
2907− switch (previousMode) {
2908− case CAMERA_MODE_FIRST_PERSON:
2909− _returnFromFullScreenMirrorTo = MenuOption::FirstPerson;
2910− break;
2911− case CAMERA_MODE_THIRD_PERSON:
2912− _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
2913− break;
2914−
2915− // FIXME - it's not clear that these modes make sense to return to...
2916− case CAMERA_MODE_INDEPENDENT:
2917− _returnFromFullScreenMirrorTo = MenuOption::IndependentMode;
2918− break;
2919− case CAMERA_MODE_ENTITY:
2920− _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode;
2921− break;
2922−
2923− default:
2924− _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
2925− break;
2926− }
2874+ case Qt::Key_H: {
2875+ // whenever switching to/from full screen mirror from the keyboard, remember
2876+ // the state you were in before full screen mirror, and return to that.
2877+ auto previousMode = _myCamera.getMode();
2878+ if (previousMode != CAMERA_MODE_MIRROR) {
2879+ switch (previousMode) {
2880+ case CAMERA_MODE_FIRST_PERSON:
2881+ _returnFromFullScreenMirrorTo = MenuOption::FirstPerson;
2882+ break;
2883+ case CAMERA_MODE_THIRD_PERSON:
2884+ _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
2885+ break;
2886+
2887+ // FIXME - it's not clear that these modes make sense to return to...
2888+ case CAMERA_MODE_INDEPENDENT:
2889+ _returnFromFullScreenMirrorTo = MenuOption::IndependentMode;
2890+ break;
2891+ case CAMERA_MODE_ENTITY:
2892+ _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode;
2893+ break;
2894+
2895+ default:
2896+ _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
2897+ break;
29272898 }
2899+ }
29282900
2929− bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror);
2930− Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked);
2931− if (isMirrorChecked) {
2901+ bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror);
2902+ Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked);
2903+ if (isMirrorChecked) {
29322904
2933− // if we got here without coming in from a non-Full Screen mirror case, then our
2934− // _returnFromFullScreenMirrorTo is unknown. In that case we'll go to the old
2935− // behavior of returning to ThirdPerson
2936− if (_returnFromFullScreenMirrorTo.isEmpty()) {
2937− _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
2938− }
2939− Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true);
2905+ // if we got here without coming in from a non-Full Screen mirror case, then our
2906+ // _returnFromFullScreenMirrorTo is unknown. In that case we'll go to the old
2907+ // behavior of returning to ThirdPerson
2908+ if (_returnFromFullScreenMirrorTo.isEmpty()) {
2909+ _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson;
29402910 }
2941− cameraMenuChanged();
2911+ Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true);
29422912 }
2913+ cameraMenuChanged();
29432914 break;
2915+ }
2916+
29442917 case Qt::Key_P: {
29452918 if (!(isShifted || isMeta || isOption)) {
29462919 bool isFirstPersonChecked = Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson);
@@ -3855,8 +3828,6 @@ void Application::init() { · 908 unmodified lines
38553828 DependencyManager::get<AvatarManager>()->init();
38563829 _myCamera.setMode(CAMERA_MODE_FIRST_PERSON);
38573830
3858− _mirrorCamera.setMode(CAMERA_MODE_MIRROR);
3859−
38603831 _timerStart.start();
38613832 _lastTimeUpdated.start();
38623833
@@ -4473,9 +4444,12 @@ void Application::update(float deltaTime) { · 610 unmodified lines
44734444
44744445 getEntities()->getTree()->withWriteLock([&] {
44754446 PerformanceTimer perfTimer("handleOutgoingChanges");
4476− const VectorOfMotionStates& outgoingChanges = _physicsEngine->getOutgoingChanges();
4477− _entitySimulation->handleOutgoingChanges(outgoingChanges);
4478− avatarManager->handleOutgoingChanges(outgoingChanges);
4447+ const VectorOfMotionStates& deactivations = _physicsEngine->getDeactivatedMotionStates();
4448+ _entitySimulation->handleDeactivatedMotionStates(deactivations);
4449+
4450+ const VectorOfMotionStates& outgoingChanges = _physicsEngine->getChangedMotionStates();
4451+ _entitySimulation->handleChangedMotionStates(outgoingChanges);
4452+ avatarManager->handleChangedMotionStates(outgoingChanges);
44794453 });
44804454
44814455 if (!_aboutToQuit) {
@@ -5132,58 +5106,6 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se · 650 unmodified lines
51325106 activeRenderingThread = nullptr;
51335107 }
51345108
5135−void Application::renderRearViewMirror(RenderArgs* renderArgs, const QRect& region, bool isZoomed) {
5136− auto originalViewport = renderArgs->_viewport;
5137− // Grab current viewport to reset it at the end
5138−
5139− float aspect = (float)region.width() / region.height();
5140− float fov = MIRROR_FIELD_OF_VIEW;
5141−
5142− auto myAvatar = getMyAvatar();
5143−
5144− // bool eyeRelativeCamera = false;
5145− if (!isZoomed) {
5146− _mirrorCamera.setPosition(myAvatar->getChestPosition() +
5147− myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_REARVIEW_BODY_DISTANCE * myAvatar->getScale());
5148−
5149− } else { // HEAD zoom level
5150− // FIXME note that the positioning of the camera relative to the avatar can suffer limited
5151− // precision as the user's position moves further away from the origin. Thus at
5152− // /1e7,1e7,1e7 (well outside the buildable volume) the mirror camera veers and sways
5153− // wildly as you rotate your avatar because the floating point values are becoming
5154− // larger, squeezing out the available digits of precision you have available at the
5155− // human scale for camera positioning.
5156−
5157− // Previously there was a hack to correct this using the mechanism of repositioning
5158− // the avatar at the origin of the world for the purposes of rendering the mirror,
5159− // but it resulted in failing to render the avatar's head model in the mirror view
5160− // when in first person mode. Presumably this was because of some missed culling logic
5161− // that was not accounted for in the hack.
5162−
5163− // This was removed in commit 71e59cfa88c6563749594e25494102fe01db38e9 but could be further
5164− // investigated in order to adapt the technique while fixing the head rendering issue,
5165− // but the complexity of the hack suggests that a better approach
5166− _mirrorCamera.setPosition(myAvatar->getDefaultEyePosition() +
5167− myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_REARVIEW_DISTANCE * myAvatar->getScale());
5168− }
5169− _mirrorCamera.setProjection(glm::perspective(glm::radians(fov), aspect, DEFAULT_NEAR_CLIP, DEFAULT_FAR_CLIP));
5170− _mirrorCamera.setOrientation(myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI, 0.0f)));
5171−
5172−
5173− // set the bounds of rear mirror view
5174− // the region is in device independent coordinates; must convert to device
5175− float ratio = (float)QApplication::desktop()->windowHandle()->devicePixelRatio() * getRenderResolutionScale();
5176− int width = region.width() * ratio;
5177− int height = region.height() * ratio;
5178− gpu::Vec4i viewport = gpu::Vec4i(0, 0, width, height);
5179− renderArgs->_viewport = viewport;
5180−
5181− // render rear mirror view
5182− displaySide(renderArgs, _mirrorCamera, true);
5183−
5184− renderArgs->_viewport = originalViewport;
5185−}
5186−
51875109 void Application::resetSensors(bool andReload) {
51885110 DependencyManager::get<Faceshift>()->reset();
51895111 DependencyManager::get<DdeFaceTracker>()->reset();