tower-defense-cpp/Sprite.cpp
bMorgan01 b49080f675 init
2022-03-08 10:18:34 -07:00

87 lines
2 KiB
C++

//
// Created by Benjamin on 1/25/2022.
//
#include "Sprite.h"
Sprite::Sprite(const sf::Texture &texture) : sf::Sprite(texture) {
}
Sprite::Sprite(const sf::Texture &texture, int origin) : sf::Sprite(texture) {
setOrigin(origin);
}
Sprite::Sprite(const sf::Texture &texture, float x, float y, float scale, int origin) : Sprite(texture, origin) {
setScale(scale, scale);
setPosition(x, y);
}
Sprite::Sprite(const sf::Texture &texture, float x, float y, float angle, float scale, int origin) : Sprite(texture, x, y, scale, origin) {
setRotation(angle);
}
Sprite::~Sprite() noexcept {
removeMounts();
}
void Sprite::setOrigin(int origin) {
if (origin == TOP_LEFT) {
sf::Sprite::setOrigin(0, 0);
} else if (origin == CENTER) {
sf::Sprite::setOrigin(getLocalBounds().width/2.0,getLocalBounds().height/2.0);
} else if (origin == BOTTOM_RIGHT) {
sf::Sprite::setOrigin(getLocalBounds().width, getLocalBounds().height);
}
}
bool Sprite::isVisible() const {
return visible;
}
void Sprite::setVisible(bool visible) {
this->visible = visible;
if (hasMount()) {
riding->setVisible(visible);
}
}
void Sprite::setMount(Sprite *s) {
removeMounts();
riding = s;
}
void Sprite::removeMounts() {
if (hasMount()) {
riding->removeMounts();
delete riding;
riding = nullptr;
}
}
void Sprite::kill() {
removeMounts();
}
void Sprite::update() {
sf::Vector2f mousePosF(static_cast<float>( sf::Mouse::getPosition().x ), static_cast<float>( sf::Mouse::getPosition().y ));
if (getGlobalBounds().contains(mousePosF)) {
if (!isHovered()) {
hover();
}
} else if (isHovered()) {
unHover();
}
}
void Sprite::draw(sf::RenderWindow *window) {
if (hasMount()) {
riding->draw(window);
}
if (visible) {
window->draw(*this);
}
}