holesome/src/game/world/world_view.cpp

65 lines
1.3 KiB
C++
Raw Normal View History

2023-05-09 20:50:50 +02:00
#include "world_view.h"
WorldView::WorldView() : view(nullptr), hasViewChanged(false)
2023-05-09 20:50:50 +02:00
{
}
WorldView::~WorldView()
{
2023-05-10 11:03:14 +02:00
delete view;
2023-05-09 20:50:50 +02:00
}
void WorldView::draw(sf::RenderWindow *window) const
{
}
2023-05-10 11:03:14 +02:00
void WorldView::update(Game *game)
2023-05-09 20:50:50 +02:00
{
// Initialize if necessary
2023-05-10 11:03:14 +02:00
if (view == nullptr)
{
initializeView(game);
}
// Update size
setSize(game->window->getSize());
2023-05-09 20:50:50 +02:00
2023-05-10 11:03:14 +02:00
// Update position
moveViewByControls();
// Update window if necessary
if (hasViewChanged)
2023-05-09 20:50:50 +02:00
{
game->window->setView(*this->view);
hasViewChanged = false;
2023-05-09 20:50:50 +02:00
}
2023-05-10 11:03:14 +02:00
}
void WorldView::initializeView(Game *game)
{
auto center = game->window->getView().getCenter();
auto size = game->window->getView().getSize();
view = new sf::View(center, size);
2023-05-09 20:50:50 +02:00
}
void WorldView::setSize(sf::Vector2u windowSize)
{
sf::Vector2f viewSize = sf::Vector2f(windowSize.x, windowSize.y);
view->setSize(viewSize);
hasViewChanged = true;
}
void WorldView::moveViewByControls()
{
auto moveDirection = InputMapper::getInputDirection().asHardDirection();
if (moveDirection == HardDirection::NONE)
{
return;
}
float stepSize = 100.0f * FRAME_TIME.asSeconds();
auto delta = stepSize * Direction::getVector(moveDirection);
this->view->move(delta);
hasViewChanged = true;
}