|
|
- /*
- * Copyright (C) 2017 Christopher J. Howard
- *
- * This file is part of Antkeeper Source Code.
- *
- * Antkeeper Source Code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Antkeeper Source Code is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Antkeeper Source Code. If not, see <http://www.gnu.org/licenses/>.
- */
-
- #ifndef CAMERA_CONTROLLER_HPP
- #define CAMERA_CONTROLLER_HPP
-
- #include <emergent/emergent.hpp>
-
- using namespace Emergent;
-
- class CameraController
- {
- public:
- CameraController();
- virtual void update(float dt) = 0;
-
- void setCamera(Camera* camera);
-
- const Camera* getCamera() const;
- Camera* getCamera();
-
- protected:
- Camera* camera;
- };
-
- inline void CameraController::setCamera(Camera* camera)
- {
- this->camera = camera;
- }
-
- inline const Camera* CameraController::getCamera() const
- {
- return camera;
- }
-
- inline Camera* CameraController::getCamera()
- {
- return camera;
- }
-
- class SurfaceCameraController: public CameraController
- {
- public:
- SurfaceCameraController();
- virtual ~SurfaceCameraController();
- virtual void update(float dt);
-
- /// @param direction Specifies the movement direction and speed scale on the XZ plane
- void move(Vector2 direction);
- void rotate(float angle);
- void zoom(float distance);
-
- void setFocalPoint(const Vector3& point);
- void setFocalDistance(float distance);
- void setElevation(float angle);
- void setAzimuth(float angle);
- void setTargetFocalPoint(const Vector3& point);
- void setTargetFocalDistance(float distance);
- void setTargetElevation(float angle);
- void setTargetAzimuth(float angle);
-
- const Vector3& getFocalPoint() const;
- float getFocalDistance() const;
- float getElevation() const;
- float getAzimuth() const;
- const Vector3& getTargetFocalPoint() const;
- float getTargetFocalDistance() const;
- float getTargetElevation() const;
- float getTargetAzimuth() const;
- const Vector3& getTranslation() const;
- const glm::quat& getRotation() const;
- const Vector3& getTargetTranslation() const;
- const glm::quat& getTargetRotation() const;
-
- private:
- Vector3 focalPoint;
- float focalDistance;
- float elevation;
- float azimuth;
-
- Vector3 targetFocalPoint;
- float targetFocalDistance;
- float targetElevation;
- float targetAzimuth;
-
- glm::quat elevationRotation;
- glm::quat azimuthRotation;
- glm::quat rotation;
- glm::quat targetElevationRotation;
- glm::quat targetAzimuthRotation;
- glm::quat targetRotation;
- Vector3 translation;
- Vector3 targetTranslation;
- };
-
- inline const Vector3& SurfaceCameraController::getFocalPoint() const
- {
- return focalPoint;
- }
-
- inline float SurfaceCameraController::getFocalDistance() const
- {
- return focalDistance;
- }
-
- inline float SurfaceCameraController::getElevation() const
- {
- return elevation;
- }
-
- inline float SurfaceCameraController::getAzimuth() const
- {
- return azimuth;
- }
-
- inline const Vector3& SurfaceCameraController::getTargetFocalPoint() const
- {
- return targetFocalPoint;
- }
-
- inline float SurfaceCameraController::getTargetFocalDistance() const
- {
- return targetFocalDistance;
- }
-
- inline float SurfaceCameraController::getTargetElevation() const
- {
- return targetElevation;
- }
-
- inline float SurfaceCameraController::getTargetAzimuth() const
- {
- return targetAzimuth;
- }
-
- inline const Vector3& SurfaceCameraController::getTranslation() const
- {
- return translation;
- }
-
- inline const glm::quat& SurfaceCameraController::getRotation() const
- {
- return rotation;
- }
-
- inline const Vector3& SurfaceCameraController::getTargetTranslation() const
- {
- return targetTranslation;
- }
-
- inline const glm::quat& SurfaceCameraController::getTargetRotation() const
- {
- return targetRotation;
- }
-
- /**
- * Note, when mouseover tunnel, highlight (in red?) the entire path from the end of the tunnel to the entrance of the nest.
- */
- class TunnelCameraController: public CameraController
- {
- public:
- TunnelCameraController();
- virtual ~TunnelCameraController();
-
- virtual void update(float dt);
-
- void rotateCW(float scale);
- void rotateCCW(float scale);
-
- // Ascends the tunnel system in the direction of the entrance
- void ascend(float scale);
-
- // Descends along the current tunnel
- void descend(float scale);
- };
-
- #endif
|