leverage Camera object for scripting, remove sep interface

This commit is contained in:
Stephen Birarda 2014-11-04 10:33:55 -08:00
parent 957705998f
commit 790aa848ae
4 changed files with 46 additions and 81 deletions

View file

@ -177,7 +177,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
_packetsPerSecond(0), _packetsPerSecond(0),
_bytesPerSecond(0), _bytesPerSecond(0),
_nodeBoundsDisplay(this), _nodeBoundsDisplay(this),
_cameraScriptableObject(&_myCamera, &_viewFrustum),
_previousScriptLocation(), _previousScriptLocation(),
_applicationOverlay(), _applicationOverlay(),
_runningScriptsWidget(NULL), _runningScriptsWidget(NULL),
@ -1304,7 +1303,7 @@ void Application::mousePressEvent(QMouseEvent* event, unsigned int deviceID) {
// nobody handled this - make it an action event on the _window object // nobody handled this - make it an action event on the _window object
HFActionEvent actionEvent(HFActionEvent::startType(), HFActionEvent actionEvent(HFActionEvent::startType(),
_cameraScriptableObject.computePickRay(event->x(), event->y())); _myCamera.computePickRay(event->x(), event->y()));
sendEvent(this, &actionEvent); sendEvent(this, &actionEvent);
} else if (event->button() == Qt::RightButton) { } else if (event->button() == Qt::RightButton) {
@ -1339,7 +1338,7 @@ void Application::mouseReleaseEvent(QMouseEvent* event, unsigned int deviceID) {
// fire an action end event // fire an action end event
HFActionEvent actionEvent(HFActionEvent::endType(), HFActionEvent actionEvent(HFActionEvent::endType(),
_cameraScriptableObject.computePickRay(event->x(), event->y())); _myCamera.computePickRay(event->x(), event->y()));
sendEvent(this, &actionEvent); sendEvent(this, &actionEvent);
} }
} }
@ -3850,7 +3849,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri
scriptEngine->setAvatarData(_myAvatar, "MyAvatar"); // leave it as a MyAvatar class to expose thrust features scriptEngine->setAvatarData(_myAvatar, "MyAvatar"); // leave it as a MyAvatar class to expose thrust features
scriptEngine->setAvatarHashMap(&_avatarManager, "AvatarList"); scriptEngine->setAvatarHashMap(&_avatarManager, "AvatarList");
scriptEngine->registerGlobalObject("Camera", &_cameraScriptableObject); scriptEngine->registerGlobalObject("Camera", &_myCamera);
#if defined(Q_OS_MAC) || defined(Q_OS_WIN) #if defined(Q_OS_MAC) || defined(Q_OS_WIN)
scriptEngine->registerGlobalObject("SpeechRecognizer", Menu::getInstance()->getSpeechRecognizer()); scriptEngine->registerGlobalObject("SpeechRecognizer", Menu::getInstance()->getSpeechRecognizer());

View file

@ -597,7 +597,6 @@ private:
std::vector<VoxelFade> _voxelFades; std::vector<VoxelFade> _voxelFades;
QReadWriteLock _voxelFadesLock; QReadWriteLock _voxelFadesLock;
ControllerScriptingInterface _controllerScriptingInterface; ControllerScriptingInterface _controllerScriptingInterface;
CameraScriptableObject _cameraScriptableObject;
QPointer<LogDialog> _logDialog; QPointer<LogDialog> _logDialog;
QPointer<SnapshotShareDialog> _snapshotShareDialog; QPointer<SnapshotShareDialog> _snapshotShareDialog;

View file

@ -72,9 +72,9 @@ float Camera::getFarClip() const {
: std::numeric_limits<int16_t>::max() - 1; : std::numeric_limits<int16_t>::max() - 1;
} }
void Camera::setMode(CameraMode m) { void Camera::setMode(CameraMode mode) {
_mode = m; _mode = mode;
emit modeUpdated(m); emit modeUpdated(modeToString(mode));
} }
@ -94,57 +94,45 @@ void Camera::setFarClip(float f) {
_farClip = f; _farClip = f;
} }
CameraScriptableObject::CameraScriptableObject(Camera* camera, ViewFrustum* viewFrustum) : PickRay Camera::computePickRay(float x, float y) {
_camera(camera), _viewFrustum(viewFrustum)
{
connect(_camera, &Camera::modeUpdated, this, &CameraScriptableObject::onModeUpdated);
}
PickRay CameraScriptableObject::computePickRay(float x, float y) {
float screenWidth = Application::getInstance()->getGLWidget()->width(); float screenWidth = Application::getInstance()->getGLWidget()->width();
float screenHeight = Application::getInstance()->getGLWidget()->height(); float screenHeight = Application::getInstance()->getGLWidget()->height();
PickRay result; PickRay result;
if (OculusManager::isConnected()) { if (OculusManager::isConnected()) {
result.origin = _camera->getPosition(); result.origin = getPosition();
Application::getInstance()->getApplicationOverlay().computeOculusPickRay(x / screenWidth, y / screenHeight, result.direction); Application::getInstance()->getApplicationOverlay().computeOculusPickRay(x / screenWidth, y / screenHeight, result.direction);
} else { } else {
_viewFrustum->computePickRay(x / screenWidth, y / screenHeight, result.origin, result.direction); Application::getInstance()->getViewFrustum()->computePickRay(x / screenWidth, y / screenHeight,
result.origin, result.direction);
} }
return result; return result;
} }
QString CameraScriptableObject::getMode() const { void Camera::setModeString(const QString& mode) {
return modeToString(_camera->getMode()); CameraMode targetMode = stringToMode(mode);
}
switch (targetMode) {
void CameraScriptableObject::setMode(const QString& mode) { case CAMERA_MODE_THIRD_PERSON:
CameraMode currentMode = _camera->getMode(); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false);
CameraMode targetMode = currentMode; Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false);
if (mode == "third person") { break;
targetMode = CAMERA_MODE_THIRD_PERSON; case CAMERA_MODE_MIRROR:
Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, true);
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false); Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false);
} else if (mode == "first person") { break;
targetMode = CAMERA_MODE_FIRST_PERSON; case CAMERA_MODE_INDEPENDENT:
Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false);
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, true); Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false);
} else if (mode == "mirror") { break;
targetMode = CAMERA_MODE_MIRROR; default:
Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, true); break;
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false);
} else if (mode == "independent") {
targetMode = CAMERA_MODE_INDEPENDENT;
Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false);
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false);
} }
if (currentMode != targetMode) {
_camera->setMode(targetMode); if (_mode != targetMode) {
setMode(targetMode);
} }
} }
void CameraScriptableObject::onModeUpdated(CameraMode m) { QString Camera::getModeString() const {
emit modeUpdated(modeToString(m)); return modeToString(_mode);
} }

View file

@ -39,7 +39,6 @@ public:
void update( float deltaTime ); void update( float deltaTime );
void setPosition(const glm::vec3& p) { _position = p; }
void setRotation(const glm::quat& rotation) { _rotation = rotation; }; void setRotation(const glm::quat& rotation) { _rotation = rotation; };
void setHmdPosition(const glm::vec3& hmdPosition) { _hmdPosition = hmdPosition; } void setHmdPosition(const glm::vec3& hmdPosition) { _hmdPosition = hmdPosition; }
void setHmdRotation(const glm::quat& hmdRotation) { _hmdRotation = hmdRotation; }; void setHmdRotation(const glm::quat& hmdRotation) { _hmdRotation = hmdRotation; };
@ -68,12 +67,20 @@ public:
const glm::vec3& getEyeOffsetPosition() const { return _eyeOffsetPosition; } const glm::vec3& getEyeOffsetPosition() const { return _eyeOffsetPosition; }
const glm::quat& getEyeOffsetOrientation() const { return _eyeOffsetOrientation; } const glm::quat& getEyeOffsetOrientation() const { return _eyeOffsetOrientation; }
float getScale() const { return _scale; } float getScale() const { return _scale; }
public slots:
signals: QString getModeString() const;
void modeUpdated(CameraMode newMode); void setModeString(const QString& mode);
private:
void setPosition(const glm::vec3& position) { _position = position; }
void setOrientation(const glm::quat& orientation) { setRotation(orientation); }
glm::quat getOrientation() const { return getRotation(); }
PickRay computePickRay(float x, float y);
signals:
void modeUpdated(const QString& newMode);
private:
CameraMode _mode; CameraMode _mode;
glm::vec3 _position; glm::vec3 _position;
float _fieldOfView; // degrees float _fieldOfView; // degrees
@ -90,32 +97,4 @@ private:
float _scale; float _scale;
}; };
class CameraScriptableObject : public QObject {
Q_OBJECT
public:
CameraScriptableObject(Camera* camera, ViewFrustum* viewFrustum);
public slots:
QString getMode() const;
void setMode(const QString& mode);
void setPosition(const glm::vec3& value) { _camera->setPosition(value);}
glm::vec3 getPosition() const { return _camera->getPosition(); }
void setOrientation(const glm::quat& value) { _camera->setRotation(value); }
glm::quat getOrientation() const { return _camera->getRotation(); }
PickRay computePickRay(float x, float y);
signals:
void modeUpdated(const QString& newMode);
private slots:
void onModeUpdated(CameraMode m);
private:
Camera* _camera;
ViewFrustum* _viewFrustum;
};
#endif // hifi_Camera_h #endif // hifi_Camera_h