Browse Source

add item stack images to quest requirements

Kolja Strohm 1 month ago
parent
commit
ad65b726ce

+ 3 - 21
FactoryCraft/BasicBlocks.cpp

@@ -117,19 +117,6 @@ BasicBlockType::BasicBlockType()
       interactable(1)
 {}
 
-bool BasicBlockType::initialize(Game* zGame)
-{
-    if (itemTypeName.getLength())
-    {
-        itemTypeId = zGame->getItemTypeId(itemTypeName);
-    }
-    else
-    {
-        itemTypeId = 0;
-    }
-    return itemTypeId >= 0 && BlockType::initialize(zGame);
-}
-
 void BasicBlockType::loadSuperBlock(
     Block* zBlock, Framework::StreamReader* zReader, int dimensionId) const
 {
@@ -186,11 +173,11 @@ Block* BasicBlockType::createBlock(
 
 Item* BasicBlockType::createItem() const
 {
-    if (getItemTypeName().istGleich(""))
+    if (getItemTypeId() >= 0)
     {
         return 0;
     }
-    return Game::INSTANCE->zItemType(itemTypeId)->createItem();
+    return Game::INSTANCE->zItemType(getItemTypeId())->createItem();
 }
 
 Framework::Text BasicBlockType::getItemTypeName() const
@@ -198,7 +185,7 @@ Framework::Text BasicBlockType::getItemTypeName() const
     return itemTypeName;
 }
 
-ItemType* BasicBlockType::createItemType() const
+ItemType* BasicBlockType::createItemTypeInternal() const
 {
     if (getItemTypeName().istGleich(""))
     {
@@ -224,11 +211,6 @@ void BasicBlockType::setItemTypeName(Framework::Text itemTypeName)
     this->itemTypeName = itemTypeName;
 }
 
-int BasicBlockType::getItemTypeId() const
-{
-    return itemTypeId;
-}
-
 void BasicBlockType::setTransparent(bool transparent)
 {
     this->transparent = transparent;

+ 1 - 4
FactoryCraft/BasicBlocks.h

@@ -41,7 +41,6 @@ class BasicBlockType : public BlockType
 {
 private:
     Framework::Text itemTypeName;
-    int itemTypeId;
     bool transparent;
     bool passable;
     float speedModifier;
@@ -51,7 +50,6 @@ private:
 
 public:
     BasicBlockType();
-    virtual bool initialize(Game* zGame) override;
 
 protected:
     virtual void loadSuperBlock(Block* zBlock,
@@ -66,9 +64,8 @@ public:
         Framework::Vec3<int> position, int dimensionId) const override;
     virtual Item* createItem() const override;
     Framework::Text getItemTypeName() const;
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
     void setItemTypeName(Framework::Text itemTypeName);
-    int getItemTypeId() const;
     void setTransparent(bool transparent);
     bool isTransparent() const;
     void setPassable(bool passable);

+ 14 - 1
FactoryCraft/BlockType.cpp

@@ -21,7 +21,8 @@ BlockType::BlockType()
       defaultBlock(0),
       groupNames(),
       hardness(1.f),
-      damagableByHand(0)
+      damagableByHand(0),
+      itemType(0)
 {}
 
 BlockType::~BlockType()
@@ -142,6 +143,18 @@ const Block* BlockType::zDefault() const
     return defaultBlock;
 }
 
+ItemType* BlockType::createItemType()
+{
+    ItemType* result = createItemTypeInternal();
+    itemType = result;
+    return result;
+}
+
+int BlockType::getItemTypeId() const
+{
+    return itemType ? itemType->getId() : -1;
+}
+
 void BlockType::writeTypeInfo(StreamWriter* zWriter) const
 {
     int id = getId();

+ 4 - 1
FactoryCraft/BlockType.h

@@ -38,6 +38,7 @@ private:
     Framework::RCArray<DropConfig> dropConfigs;
     bool damagableByHand;
     Framework::RCArray<InteractionConfig> interactionConfigs;
+    const ItemType* itemType;
 
 protected:
     Block* defaultBlock;
@@ -55,6 +56,7 @@ protected:
         Framework::Vec3<int> position, int dimensionId) const
         = 0;
     virtual Item* createItem() const = 0;
+    virtual ItemType* createItemTypeInternal() const = 0;
 
 public:
     virtual bool initialize(Game* zGame);
@@ -63,7 +65,8 @@ public:
     const Framework::RCArray<DropConfig>& getDropConfigs() const;
     const Block* zDefault() const;
 
-    virtual ItemType* createItemType() const = 0;
+    ItemType* createItemType();
+    virtual int getItemTypeId() const;
 
     void writeTypeInfo(Framework::StreamWriter* zWriter) const;
     virtual Framework::XML::Element* getTargetUIML() const;

+ 1 - 1
FactoryCraft/FluidBlock.cpp

@@ -250,7 +250,7 @@ bool FluidBlockType::isFluid() const
     return true;
 }
 
-ItemType* FluidBlockType::createItemType() const
+ItemType* FluidBlockType::createItemTypeInternal() const
 {
     return 0;
 }

+ 1 - 1
FactoryCraft/FluidBlock.h

@@ -66,7 +66,7 @@ protected:
 
 public:
     bool isFluid() const override;
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
     void setTicktsToFlow(int ticksToFlow);
     int getTicktsToFlow() const;
     void setFlowDistance(unsigned char flowDistance);

+ 1 - 1
FactoryCraft/Grass.cpp

@@ -30,7 +30,7 @@ GrassBlockType::GrassBlockType()
     : BasicBlockType()
 {}
 
-ItemType* GrassBlockType::createItemType() const
+ItemType* GrassBlockType::createItemTypeInternal() const
 {
     return 0;
 }

+ 1 - 1
FactoryCraft/Grass.h

@@ -35,7 +35,7 @@ protected:
         Framework::Vec3<int> position, int dimensionId) const override;
 
 public:
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
 };
 
 class GrassBlockTypeFactory : public BasicBlockTypeFactory<GrassBlockType>

+ 1 - 1
FactoryCraft/GrowingPlant.cpp

@@ -285,7 +285,7 @@ bool GrowingPlantBlockType::initialize(Game* zGame)
     return blockTypeIdAfterGrowth >= 0 && BlockType::initialize(zGame);
 }
 
-ItemType* GrowingPlantBlockType::createItemType() const
+ItemType* GrowingPlantBlockType::createItemTypeInternal() const
 {
     return 0;
 }

+ 1 - 1
FactoryCraft/GrowingPlant.h

@@ -77,7 +77,7 @@ protected:
 
 public:
     virtual bool initialize(Game* zGame) override;
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
 
     GrowingPlantBlockType* addGrowthState(
         float growthPercentage, ModelInfo* model);

+ 1 - 1
FactoryCraft/LightSources.cpp

@@ -157,7 +157,7 @@ Item* BasicLightSourceBlockType::createItem() const
     return Game::INSTANCE->zItemType(itemTypeId)->createItem();
 }
 
-ItemType* BasicLightSourceBlockType::createItemType() const
+ItemType* BasicLightSourceBlockType::createItemTypeInternal() const
 {
     return (new LightSourceItemType(getItemTypeName(),
                 new ModelInfo(zModel()->getModelPath(),

+ 1 - 1
FactoryCraft/LightSources.h

@@ -85,7 +85,7 @@ public:
         Framework::Vec3<int> position, int dimensionId) const override;
     virtual Item* createItem() const override;
 
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
 
     void setItemTypeName(Framework::Text itemTypeName);
     Framework::Text getItemTypeName() const;

+ 1 - 1
FactoryCraft/NoBlock.cpp

@@ -14,7 +14,7 @@ NoBlockBlockType::NoBlockBlockType(Block* defaultB, Framework::Text name)
     defaultBlock = defaultB;
 }
 
-ItemType* NoBlockBlockType::createItemType() const
+ItemType* NoBlockBlockType::createItemTypeInternal() const
 {
     return 0;
 }

+ 1 - 1
FactoryCraft/NoBlock.h

@@ -21,7 +21,7 @@ protected:
 
 public:
     NoBlockBlockType(Block* defaultB, Framework::Text name);
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
 };
 
 class NoBlock : public Block

+ 87 - 4
FactoryCraft/QuestRequirement.cpp

@@ -197,7 +197,20 @@ void QuestRequirementBlockBreak::addRequirementUIML(
               ->setStyle(Framework::Fenster::Style::Sichtbar
                          | Framework::Fenster::Style::Erlaubt)
               ->setID(Framework::Text("requirement_") += getRequirementId());
-    // TODO: add icon of block
+    int itemTypeId = Game::INSTANCE->zBlockType(blockTypeId)->getItemTypeId();
+    if (itemTypeId > 0)
+    {
+        builder->addChild(UIMLBuilder::createItemStack()
+                ->setItemTypeID(itemTypeId)
+                ->setAmount(1)
+                ->setID(Framework::Text("requirement_itemStack_")
+                        += getRequirementId())
+                ->setWidth(50)
+                ->setHeight(50)
+                ->setToolTip(
+                    Game::INSTANCE->zItemType(itemTypeId)->getTooltipUIML())
+                ->build());
+    }
     Framework::Text status;
     int color;
     if (zStorage->zStorage(getRequirementId())->isFullfilled())
@@ -221,6 +234,12 @@ void QuestRequirementBlockBreak::addRequirementUIML(
             ->addChild(UIMLBuilder::createTextAuto(description)
                     ->setID(Framework::Text("requirement_description_")
                             += getRequirementId())
+                    ->setAlignLeftToElement(
+                        itemTypeId > 0
+                            ? Framework::Text("requirement_itemStack_")
+                              += getRequirementId()
+                            : Framework::Text("start"))
+                    ->setMarginLeft(10)
                     ->build())
             ->addChild(UIMLBuilder::createTextAuto(status)
                     ->setAlignXToElement(
@@ -230,6 +249,9 @@ void QuestRequirementBlockBreak::addRequirementUIML(
                         Framework::Text("requirement_description_")
                         += getRequirementId())
                     ->setMarginTop(10)
+                    ->setAlignXToElement(
+                        Framework::Text("requirement_description_")
+                        += getRequirementId())
                     ->setTextColor(color)
                     ->build())
             ->build());
@@ -377,7 +399,20 @@ void QuestRequirementBlockPlace::addRequirementUIML(
               ->setStyle(Framework::Fenster::Style::Sichtbar
                          | Framework::Fenster::Style::Erlaubt)
               ->setID(Framework::Text("requirement_") += getRequirementId());
-    // TODO: add icon of block
+    int itemTypeId = Game::INSTANCE->zBlockType(blockTypeId)->getItemTypeId();
+    if (itemTypeId > 0)
+    {
+        builder->addChild(UIMLBuilder::createItemStack()
+                ->setItemTypeID(itemTypeId)
+                ->setAmount(1)
+                ->setID(Framework::Text("requirement_itemStack_")
+                        += getRequirementId())
+                ->setWidth(50)
+                ->setHeight(50)
+                ->setToolTip(
+                    Game::INSTANCE->zItemType(itemTypeId)->getTooltipUIML())
+                ->build());
+    }
     Framework::Text status;
     int color;
     if (zStorage->zStorage(getRequirementId())->isFullfilled())
@@ -401,6 +436,12 @@ void QuestRequirementBlockPlace::addRequirementUIML(
             ->addChild(UIMLBuilder::createTextAuto(description)
                     ->setID(Framework::Text("requirement_description_")
                             += getRequirementId())
+                    ->setAlignLeftToElement(
+                        itemTypeId > 0
+                            ? Framework::Text("requirement_itemStack_")
+                              += getRequirementId()
+                            : Framework::Text("start"))
+                    ->setMarginLeft(10)
                     ->build())
             ->addChild(UIMLBuilder::createTextAuto(status)
                     ->setAlignXToElement(
@@ -410,6 +451,9 @@ void QuestRequirementBlockPlace::addRequirementUIML(
                         Framework::Text("requirement_description_")
                         += getRequirementId())
                     ->setMarginTop(10)
+                    ->setAlignXToElement(
+                        Framework::Text("requirement_description_")
+                        += getRequirementId())
                     ->setTextColor(color)
                     ->build())
             ->build());
@@ -524,7 +568,20 @@ void QuestRequirementBlockInteract::addRequirementUIML(
               ->setStyle(Framework::Fenster::Style::Sichtbar
                          | Framework::Fenster::Style::Erlaubt)
               ->setID(Framework::Text("requirement_") += getRequirementId());
-    // TODO: add icon of dialog
+    int itemTypeId = Game::INSTANCE->zBlockType(blockTypeId)->getItemTypeId();
+    if (itemTypeId > 0)
+    {
+        builder->addChild(UIMLBuilder::createItemStack()
+                ->setItemTypeID(itemTypeId)
+                ->setAmount(1)
+                ->setID(Framework::Text("requirement_itemStack_")
+                        += getRequirementId())
+                ->setWidth(50)
+                ->setHeight(50)
+                ->setToolTip(
+                    Game::INSTANCE->zItemType(itemTypeId)->getTooltipUIML())
+                ->build());
+    }
     Framework::Text status;
     int color;
     if (zStorage->zStorage(getRequirementId())->isFullfilled())
@@ -541,6 +598,12 @@ void QuestRequirementBlockInteract::addRequirementUIML(
             ->addChild(UIMLBuilder::createTextAuto(description)
                     ->setID(Framework::Text("requirement_description_")
                             += getRequirementId())
+                    ->setAlignLeftToElement(
+                        itemTypeId > 0
+                            ? Framework::Text("requirement_itemStack_")
+                              += getRequirementId()
+                            : Framework::Text("start"))
+                    ->setMarginLeft(10)
                     ->build())
             ->addChild(UIMLBuilder::createTextAuto(status)
                     ->setAlignXToElement(
@@ -550,6 +613,9 @@ void QuestRequirementBlockInteract::addRequirementUIML(
                         Framework::Text("requirement_description_")
                         += getRequirementId())
                     ->setMarginTop(10)
+                    ->setAlignXToElement(
+                        Framework::Text("requirement_description_")
+                        += getRequirementId())
                     ->setTextColor(color)
                     ->build())
             ->build());
@@ -687,7 +753,16 @@ void QuestRequirementItemInInventory::addRequirementUIML(
               ->setStyle(Framework::Fenster::Style::Sichtbar
                          | Framework::Fenster::Style::Erlaubt)
               ->setID(Framework::Text("requirement_") += getRequirementId());
-    // TODO: add icon of block
+    builder->addChild(UIMLBuilder::createItemStack()
+            ->setItemTypeID(itemTypeId)
+            ->setAmount(amount)
+            ->setID(
+                Framework::Text("requirement_itemStack_") += getRequirementId())
+            ->setWidth(50)
+            ->setHeight(50)
+            ->setToolTip(
+                Game::INSTANCE->zItemType(itemTypeId)->getTooltipUIML())
+            ->build());
     Framework::Text status;
     int color;
     if (zStorage->zStorage(getRequirementId())->isFullfilled())
@@ -711,6 +786,11 @@ void QuestRequirementItemInInventory::addRequirementUIML(
             ->addChild(UIMLBuilder::createTextAuto(description)
                     ->setID(Framework::Text("requirement_description_")
                             += getRequirementId())
+                    ->setAlignLeftToElement(
+                        Framework::Text("requirement_itemStack_")
+                        += getRequirementId())
+                    ->setMarginLeft(10)
+                    ->setAlignTopStart()
                     ->build())
             ->addChild(UIMLBuilder::createTextAuto(status)
                     ->setAlignXToElement(
@@ -720,6 +800,9 @@ void QuestRequirementItemInInventory::addRequirementUIML(
                         Framework::Text("requirement_description_")
                         += getRequirementId())
                     ->setMarginTop(10)
+                    ->setAlignXToElement(
+                        Framework::Text("requirement_description_")
+                        += getRequirementId())
                     ->setTextColor(color)
                     ->build())
             ->build());

+ 1 - 1
FactoryCraft/TreeSeblingBlock.cpp

@@ -166,7 +166,7 @@ bool TreeSeblingBlockType::isInteractable() const
     return interactable;
 }
 
-ItemType* TreeSeblingBlockType::createItemType() const
+ItemType* TreeSeblingBlockType::createItemTypeInternal() const
 {
     return new BasicBlockItemType(getItemTypeName(),
         new ModelInfo(zModel()->getModelPath(),

+ 1 - 1
FactoryCraft/TreeSeblingBlock.h

@@ -57,7 +57,7 @@ protected:
 
 public:
     virtual bool initialize(Game* zGame) override;
-    virtual ItemType* createItemType() const override;
+    virtual ItemType* createItemTypeInternal() const override;
 
     void setItemTypeName(Framework::Text itemTypeName);
     Framework::Text getItemTypeName() const;

+ 6 - 0
FactoryCraft/UIMLBuilder.h

@@ -1094,6 +1094,12 @@ public:
         result->addChild(builder->build());
         return this;
     }
+
+    UIMLItemStackBuilder* setToolTip(Framework::XML::Element* tooltip)
+    {
+        result->addChild(tooltip);
+        return this;
+    }
 };
 
 class UIMLQuestNodeBuilder : public UIMLElementBuilder<UIMLQuestNodeBuilder>