MapWindow.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. uiFactory.initParam.bildschirm->addMember(
  24. dynamic_cast<Zeichnung*>(options->getThis()));
  25. }
  26. MapWindow::~MapWindow()
  27. {
  28. options->release();
  29. }
  30. void MapWindow::setVisibility(bool visible)
  31. {
  32. if ((visible && !map) || (!visible && map))
  33. {
  34. uiFactory.initParam.bildschirm->postAction([this, visible]() {
  35. if (visible && !map)
  36. {
  37. lockZeichnung();
  38. map = new DimensionMap(options);
  39. map->setSize(getInnenBreite(), getInnenHeight());
  40. addMember(map);
  41. unlockZeichnung();
  42. addStyle(Fenster::Style::Sichtbar);
  43. }
  44. if (!visible && map)
  45. {
  46. removeStyle(Fenster::Style::Sichtbar);
  47. lockZeichnung();
  48. removeMember(map);
  49. map = 0;
  50. unlockZeichnung();
  51. }
  52. });
  53. }
  54. }
  55. void MapWindow::addChunk(ChunkMap* chunk)
  56. {
  57. lockZeichnung();
  58. if (map)
  59. {
  60. map->addChunk(chunk);
  61. }
  62. else
  63. {
  64. chunk->release();
  65. }
  66. unlockZeichnung();
  67. }
  68. void MapWindow::updatePlayerData(char* data)
  69. {
  70. lockZeichnung();
  71. if (map) map->updatePlayers(data);
  72. unlockZeichnung();
  73. }
  74. bool MapWindow::tick(double time)
  75. {
  76. if (map) map->setSize(getInnenBreite(), getInnenHeight());
  77. return OptionsWindow::tick(time);
  78. }