#pragma once #include #include #include #include "InventoryView.h" #include "NetworkAPIProcessor.h" class CraftingGridElement : public Framework::UIMLElement { public: CraftingGridElement(); //! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig //! ist bool isApplicableFor(Framework::XML::Element& element) override; //! erstellt eine neue Zeichnung zu einem gegebenen xml Element Framework::Zeichnung* parseElement(Framework::XML::Element& element, Framework::UIMLContainer& generalFactory) override; bool updateElement(Framework::XML::Element& element, Framework::Zeichnung& z, Framework::UIMLContainer& generalFactory) override; //! wendet die layout parameter zu einer Zeichnung an void layout(Framework::XML::Element& element, Framework::Zeichnung& z, int pWidth, int pHeight, Framework::UIMLContainer& generalLayouter) override; }; class CraftingGridView : public Framework::ZeichnungHintergrund, public NetworkAPIProcessor, public InventoryDragSource { private: int rowSize; int colSize; int numOutputSlots; // entity id or block position Framework::Either> target; Framework::Array* slots; Framework::Array* outputs; Framework::Text id; Framework::Punkt mausPos; int dragStartId; int dragStopId; Framework::Knopf* craft; Framework::Knopf* recipies; int currentTooltipSlot; int requestetTooltipSlot; int getSlotByLocalPos(Framework::Punkt pos); public: CraftingGridView(Framework::Text id, int rowSize, int colSize, int numOutputSlots, Framework::Either> target); ~CraftingGridView(); void api(char* message) override; bool tick(double tickVal) override; void render(Framework::Bild& rObj) override; void doMausEreignis(Framework::MausEreignis& me, bool userRet) override; Framework::Either> getInventoryTarget() const override; };