Add Camera::modeUpdated()

This commit is contained in:
Ryan Huffman 2014-10-23 14:47:41 -07:00
parent 28095e9972
commit fde7b30501
3 changed files with 58 additions and 28 deletions

View file

@ -33,7 +33,7 @@ Script.include("libraries/entityPropertyDialogBox.js");
var entityPropertyDialogBox = EntityPropertyDialogBox; var entityPropertyDialogBox = EntityPropertyDialogBox;
Script.include("libraries/entityCameraTool.js"); Script.include("libraries/entityCameraTool.js");
var entityCameraTool = new EntityCameraTool(); var cameraManager = new CameraManager();
selectionManager.setEventListener(selectionDisplay.updateHandles); selectionManager.setEventListener(selectionDisplay.updateHandles);
@ -247,9 +247,9 @@ var toolBar = (function () {
isActive = !isActive; isActive = !isActive;
if (!isActive) { if (!isActive) {
selectionDisplay.unselectAll(); selectionDisplay.unselectAll();
entityCameraTool.disable(); cameraManager.disable();
} else { } else {
entityCameraTool.enable(); cameraManager.enable();
} }
return true; return true;
} }
@ -374,7 +374,7 @@ function mousePressEvent(event) {
var clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); var clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y });
if (toolBar.mousePressEvent(event) || progressDialog.mousePressEvent(event) if (toolBar.mousePressEvent(event) || progressDialog.mousePressEvent(event)
|| entityCameraTool.mousePressEvent(event) || selectionDisplay.mousePressEvent(event)) { || cameraManager.mousePressEvent(event) || selectionDisplay.mousePressEvent(event)) {
// Event handled; do nothing. // Event handled; do nothing.
return; return;
} else { } else {
@ -482,8 +482,8 @@ function mouseMoveEvent(event) {
return; return;
} }
// allow the selectionDisplay and entityCameraTool to handle the event first, if it doesn't handle it, then do our own thing // allow the selectionDisplay and cameraManager to handle the event first, if it doesn't handle it, then do our own thing
if (selectionDisplay.mouseMoveEvent(event) || entityCameraTool.mouseMoveEvent(event)) { if (selectionDisplay.mouseMoveEvent(event) || cameraManager.mouseMoveEvent(event)) {
return; return;
} }
@ -522,7 +522,7 @@ function mouseReleaseEvent(event) {
if (entitySelected) { if (entitySelected) {
tooltip.show(false); tooltip.show(false);
} }
entityCameraTool.mouseReleaseEvent(event); cameraManager.mouseReleaseEvent(event);
} }
Controller.mousePressEvent.connect(mousePressEvent); Controller.mousePressEvent.connect(mousePressEvent);
@ -652,7 +652,6 @@ Menu.menuItemEvent.connect(handeMenuEvent);
Controller.keyReleaseEvent.connect(function (event) { Controller.keyReleaseEvent.connect(function (event) {
// since sometimes our menu shortcut keys don't work, trap our menu items here also and fire the appropriate menu items // since sometimes our menu shortcut keys don't work, trap our menu items here also and fire the appropriate menu items
print(event.text);
if (event.text == "`") { if (event.text == "`") {
handeMenuEvent("Edit Properties..."); handeMenuEvent("Edit Properties...");
} }
@ -666,7 +665,11 @@ Controller.keyReleaseEvent.connect(function (event) {
if (entitySelected) { if (entitySelected) {
// Get latest properties // Get latest properties
var properties = Entities.getEntityProperties(selectedEntityID); var properties = Entities.getEntityProperties(selectedEntityID);
entityCameraTool.focus(properties); cameraManager.focus(properties);
}
} else if (event.text == '[') {
if (isActive) {
cameraManager.enable();
} }
} }
}); });

View file

@ -21,6 +21,32 @@
#include "devices/OculusManager.h" #include "devices/OculusManager.h"
CameraMode stringToMode(const QString& mode) {
if (mode == "third person") {
return CAMERA_MODE_THIRD_PERSON;
} else if (mode == "first person") {
return CAMERA_MODE_FIRST_PERSON;
} else if (mode == "mirror") {
return CAMERA_MODE_MIRROR;
} else if (mode == "independent") {
return CAMERA_MODE_INDEPENDENT;
}
return CAMERA_MODE_NULL;
}
QString modeToString(CameraMode mode) {
if (mode == CAMERA_MODE_THIRD_PERSON) {
return "third person";
} else if (mode == CAMERA_MODE_FIRST_PERSON) {
return "first person";
} else if (mode == CAMERA_MODE_MIRROR) {
return "mirror";
} else if (mode == CAMERA_MODE_INDEPENDENT) {
return "independent";
}
return "unknown";
}
Camera::Camera() : Camera::Camera() :
_mode(CAMERA_MODE_THIRD_PERSON), _mode(CAMERA_MODE_THIRD_PERSON),
_position(0.0f, 0.0f, 0.0f), _position(0.0f, 0.0f, 0.0f),
@ -48,6 +74,7 @@ float Camera::getFarClip() const {
void Camera::setMode(CameraMode m) { void Camera::setMode(CameraMode m) {
_mode = m; _mode = m;
emit modeUpdated(m);
} }
@ -70,6 +97,7 @@ void Camera::setFarClip(float f) {
CameraScriptableObject::CameraScriptableObject(Camera* camera, ViewFrustum* viewFrustum) : CameraScriptableObject::CameraScriptableObject(Camera* camera, ViewFrustum* viewFrustum) :
_camera(camera), _viewFrustum(viewFrustum) _camera(camera), _viewFrustum(viewFrustum)
{ {
connect(_camera, &Camera::modeUpdated, this, &CameraScriptableObject::onModeUpdated);
} }
PickRay CameraScriptableObject::computePickRay(float x, float y) { PickRay CameraScriptableObject::computePickRay(float x, float y) {
@ -86,24 +114,7 @@ PickRay CameraScriptableObject::computePickRay(float x, float y) {
} }
QString CameraScriptableObject::getMode() const { QString CameraScriptableObject::getMode() const {
QString mode("unknown"); return modeToString(_camera->getMode());
switch(_camera->getMode()) {
case CAMERA_MODE_THIRD_PERSON:
mode = "third person";
break;
case CAMERA_MODE_FIRST_PERSON:
mode = "first person";
break;
case CAMERA_MODE_MIRROR:
mode = "mirror";
break;
case CAMERA_MODE_INDEPENDENT:
mode = "independent";
break;
default:
break;
}
return mode;
} }
void CameraScriptableObject::setMode(const QString& mode) { void CameraScriptableObject::setMode(const QString& mode) {
@ -131,5 +142,9 @@ void CameraScriptableObject::setMode(const QString& mode) {
} }
} }
void CameraScriptableObject::onModeUpdated(CameraMode m) {
emit modeUpdated(modeToString(m));
}

View file

@ -27,8 +27,11 @@ enum CameraMode
NUM_CAMERA_MODES NUM_CAMERA_MODES
}; };
class Camera { Q_DECLARE_METATYPE(CameraMode);
static int cameraModeId = qRegisterMetaType<CameraMode>();
class Camera : public QObject {
Q_OBJECT
public: public:
Camera(); Camera();
@ -63,6 +66,9 @@ 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; }
signals:
void modeUpdated(CameraMode newMode);
private: private:
@ -100,6 +106,12 @@ public slots:
PickRay computePickRay(float x, float y); PickRay computePickRay(float x, float y);
signals:
void modeUpdated(const QString& newMode);
private slots:
void onModeUpdated(CameraMode m);
private: private:
Camera* _camera; Camera* _camera;
ViewFrustum* _viewFrustum; ViewFrustum* _viewFrustum;