Now have a timer for animations that does ticks with deltatime...maybe it works.

This commit is contained in:
Zed A. Shaw 2026-01-27 12:52:33 -05:00
parent c0f69ed026
commit b7394f832d
5 changed files with 121 additions and 6 deletions

View file

@ -1,3 +1,4 @@
#define FSM_DEBUG 1
#include "sound.hpp"
#include "ai.hpp"
#include "animation.hpp"
@ -11,6 +12,9 @@
#include <guecs/ui.hpp>
#include "gui/event_router.hpp"
#include "gui/guecstra.hpp"
#include "animate2.hpp"
bool YES_SYNC=true;
namespace animator {
struct UI {
@ -53,6 +57,7 @@ namespace animator {
enum class State {
START=__LINE__,
ANIMATE=__LINE__,
END=__LINE__,
};
@ -63,20 +68,41 @@ namespace animator {
void init(const std::string &sprite_name) {
$ui.init(sprite_name);
$window.setVerticalSyncEnabled(VSYNC);
if(FRAME_LIMIT) $window.setFramerateLimit(FRAME_LIMIT);
if(YES_SYNC) {
$window.setVerticalSyncEnabled(VSYNC);
if(FRAME_LIMIT) $window.setFramerateLimit(FRAME_LIMIT);
}
$window.setPosition({0,0});
}
void event(game::Event ev, std::any data={}) {
switch($state) {
FSM_STATE(State, START, ev);
FSM_STATE(State, ANIMATE, ev);
FSM_STATE(State, END, ev);
}
}
void START(game::Event ev) {
state(State::START);
switch(ev) {
case game::Event::TICK:
state(State::ANIMATE);
break;
default:
state(State::START);
}
}
void ANIMATE(game::Event ev) {
switch(ev) {
case game::Event::TICK:
// stuff
break;
default:
state(State::START);
}
}
void END(game::Event ev) {
@ -132,8 +158,20 @@ int main(int argc, char* argv[]) {
animator::FSM main;
main.init(argv[1]);
animate2::Timer timer;
timer.start();
while(main.active()) {
timer.begin();
main.render();
auto [ticks, alpha] = timer.commit();
fmt::println("TICK: {}, alpha: {}", ticks, alpha);
for(int i = 0; i < ticks; i++) {
main.event(game::Event::TICK, {});
}
// do something with alpha....
main.handle_keyboard_mouse();
}