#pragma once #include "BlockComponent.h" #include "CraftingStorage.h" #include "TypeRegistry.h" class ItemFilter; class FireBasedProcessingBlockComponent : public BlockComponent, public CraftingStorage { private: Block* zBlock; ItemFilter* fireStartingItemFilter; ItemFilter* fuelItemFilter; Framework::Text recipieGroup; Framework::Text fuelInventorySlotName; Framework::Text fireStartingInventorySlotName; Framework::Text inputInventorySlotName; Framework::Text outputInventorySlotName; int ticksNeeded; Recipie* currentRecipie; int fuelBuffer; bool burning; public: FireBasedProcessingBlockComponent(); virtual ~FireBasedProcessingBlockComponent(); protected: void findRecipie(); void consumeFuel(); public: virtual void initialize(Block* zBlock) override; virtual bool tick(int numTicks) override; virtual Framework::XML::Element* getUIML() const override; virtual bool isAllAvailable( Framework::RCArray& inputs) override; virtual bool hasFreeSpace(const Item* zItem, int amount) override; virtual void consume(Framework::RCArray& inputs) override; virtual void addCraftingResult(ItemStack* zStack) override; virtual Framework::Vec3 getStorageLocation() const override; virtual int getStorageDimensionId() const override; virtual void loadComponent(Framework::StreamReader* zReader) override; virtual void saveComponent(Framework::StreamWriter* zWriter) const override; friend class FireBasedProcessingBlockComponentFactory; }; class FireBasedProcessingBlockComponentFactory : public SubTypeFactory { public: FireBasedProcessingBlockComponentFactory(); FireBasedProcessingBlockComponent* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( FireBasedProcessingBlockComponent* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; };