40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#include "pch.h"
|
|
#include "GuiButton.h"
|
|
|
|
#include <iostream>
|
|
|
|
#include "colors.h"
|
|
#include "utils.h"
|
|
GuiButton::GuiButton(const std::string& filePath, const Vector2f& pos, const Vector2f& size, bool shouldHideDefault, TextureManager* manager): m_Position(pos), m_Size(size),
|
|
m_shouldHide(shouldHideDefault) {
|
|
m_Texture = manager->GetTexture(filePath);
|
|
if (size.x == 0 && size.y == 0) {
|
|
m_Size = Vector2f { float(m_Texture->GetWidth()), float(m_Texture->GetHeight()) };
|
|
}
|
|
}
|
|
void GuiButton::Draw() const {
|
|
Rectf dest = Rectf(m_Position, m_Size);
|
|
Rectf src = Rectf(0, 0, m_Texture->GetWidth(), m_Texture->GetHeight());
|
|
if (m_IsHovered || !m_shouldHide) {
|
|
m_Texture->Draw(dest, src, false);
|
|
|
|
}
|
|
}
|
|
void GuiButton::Update(float) {
|
|
Vector2f mousePos = utils::GetMousePos();
|
|
Rectf buttonRect = Rectf(m_Position, m_Size);
|
|
|
|
this->m_IsHovered = utils::IsPointInRect(mousePos, buttonRect);
|
|
|
|
m_IsPressed = m_IsHovered && utils::IsMouseButtonDown(SDL_BUTTON_LEFT);
|
|
|
|
if (m_IsPressed && !m_IsPrimed) {
|
|
m_IsPrimed = true;
|
|
m_OnClick();
|
|
}
|
|
|
|
if (!m_IsPressed) {
|
|
m_IsPrimed = false;
|
|
}
|
|
}
|