diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-11-12 17:27:53 +0100 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-11-12 17:47:26 +0100 |
commit | 2e7d74e2622e13a6986cffd2c8d4423b840c5e59 (patch) | |
tree | 03f20878eadc5f09da020a386397500a60abc07f /src/graphics |
First mini-commit that works with a not-included spritesheet
Diffstat (limited to 'src/graphics')
-rw-r--r-- | src/graphics/animation.cpp | 122 | ||||
-rw-r--r-- | src/graphics/animation.h | 44 | ||||
-rw-r--r-- | src/graphics/window.h | 8 |
3 files changed, 174 insertions, 0 deletions
diff --git a/src/graphics/animation.cpp b/src/graphics/animation.cpp new file mode 100644 index 0000000..f326c22 --- /dev/null +++ b/src/graphics/animation.cpp @@ -0,0 +1,122 @@ +#include "animation.h" + +#include <cstdio> + +namespace Graphics{ + + // Basic animation, loops through the pictures + Animation::Animation(){} + + Animation::Animation(const char* filename, int count, int switchTime) : + i_ (0), + count_ (count), + lastTime_ (0), + switchTime_ (switchTime){ + + texture_.loadFromFile(filename); + + sf::Vector2u size = texture_.getSize(); + h_ = size.y; + if (size.x % count != 0){ + printf("Animation: size not divisible by %d\n", count); + } + w_ = size.x / count_; + rect_ = sf::IntRect(0,0,w_,h_); // set to first picture in + // animation + sprite_ = sf::Sprite(texture_, rect_); + sprite_.setScale(8,8); + } + + bool Animation::ticked(int deltaTime){ + lastTime_ += deltaTime; + if ( switchTime_ > lastTime_ ){ + return false; + } + lastTime_ = 0; + return true; + } + + sf::Sprite& Animation::next(int deltaTime){ + if ( !ticked(deltaTime) ){ + return sprite_; + } + if (i_ < count_ -1 ){ + i_ += 1; + } else { + i_ = 0; + } + rect_.left = i_ * w_; + + sprite_.setTexture(texture_); // This shouldn't be needed...! + sprite_.setTextureRect(rect_); + + return sprite_; + } + + Animation::~Animation(){} + + // ONESHOT ANIMATION + OneShotAnimation::OneShotAnimation(){} + + OneShotAnimation::OneShotAnimation(const char* filename, int count, int switchTime): + Animation(filename, count, switchTime) { + } + + bool OneShotAnimation::finished(){ + return i_ == count_ - 1; + } + + sf::Sprite& OneShotAnimation::next(int deltaTime){ + if ( !ticked(deltaTime) ){ + return sprite_; + } + if ( finished() ){ + return sprite_; + } + if (i_ < count_ -1 ){ + i_ += 1; + } + rect_.left = i_ * w_; + + sprite_.setTexture(texture_); // This shouldn't be needed...! + sprite_.setTextureRect(rect_); + + return sprite_; + } + + // BOUNCING ANIMATION + BouncingAnimation::BouncingAnimation(){} + + BouncingAnimation::BouncingAnimation(const char* filename, int count, int switchTime): + Animation(filename, count, switchTime), + up_ (true) { + } + + sf::Sprite& BouncingAnimation::next(int deltaTime){ + if( !ticked(deltaTime) ) { + return sprite_; + } + // Rewrite this and eliminate the boolean (use the count as + // positive/negative) + if ( up_ ) { + if( i_ == count_ - 1){ + up_ = false; + } else { + i_++; + } + } else { + i_--; + if( i_ == 0 ){ + up_ = true; + } + } + rect_.left = i_ * w_; + + sprite_.setTexture(texture_); // This shouldn't be needed...! + sprite_.setTextureRect(rect_); + + return sprite_; + } + + BouncingAnimation::~BouncingAnimation(){} +} diff --git a/src/graphics/animation.h b/src/graphics/animation.h new file mode 100644 index 0000000..87b4427 --- /dev/null +++ b/src/graphics/animation.h @@ -0,0 +1,44 @@ +#ifndef GRAPHICS_ANIMATION_H +#define GRAPHICS_ANIMATION_H + +#include <SFML/Graphics.hpp> + +namespace Graphics{ + + class Animation{ + protected: + int i_; + int count_; + int lastTime_; + int switchTime_; + unsigned int w_, h_; + sf::IntRect rect_; + sf::Texture texture_; + sf::Sprite sprite_; + bool ticked(int deltaTime); + public: + Animation(); + ~Animation(); + Animation(const char* filename, int count, int switchTime); + sf::Sprite& next(int deltaTime); + }; + + class OneShotAnimation : Animation { + public: + OneShotAnimation(); + OneShotAnimation(const char* filename, int count, int switchTime); + bool finished(); + sf::Sprite& next(int deltaTime); + }; + + class BouncingAnimation : Animation{ + private: + bool up_; + public: + BouncingAnimation(); + BouncingAnimation(const char* filename, int count, int switchTime); + ~BouncingAnimation(); + sf::Sprite& next(int deltaTime); + }; +} +#endif // GRAPHICS_ANIMATION_H diff --git a/src/graphics/window.h b/src/graphics/window.h new file mode 100644 index 0000000..91e15c8 --- /dev/null +++ b/src/graphics/window.h @@ -0,0 +1,8 @@ +#ifndef WINDOW_H +#define WINDOW_H + +#include<SFML/Graphics.hpp> + +class Window () + +#endif //WINDOW_H |