#pragma once #include #include #include #include #include "ModelInfo.h" class Item; class Block; class Game; class ItemType; class BlockTypeEnum { public: static const int NO_BLOCK = 0; static const int AIR = 1; }; class BlockType : public virtual Framework::ReferenceCounter { private: int id; ModelInfo* model; int initialMaxHP; const bool needsClientInstance; bool lightSource; Framework::Text name; const bool needModelSubscription; int initialMapColor; Block* defaultBlock; Framework::RCArray groupNames; float hardness; protected: BlockType(Block* defaultBlock, ModelInfo* model, bool needsClientInstance, int initialMaxHP, bool lightSource, Framework::Text name, bool needModelSubscription, int initialMapColor, Framework::RCArray groupNames, float hardness); virtual ~BlockType(); virtual void loadSuperBlock( Block* zBlock, Framework::StreamReader* zReader, int dimensionId) const; virtual void saveSuperBlock( Block* zBlock, Framework::StreamWriter* zWriter) const; virtual void createSuperBlock(Block* zBlock, Item* zItem) const; virtual void createSuperItem(Block* zBlock, Item* zItem) const; virtual Block* createBlock( Framework::Vec3 position, int dimensionId) const = 0; virtual Item* createItem() const = 0; public: virtual bool initialize(Game* zGame); virtual Framework::Text getTargetUIML() const; virtual Block* loadBlock(Framework::Vec3 position, Framework::StreamReader* zReader, int dimensionId) const; virtual void saveBlock( Block* zBlock, Framework::StreamWriter* zWriter) const; virtual Item* getItemFromBlock(Block* zBlock) const; virtual Block* createBlockAt( Framework::Vec3 position, int dimensionId, Item* zUsedItem) const; virtual const Block* zDefault() const; bool doesNeedClientInstance() const; int getId() const; int getInitialMaxHP() const; bool isLightSource() const; BlockType* initializeDefault(); const char* getName() const; const bool doesNeedModelSubscription() const; void writeTypeInfo(Framework::StreamWriter* zWriter) const; virtual bool isFluid() const; virtual unsigned char getFlowDistance() const; void setTypeId(int id); ModelInfo* zModel() const; int getMapColor() const; virtual ItemType* createItemType() const = 0; const Framework::RCArray& getGroupNames() const; float getHardness() const; static int getTypeId(const char* name); static Framework::Text getTypeName(int id); }; const Block* getDefaultBlock(Framework::Either b);