#include "BlockType.h" #include "Block.h" #include "Registries.h" using namespace Framework; BlockType::BlockType( int id ) : ReferenceCounter(), id( id ), defaultBlock( 0 ) { STATIC_REGISTRY( BlockType ).registerT( this, id ); } BlockType::~BlockType() { if( defaultBlock ) defaultBlock->release(); } void BlockType::loadSuperBlock( Block* zBlock, Framework::StreamReader* zReader ) { zBlock->loadInventory( zReader ); zReader->lese( (char*)&zBlock->transparent, 1 ); zReader->lese( (char*)&zBlock->passable, 1 ); zReader->lese( (char*)&zBlock->hp, 4 ); zReader->lese( (char*)&zBlock->maxHP, 4 ); zReader->lese( (char*)&zBlock->hardness, 4 ); zReader->lese( (char*)&zBlock->speedModifier, 4 ); int effectiveToolId; zReader->lese( (char*)&effectiveToolId, 4 ); if( effectiveToolId >= 0 ) zBlock->zTool = STATIC_REGISTRY( ItemType ).zElement( effectiveToolId ); else zBlock->zTool = 0; } Block* BlockType::loadBlock( Framework::Vec3 position, Framework::StreamReader* zReader ) { Block* result = createBlock( position ); loadSuperBlock( result, zReader ); return result; } void BlockType::updateBlock( Block* zBlock, Framework::StreamReader* zReader ) { loadSuperBlock( zBlock, zReader ); } int BlockType::getId() const { return id; } const Block* BlockType::zDefault() { if( !defaultBlock ) defaultBlock = createBlock( { 0, 0, 0 } ); return defaultBlock; }