MapWindow.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "MapWindow.h"
  2. #include <TextFeld.h>
  3. #include "Globals.h"
  4. MapWindow::MapWindow()
  5. : OptionsWindow([this]() { options->addStyle(Fenster::Style::Sichtbar); }),
  6. map(0)
  7. {
  8. setTitel("Map");
  9. setClosingMe([this](void* p, void* o, Framework::MausEreignis me) {
  10. if (me.id == Framework::ME_RLinks)
  11. {
  12. setVisibility(0);
  13. }
  14. return 1;
  15. });
  16. setSize(500, 500);
  17. setPosition(uiFactory.initParam.bildschirm->getBackBufferSize().x / 2
  18. - getBreite() / 2,
  19. uiFactory.initParam.bildschirm->getBackBufferSize().y / 2
  20. - getHeight() / 2);
  21. setKMin(200, 200);
  22. options = new MapOptions();
  23. options->getThis(); // increase reference counter outside of dynamic_cast to
  24. // avoid compiler warning
  25. uiFactory.initParam.bildschirm->addMember(
  26. dynamic_cast<Zeichnung*>(options));
  27. }
  28. MapWindow::~MapWindow()
  29. {
  30. options->release();
  31. }
  32. void MapWindow::setVisibility(bool visible)
  33. {
  34. if ((visible && !map) || (!visible && map))
  35. {
  36. uiFactory.initParam.bildschirm->postAction([this, visible]() {
  37. if (visible && !map)
  38. {
  39. lockZeichnung();
  40. map = new DimensionMap(options);
  41. map->setSize(getInnenBreite(), getInnenHeight());
  42. addMember(map);
  43. unlockZeichnung();
  44. addStyle(Fenster::Style::Sichtbar);
  45. }
  46. if (!visible && map)
  47. {
  48. removeStyle(Fenster::Style::Sichtbar);
  49. lockZeichnung();
  50. removeMember(map);
  51. map = 0;
  52. unlockZeichnung();
  53. }
  54. });
  55. }
  56. }
  57. void MapWindow::addChunk(ChunkMap* chunk)
  58. {
  59. lockZeichnung();
  60. if (map)
  61. {
  62. map->addChunk(chunk);
  63. }
  64. else
  65. {
  66. chunk->release();
  67. }
  68. unlockZeichnung();
  69. }
  70. void MapWindow::updatePlayerData(char* data)
  71. {
  72. lockZeichnung();
  73. if (map) map->updatePlayers(data);
  74. unlockZeichnung();
  75. }
  76. bool MapWindow::tick(double time)
  77. {
  78. if (map) map->setSize(getInnenBreite(), getInnenHeight());
  79. return OptionsWindow::tick(time);
  80. }