InventoryView.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #pragma once
  2. #include <Either.h>
  3. #include <UIMLView.h>
  4. #include <VecN.h>
  5. #include "NetworkAPIProcessor.h"
  6. class InventoryElement : public Framework::UIMLElement
  7. {
  8. public:
  9. InventoryElement();
  10. //! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig
  11. //! ist
  12. bool isApplicableFor(Framework::XML::Element& element) override;
  13. //! erstellt eine neue Zeichnung zu einem gegebenen xml Element
  14. Framework::Zeichnung* parseElement(Framework::XML::Element& element,
  15. Framework::UIMLContainer& generalFactory) override;
  16. bool updateElement(Framework::XML::Element& element,
  17. Framework::Zeichnung& z,
  18. Framework::UIMLContainer& generalFactory) override;
  19. //! wendet die layout parameter zu einer Zeichnung an
  20. void layout(Framework::XML::Element& element,
  21. Framework::Zeichnung& z,
  22. int pWidth,
  23. int pHeight,
  24. Framework::UIMLContainer& generalLayouter) override;
  25. };
  26. struct SlotInfo
  27. {
  28. int id;
  29. int itemCount;
  30. float hp;
  31. float maxHp;
  32. float durability;
  33. float maxDurability;
  34. Framework::Text name;
  35. Framework::Bild* zItem;
  36. void render(int x,
  37. int y,
  38. Framework::Bild& rObj,
  39. bool selected,
  40. bool lightBackground);
  41. };
  42. class InventoryDragSource
  43. {
  44. public:
  45. virtual Framework::Either<int, Framework::VecN<int, 4>>
  46. getInventoryTarget() const = 0;
  47. };
  48. class InventoryView : public Framework::ZeichnungHintergrund,
  49. public NetworkAPIProcessor,
  50. public InventoryDragSource
  51. {
  52. private:
  53. int rowSize;
  54. // entity id or block position
  55. Framework::Either<int, Framework::VecN<int, 4>> target;
  56. Framework::Text slotNameFilter;
  57. Framework::Text id;
  58. Framework::Array<SlotInfo>* slots;
  59. Framework::Punkt mausPos;
  60. int dragStartId;
  61. int dragStopId;
  62. int currentTooltipSlot;
  63. int requestetTooltipSlot;
  64. int getSlotByLocalPos(Framework::Punkt pos);
  65. public:
  66. InventoryView(Framework::Text id,
  67. Framework::Either<int, Framework::VecN<int, 4>> target,
  68. int rowSize,
  69. Framework::Text slotNameFilter);
  70. ~InventoryView();
  71. void api(char* message) override;
  72. bool tick(double tickVal) override;
  73. void render(Framework::Bild& rObj) override;
  74. void doMausEreignis(Framework::MausEreignis& me, bool userRet) override;
  75. Framework::Either<int, Framework::VecN<int, 4>>
  76. getInventoryTarget() const override;
  77. };