You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
2.1 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://www.wtfpl.net/ for more details.
  9. //
  10. #if HAVE_CONFIG_H
  11. # include "config.h"
  12. #endif
  13. #if HAVE_EMSCRIPTEN_H
  14. # include <emscripten.h>
  15. #endif
  16. #include "core.h"
  17. #include "lolgl.h"
  18. #if __CELLOS_LV2__
  19. # include "platform/ps3/ps3app.h"
  20. #elif _XBOX
  21. # include "platform/xbox/xboxapp.h"
  22. #elif __native_client__
  23. # include "platform/nacl/nacl-app.h"
  24. #elif __ANDROID__
  25. # include "platform/android/androidapp.h"
  26. #elif USE_SDL
  27. # include "platform/sdl/sdlapp.h"
  28. # include "platform/sdl/sdlinput.h"
  29. #elif HAVE_GLES_2X
  30. # include "eglapp.h"
  31. #endif
  32. using namespace std;
  33. namespace lol
  34. {
  35. class ApplicationData
  36. {
  37. friend class Application;
  38. ApplicationData(char const *name, ivec2 resolution, float framerate)
  39. : app(name, resolution, framerate)
  40. { }
  41. #if __CELLOS_LV2__
  42. Ps3App app;
  43. #elif _XBOX
  44. XboxApp app;
  45. #elif __native_client__
  46. NaClApp app;
  47. #elif __ANDROID__
  48. AndroidApp app;
  49. #elif USE_SDL
  50. SdlApp app;
  51. #elif HAVE_GLES_2X
  52. /* FIXME: this macro is only deactivated if we include "lolgl.h" */
  53. EglApp app;
  54. #else
  55. # error No application class available on this platform
  56. #endif
  57. };
  58. #if EMSCRIPTEN
  59. static Application *g_app;
  60. static void AppCallback()
  61. {
  62. g_app->Tick();
  63. }
  64. #endif
  65. /*
  66. * Public Application class
  67. */
  68. Application::Application(char const *name, ivec2 resolution, float framerate)
  69. {
  70. data = new ApplicationData(name, resolution, framerate);
  71. g_world.ExecLua("lua/init.lua");
  72. }
  73. bool Application::MustTick()
  74. {
  75. return !Ticker::Finished();
  76. }
  77. void Application::Tick()
  78. {
  79. data->app.Tick();
  80. }
  81. void Application::Run()
  82. {
  83. #if EMSCRIPTEN
  84. emscripten_set_main_loop(AppCallback, 0, 1);
  85. #else
  86. while (MustTick())
  87. Tick();
  88. #endif
  89. }
  90. void Application::ShowPointer(bool show)
  91. {
  92. data->app.ShowPointer(show);
  93. }
  94. Application::~Application()
  95. {
  96. delete data;
  97. }
  98. } /* namespace lol */