#pragma once #include "MaterialColor.h" class ChunkRebuildData; class Material { friend class ChunkRebuildData; public: static Material* air; static Material* grass; static Material* dirt; static Material* wood; static Material* stone; static Material* metal; static Material* heavyMetal; static Material* water; static Material* lava; static Material* leaves; static Material* plant; static Material* replaceable_plant; static Material* sponge; static Material* cloth; static Material* fire; static Material* sand; static Material* decoration; static Material* clothDecoration; static Material* glass; static Material* buildable_glass; static Material* explosive; static Material* coral; static Material* ice; static Material* topSnow; static Material* snow; static Material* cactus; static Material* clay; static Material* vegetable; static Material* egg; static Material* portal; static Material* cake; static Material* web; static Material* piston; static const int PUSH_NORMAL = 0; static const int PUSH_DESTROY = 1; static const int PUSH_BLOCK = 2; // not pushable static void staticCtor(); private: bool _flammable, _replaceable, _neverBuildable; public: MaterialColor* color; private: bool _isAlwaysDestroyable; int pushReaction; bool destroyedByHand; public: Material(MaterialColor* color); virtual bool isLiquid(); virtual bool letsWaterThrough(); virtual bool isSolid(); virtual bool blocksLight(); virtual bool blocksMotion(); private: virtual Material* neverBuildable(); protected: virtual Material* notAlwaysDestroyable(); virtual Material* flammable(); public: virtual bool isFlammable(); virtual Material* replaceable(); virtual bool isReplaceable(); virtual bool isSolidBlocking(); virtual bool isAlwaysDestroyable(); virtual int getPushReaction(); protected: Material* makeDestroyedByHand(); public: bool isDestroyedByHand(); protected: Material* destroyOnPush(); Material* notPushable(); };