// // VisionSqueeze.h // interface/src // // Created by Seth Alves on 2019-3-13. // Copyright 2019 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #ifndef hifi_VisionSqueeze_h #define hifi_VisionSqueeze_h #include #include #include static const float DEFAULT_VISION_SQUEEZE_TURNING_X_FACTOR = 0.51f; static const float DEFAULT_VISION_SQUEEZE_TURNING_Y_FACTOR = 0.36f; static const float DEFAULT_VISION_SQUEEZE_UNSQUEEZE_DELAY = 0.2f; // seconds static const float DEFAULT_VISION_SQUEEZE_UNSQUEEZE_SPEED = 3.0f; static const float DEFAULT_VISION_SQUEEZE_TRANSITION = 0.25f; static const int DEFAULT_VISION_SQUEEZE_PER_EYE = 1; static const float DEFAULT_VISION_SQUEEZE_GROUND_PLANE_Y = 0.0f; static const float DEFAULT_VISION_SQUEEZE_SPOTLIGHT_SIZE = 6.0f; class VisionSqueeze { public: VisionSqueeze(); bool getVisionSqueezeEnabled() const { return _visionSqueezeEnabled; } void setVisionSqueezeEnabled(bool value); float getVisionSqueezeRatioX() const { return _visionSqueezeRatioX; } float getVisionSqueezeRatioY() const { return _visionSqueezeRatioY; } void setVisionSqueezeRatioX(float value); void setVisionSqueezeRatioY(float value); float getVisionSqueezeUnSqueezeDelay() const { return _visionSqueezeUnSqueezeDelay; } void setVisionSqueezeUnSqueezeDelay(float value); float getVisionSqueezeUnSqueezeSpeed() const { return _visionSqueezeUnSqueezeSpeed; } void setVisionSqueezeUnSqueezeSpeed(float value); float getVisionSqueezeTransition() const { return _visionSqueezeTransition; } void setVisionSqueezeTransition(float value); int getVisionSqueezePerEye() const { return _visionSqueezePerEye; } void setVisionSqueezePerEye(int value); float getVisionSqueezeGroundPlaneY() const { return _visionSqueezeGroundPlaneY; } void setVisionSqueezeGroundPlaneY(float value); float getVisionSqueezeSpotlightSize() const { return _visionSqueezeSpotlightSize; } void setVisionSqueezeSpotlightSize(float value); float getVisionSqueezeTurningXFactor() const { return _visionSqueezeTurningXFactor; } void setVisionSqueezeTurningXFactor(float value); float getVisionSqueezeTurningYFactor() const { return _visionSqueezeTurningYFactor; } void setVisionSqueezeTurningYFactor(float value); void updateVisionSqueeze(const glm::mat4& sensorToWorldMatrix, float deltaTime); // state variable accessors used by Application.cpp... bool getSqueezeVision() const { return _squeezeVision; } void setSqueezeVision(bool value) { _squeezeVision = value; } bool getSqueezeVisionTurning() const { return _squeezeVisionTurning; } void setSqueezeVisionTurning(bool value) { _squeezeVisionTurning = value; } private: Setting::Handle _visionSqueezeEnabledSetting {"visionSqueezeEnabled", false}; Setting::Handle _visionSqueezeRatioXSetting {"visionSqueezeRatioX", 0.0f}; Setting::Handle _visionSqueezeRatioYSetting {"visionSqueezeRatioY", 0.0f}; Setting::Handle _visionSqueezeUnSqueezeDelaySetting {"visionSqueezeUnSqueezeDelay", DEFAULT_VISION_SQUEEZE_UNSQUEEZE_DELAY}; Setting::Handle _visionSqueezeUnSqueezeSpeedSetting {"visionSqueezeUnSqueezeSpeed", DEFAULT_VISION_SQUEEZE_UNSQUEEZE_SPEED}; Setting::Handle _visionSqueezeTransitionSetting {"visionSqueezeTransition", DEFAULT_VISION_SQUEEZE_TRANSITION}; Setting::Handle _visionSqueezePerEyeSetting {"visionSqueezePerEye", DEFAULT_VISION_SQUEEZE_PER_EYE}; Setting::Handle _visionSqueezeGroundPlaneYSetting {"visionSqueezeGroundPlaneY", DEFAULT_VISION_SQUEEZE_GROUND_PLANE_Y}; Setting::Handle _visionSqueezeSpotlightSizeSetting {"visionSqueezeSpotlightSize", DEFAULT_VISION_SQUEEZE_SPOTLIGHT_SIZE}; Setting::Handle _visionSqueezeTurningXFactorSetting {"visionSqueezeTurningXFactor", DEFAULT_VISION_SQUEEZE_TURNING_X_FACTOR}; Setting::Handle _visionSqueezeTurningYFactorSetting {"visionSqueezeTurningYFactor", DEFAULT_VISION_SQUEEZE_TURNING_Y_FACTOR}; // these are readable and writable from the scripting interface (on a different thread), so make them atomic std::atomic _visionSqueezeEnabled { false }; std::atomic _visionSqueezeRatioX { 0.0f }; std::atomic _visionSqueezeRatioY { 0.0f }; std::atomic _visionSqueezeUnSqueezeDelay { DEFAULT_VISION_SQUEEZE_UNSQUEEZE_DELAY }; // seconds std::atomic _visionSqueezeUnSqueezeSpeed { DEFAULT_VISION_SQUEEZE_UNSQUEEZE_SPEED }; std::atomic _visionSqueezeTransition { DEFAULT_VISION_SQUEEZE_TRANSITION }; std::atomic _visionSqueezePerEye { DEFAULT_VISION_SQUEEZE_PER_EYE }; std::atomic _visionSqueezeGroundPlaneY { DEFAULT_VISION_SQUEEZE_GROUND_PLANE_Y }; std::atomic _visionSqueezeSpotlightSize { DEFAULT_VISION_SQUEEZE_SPOTLIGHT_SIZE }; std::atomic _visionSqueezeTurningXFactor { DEFAULT_VISION_SQUEEZE_TURNING_X_FACTOR }; std::atomic _visionSqueezeTurningYFactor { DEFAULT_VISION_SQUEEZE_TURNING_Y_FACTOR }; bool _squeezeVision { false }; bool _squeezeVisionTurning { false }; float _visionSqueezeLockout { 0.0 }; glm::vec3 _prevTranslation; glm::quat _prevRotation; }; #endif // hifi_VisionSqueeze_h