Now have a timer for animations that does ticks with deltatime...maybe it works.
This commit is contained in:
parent
c0f69ed026
commit
b7394f832d
5 changed files with 121 additions and 6 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue