Animations are working better in the raycaster but still need refinement.

This commit is contained in:
Zed A. Shaw 2026-02-24 13:42:29 -05:00
parent 81a282d544
commit cded8a937e
3 changed files with 39 additions and 36 deletions

View file

@ -50,6 +50,7 @@ namespace animation {
dbc::check(sequence.current < $frame_rects.size(), "current frame past $frame_rects"); dbc::check(sequence.current < $frame_rects.size(), "current frame past $frame_rects");
// NOTE: pos is not updated yet // NOTE: pos is not updated yet
auto& rect = $frame_rects.at(sequence.current); auto& rect = $frame_rects.at(sequence.current);
fmt::println("setting texture rect: {},{}", rect.position.x, rect.position.y);
sprite.setTextureRect(rect); sprite.setTextureRect(rect);
} }

View file

@ -308,17 +308,17 @@
}, },
"transforms": { "transforms": {
"basic": { "basic": {
"min_x": 1.0, "min_x": 0.9,
"min_y": 1.0, "min_y": 0.9,
"max_x": 1.0, "max_x": 1.0,
"max_y": 1.0, "max_y": 1.0,
"flipped": false, "flipped": false,
"scaled": false, "scaled": true,
"toggled": false, "toggled": false,
"looped": false, "looped": true,
"relative": false, "relative": false,
"easing": "none", "easing": "sine",
"motion": "move_none" "motion": "move_rush"
} }
}, },
"forms": { "forms": {
@ -337,21 +337,21 @@
"frame_height": 256 "frame_height": 256
}, },
"sequences": { "sequences": {
"idle": {"frames": [0], "durations": [5] } "idle": {"frames": [0], "durations": [20] }
}, },
"transforms": { "transforms": {
"basic": { "basic": {
"min_x": 1.0, "min_x": 0.9,
"min_y": 1.0, "min_y": 0.9,
"max_x": 1.0, "max_x": 1.0,
"max_y": 1.0, "max_y": 1.0,
"flipped": false, "flipped": false,
"scaled": false, "scaled": true,
"toggled": false, "toggled": false,
"looped": false, "looped": true,
"relative": false, "relative": false,
"easing": "none", "easing": "sine",
"motion": "move_none" "motion": "move_rush"
} }
}, },
"forms": { "forms": {
@ -374,17 +374,17 @@
}, },
"transforms": { "transforms": {
"basic": { "basic": {
"min_x": 1.0, "min_x": 0.9,
"min_y": 1.0, "min_y": 0.9,
"max_x": 1.0, "max_x": 1.0,
"max_y": 1.0, "max_y": 1.0,
"flipped": false, "flipped": false,
"scaled": false, "scaled": true,
"toggled": false, "toggled": false,
"looped": false, "looped": true,
"relative": false, "relative": false,
"easing": "none", "easing": "sine",
"motion": "move_none" "motion": "move_rush"
} }
}, },
"forms": { "forms": {
@ -407,17 +407,17 @@
}, },
"transforms": { "transforms": {
"basic": { "basic": {
"min_x": 1.0, "min_x": 0.9,
"min_y": 1.0, "min_y": 0.9,
"max_x": 1.0, "max_x": 1.0,
"max_y": 1.0, "max_y": 1.0,
"flipped": false, "flipped": false,
"scaled": false, "scaled": true,
"toggled": false, "toggled": false,
"looped": false, "looped": true,
"relative": false, "relative": false,
"easing": "none", "easing": "sine",
"motion": "move_none" "motion": "move_rush"
} }
}, },
"forms": { "forms": {
@ -440,17 +440,17 @@
}, },
"transforms": { "transforms": {
"basic": { "basic": {
"min_x": 1.0, "min_x": 0.9,
"min_y": 1.0, "min_y": 0.9,
"max_x": 1.0, "max_x": 1.0,
"max_y": 1.0, "max_y": 1.0,
"flipped": false, "flipped": false,
"scaled": false, "scaled": true,
"toggled": false, "toggled": false,
"looped": false, "looped": true,
"relative": false, "relative": false,
"easing": "none", "easing": "sine",
"motion": "move_none" "motion": "move_rush"
} }
}, },
"forms": { "forms": {

View file

@ -101,17 +101,22 @@ void Raycaster::apply_sprite_effect(shared_ptr<sf::Shader> effect, float width,
effect->setUniform("u_resolution", u_resolution); effect->setUniform("u_resolution", u_resolution);
} }
inline void step_animation(DinkyECS::World& world, DinkyECS::Entity entity, sf::Sprite& sprite, sf::Vector2f& position, sf::Vector2f& scale) { inline void step_animation(DinkyECS::World& world, DinkyECS::Entity entity, sf::Sprite& sprite, sf::Vector2f& position, sf::Vector2f& scale, sf::IntRect& in_texture, sf::Vector2f& origin) {
auto anim = world.get_if<animation::Animation>(entity); auto anim = world.get_if<animation::Animation>(entity);
if(anim != nullptr && anim->playing) { if(anim != nullptr && anim->playing) {
anim->update(); anim->update();
anim->apply(sprite); anim->apply(sprite);
anim->motion(sprite, position, scale); anim->motion(sprite, position, scale);
auto& old_rect = sprite.getTextureRect();
in_texture.position.x += old_rect.position.x;
} }
sprite.setScale(scale); sprite.setScale(scale);
sprite.setPosition(position); sprite.setPosition(position);
sprite.setOrigin(origin);
sprite.setTextureRect(in_texture);
} }
@ -216,10 +221,7 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
effect->setUniform("darkness", level); effect->setUniform("darkness", level);
} }
step_animation(*world, rec.entity, *sf_sprite, position, scale); step_animation(*world, rec.entity, *sf_sprite, position, scale, in_texture, origin);
sf_sprite->setOrigin(origin);
sf_sprite->setTextureRect(in_texture);
target.draw(*sf_sprite, effect.get()); target.draw(*sf_sprite, effect.get());
} }