#pragma once #include "Block.h" #include "BlockType.h" #include "Item.h" class BlockType; class ItemType; class BasicBlockType; class BasicBlock : public Block { public: BasicBlock( int typeId, ItemType* zTool, Framework::Vec3 pos, int dimensionId); BasicBlock(int typeId, ItemType* zTool, Framework::Vec3 pos, int dimensionId, bool hasInventory); virtual bool onTick( TickQueue* zQueue, int numTicks, bool& blocked) override; virtual void onPostTick() override; friend BasicBlockType; }; struct SpawnConfig { int min; int max; double chance; int itemType; }; class AdditionalItemSpawningBlock : public BasicBlock { private: Framework::Array spawns; public: AdditionalItemSpawningBlock( int typeId, ItemType* zTool, Framework::Vec3 pos, int dimensionId); void addSpawn(SpawnConfig config); virtual void onDestroy() override; }; class BasicBlockType : public BlockType { private: int itemType; bool transparent; bool passable; float hardness; ItemType* zTool; float speedModifier; bool interactable; std::function, int)> creatBlockCustom; protected: virtual void createSuperBlock(Block* zBlock, Item* zItem) const override; public: BasicBlockType(int typeId, int itemTypeId, ModelInfo model, const char* name, int mapColor); BasicBlockType(int typeId, int itemTypeId, ModelInfo model, std::function, int)> creatBlockCustom, const char* name, int mapColor); BasicBlockType(int typeId, int itemTypeId, ModelInfo model, std::function, int)> creatBlockCustom, const char* name, int mapColor, bool modelSubscription); virtual Block* createBlock( Framework::Vec3 position, int dimensionId) const override; virtual Item* createItem() const override; BasicBlockType* setHardness(float hardness); BasicBlockType* setTransparent(bool transparent); };