Witam. Napisałem prototyp przycisku w C++ SFML. Potrzebuję dodać dwie animacje do przycisku animacje "najechania kursorem" i animacje "zdjęcia kursora".
#include <SFML/Graphics.hpp>
class Button {
public:
sf::Vector2f position;
sf::Vector2f size;
sf::Color normalColor;
sf::Color mouseOverColor;
sf::Color currentColor;
int colorTimer;
int maxTimer;
bool isMouseOver;
sf::RectangleShape* rect;
Button(sf::Vector2f position, sf::Vector2f size, sf::Color normalColor, sf::Color mouseOverColor) {
this->position = position;
this->size = size;
this->normalColor = normalColor;
this->mouseOverColor = mouseOverColor;
isMouseOver = false;
colorTimer = 0;
maxTimer = 8;
}
bool mouseOvering(sf::Vector2i mousePosition) {
if (mousePosition.x > position.x - size.x / 2.f &&
mousePosition.x < position.x + size.x / 2.f &&
mousePosition.y > position.y - size.y / 2.f &&
mousePosition.y < position.y + size.y / 2.f ) {
isMouseOver = true;
colorTimer += 1;
if (colorTimer > maxTimer)
colorTimer = maxTimer;
}
else {
isMouseOver = false;
colorTimer -= 1;
if (colorTimer < 0)
colorTimer = 0;
}
return isMouseOver;
}
virtual void render(sf::RenderWindow* window) {
rect = new sf::RectangleShape(size);
rect->setOrigin(size.x / 2.0f, size.y / 2.0f);
rect->setPosition(position);
(isMouseOver) ? rect->setFillColor(mouseOverColor) : rect->setFillColor(normalColor);
rect->setFillColor(
sf::Color(
normalColor.r + (mouseOverColor.r - normalColor.r) * colorTimer / maxTimer,
normalColor.g + (mouseOverColor.g - normalColor.g) * colorTimer / maxTimer,
normalColor.b + (mouseOverColor.b - normalColor.b) * colorTimer / maxTimer)
);
window->draw(*rect);
}
};