Decided that it's better to adjust the ease_rate manually/visually rather than try to math it. That's what the animator tool is for.

This commit is contained in:
Zed A. Shaw 2026-01-31 13:05:56 -05:00
parent ca335d21e5
commit 7d79e75651
2 changed files with 11 additions and 6 deletions

View file

@ -4,8 +4,12 @@
#include "dbc.hpp"
#include "rand.hpp"
constexpr float SUB_FRAME_SENSITIVITY = 0.999f;
namespace animate2 {
std::vector<sf::IntRect> Animate2::calc_frames() {
dbc::check($sequence.frames.size() == $sequence.durations.size(), "$sequence.frames.size() != $sequence.durations.size()");
std::vector<sf::IntRect> frames;
for(int frame_i : $sequence.frames) {
@ -54,10 +58,11 @@ namespace animate2 {
if($sequence.timer.getElapsedTime() >= duration) {
$sequence.timer.restart();
$sequence.current++;
if($sequence.subframe > 0.9) $sequence.subframe = 0.0f;
if($sequence.subframe > SUB_FRAME_SENSITIVITY) $sequence.subframe = 0.0f;
frame_change = true;
} else {
$sequence.subframe = std::lerp($sequence.subframe, 1.0, $sequence.timer.DELTA * $transform.ease_rate);
fmt::println("subframe: {}, alpha: {}", $sequence.subframe, $sequence.timer.alpha);
}

View file

@ -156,8 +156,8 @@ animate2::Sheet sheet{
};
animate2::Sequence sequence{
.frames{0,1,0,1},
.durations{500ms, 266ms, 100ms, 100ms}
.frames{0,1},
.durations{800ms, 200ms}
};
animate2::Transform scale_tr{
@ -167,12 +167,12 @@ animate2::Transform scale_tr{
.max_y{0.8f},
.simple{false},
.flipped{false},
.ease_rate{1.0f/0.2f},
.ease_rate{4.0f},
.scaled{true},
.toggled{false},
.looped{true},
.looped{false},
.easing = ease2::in_out_back,
.motion = ease2::scale_only,
.motion = ease2::move_rush,
};
animate2::Transform move_tr{