PolyCoreServices.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /*
  2. * CoreServices.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 3/13/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyCoreServices.h"
  10. using namespace Polycode;
  11. std::map<long, CoreServices*> CoreServices::instanceMap;
  12. CoreMutex *CoreServices::renderMutex = 0;
  13. CoreMutex *CoreServices::getRenderMutex() {
  14. if(renderMutex == NULL) {
  15. Logger::log("Creating render mutex...\n");
  16. renderMutex = getInstance()->getCore()->createMutex();
  17. }
  18. return renderMutex;
  19. }
  20. CoreServices* CoreServices::getInstance() {
  21. long threadID = getThreadID();
  22. CoreServices *instance;
  23. if(instanceMap.find(threadID) == instanceMap.end()) {
  24. Logger::log("Creating new core services instance...\n");
  25. instance = new CoreServices;
  26. instanceMap[threadID] = instance;
  27. } else {
  28. instance = instanceMap[threadID];
  29. }
  30. return instance;
  31. }
  32. MaterialManager *CoreServices::getMaterialManager() {
  33. return materialManager;
  34. }
  35. TimerManager *CoreServices::getTimerManager() {
  36. return timerManager;
  37. }
  38. FontManager *CoreServices::getFontManager() {
  39. return fontManager;
  40. }
  41. Config *CoreServices::getConfig() {
  42. return config;
  43. }
  44. void CoreServices::installModule(PolycodeModule *module) {
  45. modules.push_back(module);
  46. switch(module->getType()) {
  47. case PolycodeModule::TYPE_SHADER:
  48. // renderer->addShaderModule((ShaderModule*)module);
  49. resourceManager->addShaderModule((PolycodeShaderModule*) module);
  50. materialManager->addShaderModule((PolycodeShaderModule*) module);
  51. renderer->addShaderModule((PolycodeShaderModule*) module);
  52. break;
  53. }
  54. }
  55. CoreServices::CoreServices() : EventDispatcher() {
  56. resourceManager = new ResourceManager();
  57. config = new Config();
  58. materialManager = new MaterialManager();
  59. screenManager = new ScreenManager();
  60. addEventListener(screenManager, InputEvent::EVENT_MOUSEDOWN);
  61. addEventListener(screenManager, InputEvent::EVENT_MOUSEMOVE);
  62. addEventListener(screenManager, InputEvent::EVENT_MOUSEUP);
  63. addEventListener(screenManager, InputEvent::EVENT_MOUSEWHEEL_UP);
  64. addEventListener(screenManager, InputEvent::EVENT_MOUSEWHEEL_DOWN);
  65. addEventListener(screenManager, InputEvent::EVENT_KEYDOWN);
  66. addEventListener(screenManager, InputEvent::EVENT_KEYUP);
  67. sceneManager = new SceneManager();
  68. timerManager = new TimerManager();
  69. tweenManager = new TweenManager();
  70. soundManager = new SoundManager();
  71. fontManager = new FontManager();
  72. }
  73. CoreServices::~CoreServices() {
  74. delete materialManager;
  75. delete screenManager;
  76. delete sceneManager;
  77. delete timerManager;
  78. delete tweenManager;
  79. delete resourceManager;
  80. delete soundManager;
  81. }
  82. void CoreServices::setCore(Core *core) {
  83. this->core = core;
  84. core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
  85. core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEMOVE);
  86. core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEUP);
  87. core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_DOWN);
  88. core->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_UP);
  89. core->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
  90. core->getInput()->addEventListener(this, InputEvent::EVENT_KEYUP);
  91. }
  92. void CoreServices::handleEvent(Event *event) {
  93. if(event->getDispatcher() == core->getInput()) {
  94. InputEvent *inputEvent = (InputEvent*)event;
  95. switch(event->getEventCode()) {
  96. case InputEvent::EVENT_KEYDOWN:
  97. case InputEvent::EVENT_KEYUP:
  98. dispatchEvent(new InputEvent(inputEvent->key, inputEvent->charCode, inputEvent->timestamp), inputEvent->getEventCode());
  99. break;
  100. default:
  101. InputEvent *_inputEvent = new InputEvent(inputEvent->mousePosition, inputEvent->timestamp);
  102. _inputEvent->mouseButton = inputEvent->mouseButton;
  103. dispatchEvent(_inputEvent, inputEvent->getEventCode());
  104. break;
  105. }
  106. }
  107. }
  108. Core *CoreServices::getCore() {
  109. return core;
  110. }
  111. void CoreServices::setRenderer(Renderer *renderer) {
  112. this->renderer = renderer;
  113. }
  114. Renderer *CoreServices::getRenderer() {
  115. return renderer;
  116. }
  117. void CoreServices::Update(int elapsed) {
  118. timerManager->Update();
  119. tweenManager->Update();
  120. materialManager->Update(elapsed);
  121. renderer->setPerspectiveMode();
  122. sceneManager->UpdateVirtual();
  123. renderer->clearScreen();
  124. sceneManager->Update();
  125. // renderer->setOrthoMode();
  126. screenManager->Update();
  127. }
  128. SoundManager *CoreServices::getSoundManager() {
  129. return soundManager;
  130. }
  131. ScreenManager *CoreServices::getScreenManager() {
  132. return screenManager;
  133. }
  134. SceneManager *CoreServices::getSceneManager() {
  135. return sceneManager;
  136. }
  137. TweenManager *CoreServices::getTweenManager() {
  138. return tweenManager;
  139. }
  140. ResourceManager *CoreServices::getResourceManager() {
  141. return resourceManager;
  142. }