PolyScreenManager.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * ScreenManager.cpp
  3. * TAU
  4. *
  5. * Created by Ivan Safrin on 3/15/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyScreenManager.h"
  10. using namespace Polycode;
  11. ScreenManager::ScreenManager() : EventDispatcher() {
  12. }
  13. ScreenManager::~ScreenManager() {
  14. }
  15. void ScreenManager::removeScreen(Screen *screen) {
  16. for(int i=0;i<screens.size();i++) {
  17. if(screens[i] == screen) {
  18. screens.erase(screens.begin()+i);
  19. delete screen;
  20. }
  21. }
  22. }
  23. void ScreenManager::addScreen(Screen *screen) {
  24. screen->setRenderer(CoreServices::getInstance()->getRenderer());
  25. screens.push_back(screen);
  26. }
  27. void ScreenManager::handleEvent(Event *event) {
  28. // if(event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {
  29. InputEvent *inputEvent = (InputEvent*)event;
  30. for(int i=0;i<screens.size();i++) {
  31. screens[i]->handleInputEvent(inputEvent);
  32. }
  33. // }
  34. }
  35. /*
  36. Screen *ScreenManager::createScreen(int screenType) {
  37. Screen *screen;
  38. switch(screenType) {
  39. case REGULAR_SCREEN:
  40. screen = new Screen();
  41. break;
  42. case PHYSICS_SCREEN:
  43. screen = new PhysicsScreen();
  44. break;
  45. }
  46. screen->setRenderer(CoreServices::getInstance()->getRenderer());
  47. screens.push_back(screen);
  48. return screen;
  49. }
  50. */
  51. void ScreenManager::Update() {
  52. Renderer *renderer = CoreServices::getInstance()->getRenderer();
  53. for(int i=0;i<screens.size();i++) {
  54. if(screens[i]->enabled) {
  55. if(!screens[i]->usesNormalizedCoordinates()) {
  56. renderer->setOrthoMode(renderer->getXRes(), renderer->getYRes());
  57. } else {
  58. float yCoordinateSize = screens[i]->getYCoordinateSize();
  59. float ratio = ((float)renderer->getXRes())/((float)renderer->getYRes());
  60. renderer->setOrthoMode(ratio*yCoordinateSize, yCoordinateSize);
  61. }
  62. if(screens[i]->hasFilterShader()) {
  63. screens[i]->drawFilter();
  64. } else {
  65. screens[i]->Render();
  66. }
  67. }
  68. }
  69. }