51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
#include "focuscontroller.h"
|
|
#include "camera.h"
|
|
#include <glm/ext.hpp>
|
|
|
|
void FocusController::setFocus(glm::vec3* object)
|
|
{
|
|
track = object;
|
|
dist = glm::distance2(*track, camera->getPosition());
|
|
}
|
|
|
|
void FocusController::mouseMove(int dx, int dy)
|
|
{
|
|
bool needUpdate = false;
|
|
|
|
if(dist < 0)
|
|
dist = glm::distance2(*track, camera->getPosition());
|
|
|
|
if(grabbed & 1)
|
|
{
|
|
camera->rotate(glm::vec2(dx*0.01f, dy*0.01f));
|
|
needUpdate = true;
|
|
}
|
|
|
|
if(grabbed & 4)
|
|
{
|
|
dist += dy*0.02f;
|
|
needUpdate = true;
|
|
}
|
|
|
|
if(needUpdate)
|
|
updateCamera();
|
|
}
|
|
|
|
void FocusController::mouseWheelEvent(int scrollCount)
|
|
{
|
|
if(dist < 0)
|
|
dist = glm::distance2(*track, camera->getPosition());
|
|
|
|
dist += scrollCount/600.0f;
|
|
updateCamera();
|
|
}
|
|
|
|
void FocusController::updateCamera()
|
|
{
|
|
glm::vec2 rot = camera->getRotation();
|
|
glm::vec3 pos = glm::vec3(std::sin(-rot.x)*std::cos(rot.y),
|
|
std::sin(rot.y),
|
|
std::cos(-rot.x)*std::cos(rot.y));
|
|
camera->moveTo(*track + dist*pos);
|
|
}
|