A bit of refactor to put apply in Animation where it belongs.
This commit is contained in:
parent
102c8c36d5
commit
d60e1af6df
10 changed files with 32 additions and 31 deletions
|
|
@ -102,6 +102,23 @@ namespace components {
|
||||||
scale_out.x *= -1;
|
scale_out.x *= -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Animation::apply(sf::Sprite& sprite, sf::Vector2f pos) {
|
||||||
|
sf::IntRect rect{{0,0}, {frame_width, frame_height}};
|
||||||
|
sf::Vector2f scale{min_x, min_y};
|
||||||
|
|
||||||
|
step(scale, pos, rect);
|
||||||
|
|
||||||
|
sprite.setTextureRect(rect);
|
||||||
|
sprite.setPosition(pos);
|
||||||
|
|
||||||
|
// BUG: make this an option: apply_scale, apply_position and ranges for x y
|
||||||
|
if(scaled) {
|
||||||
|
sprite.setScale(scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
return playing;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace animation {
|
namespace animation {
|
||||||
|
|
@ -111,23 +128,6 @@ namespace animation {
|
||||||
static AnimationManager MGR;
|
static AnimationManager MGR;
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
|
|
||||||
bool apply(Animation& anim, sf::Sprite& sprite, sf::Vector2f pos) {
|
|
||||||
sf::IntRect rect{{0,0}, {anim.frame_width, anim.frame_height}};
|
|
||||||
sf::Vector2f scale{anim.min_x, anim.min_y};
|
|
||||||
|
|
||||||
anim.step(scale, pos, rect);
|
|
||||||
|
|
||||||
sprite.setTextureRect(rect);
|
|
||||||
sprite.setPosition(pos);
|
|
||||||
|
|
||||||
// BUG: make this an option: apply_scale, apply_position and ranges for x y
|
|
||||||
if(anim.scaled) {
|
|
||||||
sprite.setScale(scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
return anim.playing;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rotate(sf::Sprite& target, float degrees) {
|
void rotate(sf::Sprite& target, float degrees) {
|
||||||
target.rotate(sf::degrees(degrees));
|
target.rotate(sf::degrees(degrees));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ namespace animation {
|
||||||
std::unordered_map<std::string, components::Animation> animations;
|
std::unordered_map<std::string, components::Animation> animations;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool apply(components::Animation& anim, sf::Sprite& target, sf::Vector2f pos);
|
|
||||||
void rotate(sf::Sprite& target, float degrees);
|
void rotate(sf::Sprite& target, float degrees);
|
||||||
void center(sf::Sprite& target, sf::Vector2f pos);
|
void center(sf::Sprite& target, sf::Vector2f pos);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -292,16 +292,16 @@
|
||||||
"test_zoom": {
|
"test_zoom": {
|
||||||
"_type": "Animation",
|
"_type": "Animation",
|
||||||
"easing": 6,
|
"easing": 6,
|
||||||
"motion": 5,
|
"motion": 1,
|
||||||
"ease_rate": 0.5,
|
"ease_rate": 0.5,
|
||||||
"min_x": 1.0,
|
"min_x": -10.0,
|
||||||
"min_y": 1.0,
|
"min_y": -10.0,
|
||||||
"max_x": 1.2,
|
"max_x": 10.0,
|
||||||
"max_y": 1.2,
|
"max_y": 10.0,
|
||||||
"simple": true,
|
"simple": true,
|
||||||
"frames": 1,
|
"frames": 1,
|
||||||
"speed": 0.01,
|
"speed": 0.01,
|
||||||
"scaled": true,
|
"scaled": false,
|
||||||
"stationary": true,
|
"stationary": true,
|
||||||
"toggled": false,
|
"toggled": false,
|
||||||
"flipped": false,
|
"flipped": false,
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ namespace boss {
|
||||||
rect.size.x, rect.size.y);
|
rect.size.x, rect.size.y);
|
||||||
|
|
||||||
sf::View zoom{pos,
|
sf::View zoom{pos,
|
||||||
{float(cell.w * 2), float(cell.h * 2)}};
|
{BOSS_VIEW_WIDTH/2, BOSS_VIEW_HEIGHT/2}};
|
||||||
|
|
||||||
if($zoom_anim.scaled) {
|
if($zoom_anim.scaled) {
|
||||||
zoom.zoom(scale.x);
|
zoom.zoom(scale.x);
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "point.hpp"
|
#include "point.hpp"
|
||||||
#include <SFML/Graphics/Rect.hpp>
|
#include <SFML/Graphics/Rect.hpp>
|
||||||
#include <SFML/Graphics/Shader.hpp>
|
#include <SFML/Graphics/Shader.hpp>
|
||||||
|
#include <SFML/Graphics/Sprite.hpp>
|
||||||
#include <SFML/System/Vector2.hpp>
|
#include <SFML/System/Vector2.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
@ -138,6 +139,7 @@ namespace components {
|
||||||
int frame_width = -1;
|
int frame_width = -1;
|
||||||
int frame_height = -1;
|
int frame_height = -1;
|
||||||
|
|
||||||
|
bool apply(sf::Sprite& target, sf::Vector2f pos);
|
||||||
void play();
|
void play();
|
||||||
float twitching();
|
float twitching();
|
||||||
void step(sf::Vector2f& scale_out, sf::Vector2f& pos_out, sf::IntRect& rect_out);
|
void step(sf::Vector2f& scale_out, sf::Vector2f& pos_out, sf::IntRect& rect_out);
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ namespace gui {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainUI::render_hands() {
|
void MainUI::render_hands() {
|
||||||
if(animation::apply($hand_anim, *$hand.sprite, {0,0})) {
|
if($hand_anim.apply(*$hand.sprite, {0,0})) {
|
||||||
$hand.sprite->setPosition({RAY_VIEW_X, RAY_VIEW_Y});
|
$hand.sprite->setPosition({RAY_VIEW_X, RAY_VIEW_Y});
|
||||||
$window.draw(*$hand.sprite);
|
$window.draw(*$hand.sprite);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ namespace gui {
|
||||||
|
|
||||||
void UI::OPENING(Event ev) {
|
void UI::OPENING(Event ev) {
|
||||||
if(ev == Event::TICK) {
|
if(ev == Event::TICK) {
|
||||||
if(!animation::apply($ritual_anim, *$ritual_ui.sprite, {0,0})) {
|
if(!$ritual_anim.apply(*$ritual_ui.sprite, {0,0})) {
|
||||||
state(State::OPENED);
|
state(State::OPENED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,13 +100,13 @@ namespace scene {
|
||||||
void Engine::play_animations() {
|
void Engine::play_animations() {
|
||||||
for(auto& fixture : $fixtures) {
|
for(auto& fixture : $fixtures) {
|
||||||
if(fixture.anim.playing) {
|
if(fixture.anim.playing) {
|
||||||
animation::apply(fixture.anim, *fixture.st.sprite, fixture.pos);
|
fixture.anim.apply(*fixture.st.sprite, fixture.pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(auto& actor : $actors) {
|
for(auto& actor : $actors) {
|
||||||
if(actor.anim.playing) {
|
if(actor.anim.playing) {
|
||||||
animation::apply(actor.anim, *actor.st.sprite, actor.pos);
|
actor.anim.apply(*actor.st.sprite, actor.pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ TEST_CASE("animation utility API", "[animation]") {
|
||||||
|
|
||||||
anim.play();
|
anim.play();
|
||||||
|
|
||||||
while(animation::apply(anim, *blanket.sprite, {0,0})) {
|
while(anim.apply(*blanket.sprite, {0,0})) {
|
||||||
fmt::println("animation: {}", anim.subframe);
|
fmt::println("animation: {}", anim.subframe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ struct AnimationState {
|
||||||
}
|
}
|
||||||
|
|
||||||
void apply(textures::SpriteTexture& st) {
|
void apply(textures::SpriteTexture& st) {
|
||||||
animation::apply(anim, *st.sprite, pos);
|
anim.apply(*st.sprite, pos);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue