vectozavr-shooter/engine/gui/Window.cpp

54 lines
2.0 KiB
C++
Raw Normal View History

2021-09-13 15:53:43 +03:00
//
// Created by Иван Ильин on 26.03.2021.
//
#include "Window.h"
#include <utility>
2021-10-09 13:41:12 +03:00
#include "../ResourceManager.h"
2021-09-13 15:53:43 +03:00
void Window::addButton(int x, int y, int w, int h, std::function<void()> click, const std::string &text, double sx, double sy,
const std::string &texture, tPos usualState, tPos selectedState, tPos pressedState,
2021-10-17 19:38:16 +03:00
const std::string& font, sf::Color textColor) {
_buttons.push_back(Button{x, y, w, h, std::move(click), text, sx, sy, texture, usualState, selectedState, pressedState, font, textColor});
2021-10-03 07:47:05 +03:00
_buttons.back().init();
2021-09-13 15:53:43 +03:00
}
void Window::update() {
2021-09-13 15:53:43 +03:00
2021-10-03 07:47:05 +03:00
_screen->setTitle(_name);
_screen->drawSprite(_back);
2021-09-13 15:53:43 +03:00
Vec2D mousePos = _mouse->getMousePosition();
Vec2D dMousePos = mousePos - *_prevMousePosition;
2021-10-09 13:41:12 +03:00
_back.setPosition(_back.getPosition() - sf::Vector2f((float)(dMousePos.x() / 30), (float)(dMousePos.y() / 30)));
bool isPressed = _mouse->isButtonTapped(sf::Mouse::Left);
2021-09-13 15:53:43 +03:00
2021-10-03 07:47:05 +03:00
for(auto& button : _buttons) {
if( mousePos.x() > button.x() - button.w() * button.sx() / 2 && mousePos.y() > button.y() - button.h() * button.sy() / 2 &&
mousePos.x() < button.x() + button.w() * button.sx() / 2 && mousePos.y() < button.y() + button.h() * button.sy() / 2) {
2021-09-13 15:53:43 +03:00
button.select();
if(isPressed)
button.press();
} else {
button.unSelect();
}
if(_screen->isOpen()) {
2021-10-03 07:47:05 +03:00
_screen->drawSprite(button.sprite());
_screen->drawText(button.text());
2021-09-13 15:53:43 +03:00
}
}
_prevMousePosition = std::make_unique<Vec2D>(mousePos);
2021-09-13 15:53:43 +03:00
}
void Window::setBackgroundTexture(const std::string &texture, double sx, double sy, int w, int h) {
2021-10-03 07:47:05 +03:00
_backTexture = texture;
std::shared_ptr<sf::Texture> t = ResourceManager::loadTexture(_backTexture);
2021-09-13 15:53:43 +03:00
t->setRepeated(true);
2021-10-09 13:41:12 +03:00
_back = sf::Sprite(*t, sf::IntRect(0, 0, (int)(w + w / 30.0), (int)(h + h / 30.0)));
_back.scale((float)sx, (float)sy);
_back.setPosition(sf::Vector2f(-w / 30.0f, -h / 30.0f));
2021-09-13 15:53:43 +03:00
}