Chat.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "Chat.h"
  2. #include <AsynchronCall.h>
  3. #include <FileSystem.h>
  4. #include "ChatMessage.h"
  5. #include "FactoryClient.h"
  6. #include "Game.h"
  7. #include "Globals.h"
  8. #include "World.h"
  9. Chat::Chat()
  10. : OptionsWindow([this]() { options->addStyle(Window::Style::Visible); }),
  11. optionsAdded(0)
  12. {
  13. addStyle(
  14. Window::Style::LeftPositionFixed | Window::Style::BottomPositionFixed);
  15. removeStyle(Window::Style::Movable);
  16. setTitel("Chat");
  17. setClosingMe([this](void* p, void* o, Framework::MouseEvent me) {
  18. if (me.id == Framework::ME_RLeft)
  19. {
  20. removeStyle(Window::Style::Visible);
  21. ((Game*)(Menu*)menuRegister->get("game"))->makeChatButtonVisible();
  22. }
  23. return 1;
  24. });
  25. setSize(500, 300);
  26. setPosition(5, uiFactory.initParam.bildschirm->getBackBufferSize().y - 305);
  27. setBodyMin(200, 100);
  28. options = new ChatOptions();
  29. history = new ChatHistory();
  30. history->setSize(getInnerWidth(), getInnerHeight() - 20);
  31. addMember(history);
  32. commandLine = uiFactory.createTextField(uiFactory.initParam);
  33. commandLine->setText("");
  34. commandLine->setSize(getInnerWidth() - 20, 20);
  35. commandLine->setPosition(0, getInnerHeight() - 20);
  36. commandLine->setStyle(Framework::TextField::Style::TextField);
  37. commandLine->setKeyboardEvent(
  38. [this](void* p, void* o, Framework::KeyboardEvent te) {
  39. if (te.id == Framework::TE_Release
  40. && te.virtualKey == Framework::T_Enter)
  41. {
  42. if (commandLine->zText()->getLength() > 0)
  43. {
  44. Text* msg = new Text(*commandLine->zText());
  45. commandLine->setText("");
  46. new AsynchronCall([msg]() {
  47. World::INSTANCE->zClient()->sendChatMessage(*msg);
  48. msg->release();
  49. });
  50. }
  51. }
  52. return 1;
  53. });
  54. addMember(commandLine);
  55. LTDBFile iconsDat;
  56. iconsDat.setFile(new Text("data/images/gui_icons.ltdb"));
  57. iconsDat.readData(0);
  58. sendButton = uiFactory.createButton(uiFactory.initParam);
  59. sendButton->setAlphaFieldColor(0x5F337AB7);
  60. sendButton->setToolTipText(
  61. "Send", uiFactory.initParam.bildschirm, uiFactory.initParam.font);
  62. sendButton->setSize(20, 20);
  63. sendButton->setPosition(getInnerWidth() - 20, getInnerHeight() - 20);
  64. sendButton->addStyle(Framework::Button::Style::BImage
  65. | Framework::Button::Style::BAlpha
  66. | Framework::Button::Style::Background);
  67. sendButton->setBackgroundImageZ(iconsDat.load(0, new Text("send.png")));
  68. sendButton->setMouseEvent(
  69. [this](void* p, void* o, Framework::MouseEvent me) {
  70. if (me.id == ME_RLeft)
  71. {
  72. if (commandLine->zText()->getLength() > 0)
  73. {
  74. Text* msg = new Text(*commandLine->zText());
  75. commandLine->setText("");
  76. new AsynchronCall([msg]() {
  77. World::INSTANCE->zClient()->sendChatMessage(*msg);
  78. msg->release();
  79. });
  80. }
  81. }
  82. return 1;
  83. });
  84. addMember(sendButton);
  85. }
  86. Chat ::~Chat()
  87. {
  88. options->release();
  89. }
  90. void Chat::addMessage(char* data)
  91. {
  92. history->addMessage(new ChatMessage(data));
  93. }
  94. void Chat::initOptions(char* data)
  95. {
  96. options->init(data);
  97. }
  98. bool Chat::tick(double time)
  99. {
  100. if (!optionsAdded)
  101. {
  102. optionsAdded = 1;
  103. uiFactory.initParam.bildschirm->addMember(
  104. dynamic_cast<Drawable*>(options->getThis()));
  105. }
  106. return OptionsWindow::tick(time);
  107. }
  108. void Chat::render(Framework::Image& rObj)
  109. {
  110. history->setSize(getInnerWidth(), getInnerHeight() - 20);
  111. commandLine->setSize(getInnerWidth() - 20, 20);
  112. commandLine->setPosition(0, getInnerHeight() - 20);
  113. sendButton->setPosition(getInnerWidth() - 20, getInnerHeight() - 20);
  114. OptionsWindow::render(rObj);
  115. }