|
|
@@ -7,12 +7,10 @@
|
|
|
#include "input/Input.h"
|
|
|
|
|
|
using namespace WalrusRPG::Graphics;
|
|
|
-using namespace WalrusRPG::States;
|
|
|
using namespace WalrusRPG::Timing;
|
|
|
using WalrusRPG::Input::Key;
|
|
|
using WalrusRPG::Input::KeyState;
|
|
|
-
|
|
|
-#define STATEMACHINE WalrusRPG::StateMachine
|
|
|
+using WalrusRPG::States::State;
|
|
|
|
|
|
namespace
|
|
|
{
|
|
|
@@ -54,74 +52,82 @@ namespace
|
|
|
draw_button(48, 44, key_get_state(Key::K_B));
|
|
|
draw_button(56, 36, key_get_state(Key::K_A));
|
|
|
}
|
|
|
-} /* namespace */
|
|
|
+
|
|
|
+} /* namespace */
|
|
|
|
|
|
-STATEMACHINE::StateMachine(State *state)
|
|
|
+namespace WalrusRPG{namespace StateMachine
|
|
|
{
|
|
|
- push(state);
|
|
|
-}
|
|
|
|
|
|
-STATEMACHINE::~StateMachine()
|
|
|
-{
|
|
|
- while (!stack.empty())
|
|
|
- pop();
|
|
|
-}
|
|
|
+ static tinystl::vector<WalrusRPG::States::State *> stack;
|
|
|
|
|
|
-void STATEMACHINE::push(State *state)
|
|
|
-{
|
|
|
- stack.push_back(state);
|
|
|
-}
|
|
|
+ void init()
|
|
|
+ {
|
|
|
|
|
|
-void STATEMACHINE::pop()
|
|
|
-{
|
|
|
- delete stack.back();
|
|
|
- stack.pop_back();
|
|
|
-}
|
|
|
+ }
|
|
|
|
|
|
-void STATEMACHINE::run()
|
|
|
-{
|
|
|
- const unsigned loop_time = TIMER_FREQ / 60;
|
|
|
- unsigned loop_next = loop_time;
|
|
|
- unsigned last_update = 0, update_stamp, update_time;
|
|
|
- unsigned last_frame = 0, frame_stamp, frame_time;
|
|
|
+ void deinit()
|
|
|
+ {
|
|
|
+ stack.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ void push(State *state)
|
|
|
+ {
|
|
|
+ stack.push_back(state);
|
|
|
+ }
|
|
|
|
|
|
- while (!stack.empty())
|
|
|
+ void pop()
|
|
|
{
|
|
|
- update_stamp = Timing::gettime();
|
|
|
- update_time = update_stamp - last_update;
|
|
|
- Input::key_poll();
|
|
|
- stack.back()->update(100 * update_time / TIMER_FREQ);
|
|
|
- last_update = update_stamp;
|
|
|
+ delete stack.back();
|
|
|
+ stack.pop_back();
|
|
|
+ }
|
|
|
+
|
|
|
+ void run()
|
|
|
+ {
|
|
|
+ const unsigned loop_time = TIMER_FREQ / 60;
|
|
|
+ unsigned loop_next = loop_time;
|
|
|
+ unsigned last_update = 0, update_stamp, update_time;
|
|
|
+ unsigned last_frame = 0, frame_stamp, frame_time;
|
|
|
|
|
|
- if (Timing::gettime() < loop_next)
|
|
|
+ while (!stack.empty())
|
|
|
{
|
|
|
- frame_stamp = Timing::gettime();
|
|
|
- frame_time = frame_stamp - last_frame;
|
|
|
- Graphics::frame_begin();
|
|
|
- stack.back()->render(100 * frame_time / TIMER_FREQ);
|
|
|
- last_frame = frame_stamp;
|
|
|
-
|
|
|
- Text::print_format(0, 0, "WalrusRPG test build %s", git_version);
|
|
|
- if (frame_time != 0 && update_time != 0)
|
|
|
+ update_stamp = Timing::gettime();
|
|
|
+ update_time = update_stamp - last_update;
|
|
|
+ Input::key_poll();
|
|
|
+ stack.back()->update(100 * update_time / TIMER_FREQ);
|
|
|
+ last_update = update_stamp;
|
|
|
+
|
|
|
+ if (Timing::gettime() < loop_next)
|
|
|
{
|
|
|
- Text::print_format(0, 240 - 8, "%ufps, %uups", TIMER_FREQ / frame_time,
|
|
|
- TIMER_FREQ / update_time);
|
|
|
+ frame_stamp = Timing::gettime();
|
|
|
+ frame_time = frame_stamp - last_frame;
|
|
|
+ Graphics::frame_begin();
|
|
|
+ stack.back()->render(100 * frame_time / TIMER_FREQ);
|
|
|
+ last_frame = frame_stamp;
|
|
|
+
|
|
|
+ // Text::print_format(0, 0, "WalrusRPG test build %s", git_version);
|
|
|
+ if (frame_time != 0 && update_time != 0)
|
|
|
+ {
|
|
|
+ Text::print_format(0, 240 - 8, "%ufps, %uups", TIMER_FREQ / frame_time,
|
|
|
+ TIMER_FREQ / update_time);
|
|
|
+ }
|
|
|
+ // draw_buttons();
|
|
|
+ Graphics::frame_end();
|
|
|
}
|
|
|
- draw_buttons();
|
|
|
- Graphics::frame_end();
|
|
|
- }
|
|
|
|
|
|
- if (Input::key_pressed(Key::K_SELECT))
|
|
|
- {
|
|
|
- while (Input::key_down(Key::K_SELECT))
|
|
|
- Input::key_poll();
|
|
|
- this->pop();
|
|
|
- }
|
|
|
+ if (Input::key_pressed(Key::K_SELECT))
|
|
|
+ {
|
|
|
+ while (Input::key_down(Key::K_SELECT))
|
|
|
+ Input::key_poll();
|
|
|
+ StateMachine::pop();
|
|
|
+ }
|
|
|
|
|
|
-#ifdef ACTIVE_WAIT
|
|
|
- while (Timing::gettime() < loop_next)
|
|
|
- ;
|
|
|
-#endif
|
|
|
- loop_next += loop_time;
|
|
|
+ #ifdef ACTIVE_WAIT
|
|
|
+ while (Timing::gettime() < loop_next)
|
|
|
+ ;
|
|
|
+ #endif
|
|
|
+ loop_next += loop_time;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
+}} /* namespace StateMachine */
|
|
|
+
|
|
|
+
|