aboutsummaryrefslogtreecommitdiff
path: root/examples/state_machine/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/state_machine/main.cpp')
-rw-r--r--examples/state_machine/main.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/examples/state_machine/main.cpp b/examples/state_machine/main.cpp
new file mode 100644
index 0000000..0b7e191
--- /dev/null
+++ b/examples/state_machine/main.cpp
@@ -0,0 +1,102 @@
+#include <iostream>
+
+#include "libjin/jin.h"
+
+using namespace std;
+using namespace JinEngine::AI;
+using namespace JinEngine::Game;
+using namespace JinEngine::Input;
+using namespace JinEngine::Graphics;
+using namespace JinEngine::Graphics::Particles;
+using namespace JinEngine::Filesystem;
+using namespace JinEngine::Time;
+
+ParticleSystem* p;
+StateMachine sm;
+Timer timer;
+Timer::Handler* hnd;
+void onLoad()
+{
+ sm.addState("Run");
+ sm.addState("Idle");
+ sm.addState("Sleep");
+ sm.addState("Jump");
+ sm.addParametert("run");
+ sm.addParameterb("idle");
+ /*sm.addTransitionb("Empty", "Idle", "run", StateMachine::BOOL_IS, true);
+ sm.addTransitionb("Idle", "Run", "run", StateMachine::BOOL_IS, false);
+ */
+ sm.addTransitiont("Empty", "Idle", "run");
+ sm.addTransitiont("Idle", "Run", "run");
+ sm.setEnterListener([](const string& state, void* p) {
+ cout << "Enter: " << state << endl;
+ });
+ sm.addEnterListener("Run", [](void* p) {
+ cout << "A Run state enter callback" << endl;
+ });
+ sm.addTranslateListener("Idle", "Run", [](void* p) {
+ cout << "From Idle to Run" << endl;
+ });
+ Window::get()->show();
+ hnd = timer.every(500, [](void*) {
+ cout << sm.getCurrentState() << endl;
+ }, NULL);
+ timer.after(2500, [](void*) {
+ //sm.setParameterb("run", true);
+ sm.setParametert("run");
+ //timer.cancel(hnd);
+ }, NULL);
+ timer.after(5000, [](void*) {
+ sm.setParametert("run");
+ //sm.setParameterb("run", false);
+ }, NULL);
+}
+
+void onEvent(Event* e)
+{
+ static Application* Application = Application::get();
+ if (e->type == EventType::QUIT)
+ Application->stop();
+}
+
+void onUpdate(int ms)
+{
+ timer.update(ms);
+ sm.update();
+}
+
+void onDraw()
+{
+}
+
+int main(int argc, char* argv[])
+{
+ Application* Application = Application::get();
+ Application::Setting setting;
+ setting.loader = onLoad;
+ setting.eventHandler = onEvent;
+ setting.updater = onUpdate;
+ setting.drawer = onDraw;
+ Application->init(&setting);
+
+ AssetDatabase::get()->mount(".");
+
+ Window* wnd = Window::get();
+ Window::Setting wndSetting;
+ wndSetting.width = 600;
+ wndSetting.height = 512;
+ wndSetting.title = "Jin v0.1.1";
+ wndSetting.fps = 60;
+ wndSetting.vsync = false;
+ wndSetting.fullscreen = false;
+ wndSetting.resizable = false;
+ wndSetting.icon = ".";
+ wnd->init(&wndSetting);
+
+ Application->run();
+
+ Application->quit();
+ wnd->quit();
+
+ return 0;
+} \ No newline at end of file