/*! * \file include/Camera.h * \brief Camera, View Frustum * * \author xythobuz */ #ifndef _CAMERA_H_ #define _CAMERA_H_ #include #include "RoomData.h" class Camera { public: static void reset(); static bool update(); static void setSize(glm::i32vec2 s); static void handleAction(ActionEvents action, bool isFinished); static void handleMouseMotion(int x, int y); static void handleControllerAxis(float value, KeyboardButton axis); //! \fixme The Y axis seems to be the source of all evil? static void setPosition(glm::vec3 p) { pos = glm::vec3(p.x, -p.y, p.z); dirty = true; } static glm::vec3 getPosition() { return glm::vec3(pos.x, -pos.y, pos.z); } static glm::vec2 getRotation() { return rot; } static glm::mat4 getProjectionMatrix() { return projection; } static glm::mat4 getViewMatrix() { return view; } static void setSensitivityX(float sens) { rotationDeltaX = sens; } static float getSensitivityX() { return rotationDeltaX; } static void setSensitivityY(float sens) { rotationDeltaY = sens; } static float getSensitivityY() { return rotationDeltaY; } static void setUpdateViewFrustum(bool u) { updateViewFrustum = u; } static bool getUpdateViewFrustum() { return updateViewFrustum; } static void setRoom(int r) { if (room != r) dirty = true; room = r; } static int getRoom() { return room; } static void setShowOverlay(bool s) { showOverlay = s; } static bool getShowOverlay() { return showOverlay; } static bool boxInFrustum(BoundingBox b); static void displayFrustum(glm::mat4 MVP); static void displayUI(); private: static void calculateFrustumPlanes(); static glm::vec3 pos; static glm::vec2 rot; static glm::vec3 posSpeed; static glm::vec2 rotSpeed; static glm::mat4 projection; static glm::mat4 view; static float rotationDeltaX, rotationDeltaY; static bool updateViewFrustum, dirty, showOverlay, movingFaster; static int room; }; #endif