Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

115 linhas
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. #include <lol/engine-internal.h>
  11. #if HAVE_EMSCRIPTEN_H
  12. # include <emscripten.h>
  13. #endif
  14. #include "lolgl.h"
  15. #if __CELLOS_LV2__
  16. # include "platform/ps3/ps3app.h"
  17. #elif _XBOX
  18. # include "platform/xbox/xboxapp.h"
  19. #elif __native_client__
  20. # include "platform/nacl/nacl-app.h"
  21. #elif __ANDROID__
  22. # include "platform/android/androidapp.h"
  23. #elif USE_SDL || USE_OLD_SDL
  24. # include "platform/sdl/sdlapp.h"
  25. # include "platform/sdl/sdlinput.h"
  26. #elif HAVE_GLES_2X
  27. # include "eglapp.h"
  28. #endif
  29. namespace lol
  30. {
  31. class ApplicationData
  32. {
  33. friend class Application;
  34. ApplicationData(char const *name, ivec2 resolution, float framerate)
  35. : app(name, resolution, framerate)
  36. { }
  37. #if __CELLOS_LV2__
  38. Ps3App app;
  39. #elif _XBOX
  40. XboxApp app;
  41. #elif __native_client__
  42. NaClApp app;
  43. #elif __ANDROID__
  44. AndroidApp app;
  45. #elif USE_SDL || USE_OLD_SDL
  46. SdlApp app;
  47. #elif HAVE_GLES_2X
  48. /* FIXME: this macro is only deactivated if we include "lolgl.h" */
  49. EglApp app;
  50. #else
  51. # error No application class available on this platform
  52. #endif
  53. };
  54. #if EMSCRIPTEN
  55. static Application *g_app;
  56. static void AppCallback()
  57. {
  58. g_app->Tick();
  59. }
  60. #endif
  61. /*
  62. * Public Application class
  63. */
  64. Application::Application(char const *name, ivec2 resolution, float framerate)
  65. {
  66. data = new ApplicationData(name, resolution, framerate);
  67. g_world.ExecLua("lua/init.lua");
  68. }
  69. bool Application::MustTick()
  70. {
  71. return !Ticker::Finished();
  72. }
  73. void Application::Tick()
  74. {
  75. data->app.Tick();
  76. }
  77. void Application::Run()
  78. {
  79. #if EMSCRIPTEN
  80. emscripten_set_main_loop(AppCallback, 0, 1);
  81. #else
  82. while (MustTick())
  83. Tick();
  84. #endif
  85. }
  86. void Application::ShowPointer(bool show)
  87. {
  88. data->app.ShowPointer(show);
  89. }
  90. Application::~Application()
  91. {
  92. delete data;
  93. }
  94. } /* namespace lol */