diff options
author | chai <chaifix@163.com> | 2018-11-05 07:33:41 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-11-05 07:33:41 +0800 |
commit | 1d1210d7932b287d66e27157701b92df764528cb (patch) | |
tree | 0f6ff1178abb3eec2976cfdee80e201283d949b5 /examples/state_machine/main.cpp | |
parent | 91641bccdf744e0dc29f015fbffc64be46d2ad2c (diff) |
+状态机测试代码
Diffstat (limited to 'examples/state_machine/main.cpp')
-rw-r--r-- | examples/state_machine/main.cpp | 102 |
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 |