#pragma once #include #include "Block.h" #include "BlockType.h" #include "Item.h" class BlockType; class ItemType; class BasicBlockType; class BasicBlock : public Block { Framework::Textur* breakTextur; public: BasicBlock( const BlockType* zType, const char* texture, ItemType* zTool, Framework::Vec3 pos, Framework::Textur* t ); ~BasicBlock(); bool needRenderPolygon( int index ) override; virtual Textur* zEffectTextur() override; virtual float getEffectPercentage() override; friend BasicBlockType; }; class BasicBlockType : public BlockType { private: const char* texturPath; protected: bool transparent; bool passable; float maxHp; float hardness; ItemType* zTool; float speedModifier; bool interactable; BasicBlockType( int id, const char* texturPath ); public: virtual Block* createBlock( Framework::Vec3 position ) override; virtual void initializeSuperBlock( Block* zBlock ) override; virtual bool needsInstance() const override; }; // Dirt class DirtBlockType : public BasicBlockType { REGISTRABLE( DirtBlockType ) protected: DirtBlockType(); Block* createBlock( Framework::Vec3 position ) override; }; REGISTER( DirtBlockType, BlockType ) class DirtBlockItemType : public BasicBlockItemType { REGISTRABLE( DirtBlockItemType ) protected: DirtBlockItemType(); }; REGISTER( DirtBlockItemType, ItemType ) // Stone class StoneBlockType : public BasicBlockType { REGISTRABLE( StoneBlockType ) protected: StoneBlockType(); }; REGISTER( StoneBlockType, BlockType ) class StoneBlockItemType : public BasicBlockItemType { REGISTRABLE( StoneBlockItemType ) protected: StoneBlockItemType(); }; REGISTER( StoneBlockItemType, ItemType ) // Sand class SandBlockType : public BasicBlockType { REGISTRABLE( SandBlockType ) protected: SandBlockType(); }; REGISTER( SandBlockType, BlockType ) class SandBlockItemType : public BasicBlockItemType { REGISTRABLE( SandBlockItemType ) protected: SandBlockItemType(); }; REGISTER( SandBlockItemType, ItemType ) // Oak Wood class OakBlockType : public BasicBlockType { REGISTRABLE( OakBlockType ) protected: OakBlockType(); }; REGISTER( OakBlockType, BlockType ) class OakBlockItemType : public BasicBlockItemType { REGISTRABLE( OakBlockItemType ) protected: OakBlockItemType(); }; REGISTER( OakBlockItemType, ItemType ) // Leaves class LeavesBlockType : public BasicBlockType { REGISTRABLE( LeavesBlockType ) protected: LeavesBlockType(); }; REGISTER( LeavesBlockType, BlockType ) class LeavesBlockItemType : public BasicBlockItemType { REGISTRABLE( LeavesBlockItemType ) protected: LeavesBlockItemType(); }; REGISTER( LeavesBlockItemType, ItemType ) // Gravel class GravelBlockType : public BasicBlockType { REGISTRABLE( GravelBlockType ) protected: GravelBlockType(); }; REGISTER( GravelBlockType, BlockType ) class GravelBlockItemType : public BasicBlockItemType { REGISTRABLE( GravelBlockItemType ) protected: GravelBlockItemType(); }; REGISTER( GravelBlockItemType, ItemType ) // Granite class GraniteBlockType : public BasicBlockType { REGISTRABLE( GraniteBlockType ) protected: GraniteBlockType(); }; REGISTER( GraniteBlockType, BlockType ) class GraniteBlockItemType : public BasicBlockItemType { REGISTRABLE( GraniteBlockItemType ) protected: GraniteBlockItemType(); }; REGISTER( GraniteBlockItemType, ItemType ) // Cobble class CobbleBlockType : public BasicBlockType { REGISTRABLE( CobbleBlockType ) protected: CobbleBlockType(); }; REGISTER( CobbleBlockType, BlockType ) class CobbleBlockItemType : public BasicBlockItemType { REGISTRABLE( CobbleBlockItemType ) protected: CobbleBlockItemType(); }; REGISTER( CobbleBlockItemType, ItemType ) // Birch Wood class BirchBlockType : public BasicBlockType { REGISTRABLE( BirchBlockType ) protected: BirchBlockType(); }; REGISTER( BirchBlockType, BlockType ) class BirchBlockItemType : public BasicBlockItemType { REGISTRABLE( BirchBlockItemType ) protected: BirchBlockItemType(); }; REGISTER( BirchBlockItemType, ItemType ) // Beech Wood class BeechBlockType : public BasicBlockType { REGISTRABLE( BeechBlockType ) protected: BeechBlockType(); }; REGISTER( BeechBlockType, BlockType ) class BeechBlockItemType : public BasicBlockItemType { REGISTRABLE( BeechBlockItemType ) protected: BeechBlockItemType(); }; REGISTER( BeechBlockItemType, ItemType ) // Basalt class BasaltBlockType : public BasicBlockType { REGISTRABLE( BasaltBlockType ) protected: BasaltBlockType(); }; REGISTER( BasaltBlockType, BlockType ) class BasaltBlockItemType : public BasicBlockItemType { REGISTRABLE( BasaltBlockItemType ) protected: BasaltBlockItemType(); }; REGISTER( BasaltBlockItemType, ItemType )