114 lines
No EOL
2.6 KiB
C++
Executable file
114 lines
No EOL
2.6 KiB
C++
Executable file
#include "headers/scroll_view.hpp"
|
|
|
|
namespace asloengine
|
|
{
|
|
|
|
ScrollView::ScrollView(sf::String _name, sf::Vector2f _size, float _max_scroll_amount, float _scroll_speed)
|
|
: size(_size), max_scroll_amount(_max_scroll_amount), scroll_speed(_scroll_speed), GameObject(_name), Clickable(sf::Mouse::Left) {}
|
|
|
|
ScrollView::~ScrollView() {}
|
|
|
|
void ScrollView::set_rotation(float _rotation) {}
|
|
|
|
void ScrollView::draw()
|
|
{
|
|
|
|
sf::View default_view = change_view();
|
|
|
|
for (GameObject *const& object : objects)
|
|
{
|
|
object->draw();
|
|
}
|
|
|
|
render_window->setView(default_view);
|
|
|
|
}
|
|
|
|
void ScrollView::on_start()
|
|
{
|
|
|
|
set_clickable(sf::FloatRect(get_position().x - origin.x * size.x, get_position().y - origin.y * size.y, size.x, size.y), render_window);
|
|
|
|
for (GameObject *const& object : objects)
|
|
{
|
|
object->start(render_window);
|
|
}
|
|
|
|
}
|
|
|
|
void ScrollView::on_update(float delta_time)
|
|
{
|
|
|
|
if (is_mouse_in())
|
|
{
|
|
scroll_amount -= Mouse::mouse_wheel_delta * scroll_speed;
|
|
scroll_amount = clamp(scroll_amount, 0, max_scroll_amount);
|
|
}
|
|
|
|
sf::View default_view = change_view();
|
|
|
|
for (GameObject *const& object : objects)
|
|
{
|
|
object->update(delta_time);
|
|
if (!object->alive)
|
|
{
|
|
needs_clean = true;
|
|
}
|
|
}
|
|
|
|
if (needs_clean)
|
|
{
|
|
clean();
|
|
}
|
|
|
|
render_window->setView(default_view);
|
|
|
|
}
|
|
|
|
void ScrollView::clean()
|
|
{
|
|
|
|
for (int i = 0; i < objects.size(); i++)
|
|
{
|
|
objects.erase(objects.begin() + i);
|
|
}
|
|
|
|
needs_clean = false;
|
|
|
|
}
|
|
|
|
void ScrollView::on_destroy()
|
|
{
|
|
|
|
for (GameObject *const& object : objects)
|
|
{
|
|
object->destroy();
|
|
}
|
|
|
|
}
|
|
|
|
sf::View ScrollView::change_view()
|
|
{
|
|
|
|
sf::View default_view = render_window->getView();
|
|
sf::View view = default_view;
|
|
sf::Vector2u window_size = render_window->getSize();
|
|
|
|
sf::Vector2f camera_center = default_view.getCenter() - default_view.getSize() / 2;
|
|
|
|
view.reset(sf::FloatRect(0, 0 + scroll_amount, size.x, size.y));
|
|
|
|
view.setViewport(sf::FloatRect(
|
|
(position.x - camera_center.x - size.x * origin.x) / window_size.x,
|
|
(position.y - camera_center.y - size.y * origin.y) / window_size.y,
|
|
size.x / window_size.x,
|
|
size.y / window_size.y
|
|
));
|
|
|
|
render_window->setView(view);
|
|
|
|
return default_view;
|
|
|
|
}
|
|
|
|
} |