diff options
Diffstat (limited to 'examples/animation/main.cpp')
-rw-r--r-- | examples/animation/main.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/examples/animation/main.cpp b/examples/animation/main.cpp new file mode 100644 index 0000000..033e499 --- /dev/null +++ b/examples/animation/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::Math; +using namespace JinEngine::Input; +using namespace JinEngine::Graphics; +using namespace JinEngine::Graphics::Shaders; +using namespace JinEngine::Graphics::Particles; +using namespace JinEngine::Graphics::Animations; +using namespace JinEngine::Filesystem; +using namespace JinEngine::Time; + +Timer timer; +Timer::Handler* hnd; +Texture* tex; +Shader* shader; +Animation anim; +const char* shader_code = R"( +#VERTEX_SHADER +Vertex vert(Vertex v) +{ + return v; +} +#END_VERTEX_SHADER +#FRAGMENT_SHADER +Color frag(Color col, Texture tex, Vertex v) +{ + Color c = texel(tex, v.uv); + return c * col; +} +#END_FRAGMENT_SHADER +)"; +const float Pi = 3.14f; +void onLoad() +{ + tex = Texture::createTexture("anim.png"); + shader = Shader::createShader(shader_code); + SpriteSheet ss = SpriteSheet(tex); + vector<Sprite*> frames = ss.createSprites(1, 19, 246, 238, Sprite::Origin::BottomCenter); + anim.addFrames(frames); + anim.setSpeed(0.05); +} + +void onEvent(Event* e) +{ + static Application* Application = Application::get(); + if (e->type == EventType::QUIT) + Application->stop(); +} + +void onUpdate(int ms) +{ + anim.update(ms / 1000.f); + timer.update(ms); +} + +void onDraw() +{ + shader->use(); + Mouse* m = Mouse::get(); + int x, y; + m->getState(&x, &y); + anim.render(x, y, 1, 1, 0); + shader->unuse(); +} + +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); + wnd->show(); + + Application->run(); + + Application->quit(); + wnd->quit(); + + return 0; +}
\ No newline at end of file |