#include "BlockType.h" #include "ItemType.h" #include "BasicBlocks.h" using namespace Framework; BlockType::BlockType( int id ) : ReferenceCounter(), id( id ) { StaticRegistry::INSTANCE.registerT( this, id ); } void BlockType::loadSuperBlock( Block *zBlock, Framework::Reader *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 ); zBlock->zTool = StaticRegistry::INSTANCE.zElement( effectiveToolId ); } void BlockType::saveSuperBlock( Block *zBlock, Framework::Writer *zWriter ) { zWriter->schreibe( (char *)&zBlock->transparent, 1 ); zWriter->schreibe( (char *)&zBlock->passable, 1 ); zWriter->schreibe( (char *)&zBlock->hp, 4 ); zWriter->schreibe( (char *)&zBlock->maxHP, 4 ); zWriter->schreibe( (char *)&zBlock->hardness, 4 ); zWriter->schreibe( (char *)&zBlock->speedModifier, 4 ); int effectiveToolId = zBlock->zTool->getId(); zWriter->schreibe( (char *)&effectiveToolId, 4 ); } void BlockType::createSuperBlock( Block *zBlock, Item *zItem ) { BasicBlockItem *item = dynamic_cast( zItem ); if( !item ) { throw "BlockType::createSuperBlock was called with an item witch was not an instance of BasicBlockItem"; } zBlock->transparent = item->transparent; zBlock->passable = item->passable; zBlock->hp = item->hp; zBlock->maxHP = item->maxHP; zBlock->hardness = item->hardness; zBlock->speedModifier = item->speedModifier; zBlock->zTool = StaticRegistry::INSTANCE.zElement( item->toolId ); } void BlockType::createSuperItem( Block *zBlock, Item *zItem ) { BasicBlockItem *item = dynamic_cast( zItem ); if( !item ) { throw "BlockType::createSuperItem was called with an item witch was not an instance of BasicBlockItem"; } item->transparent = zBlock->transparent; item->passable = zBlock->passable; item->hp = zBlock->maxHP; // reset hp item->maxHP = zBlock->maxHP; item->hardness = zBlock->hardness; item->speedModifier = zBlock->speedModifier; item->toolId = zBlock->zTool->getId(); } Block *BlockType::loadBlock( Framework::Vec3 position, Game *zTarget, Framework::Reader *zReader ) { Block *result = createBlock( position, zTarget ); loadSuperBlock( result, zReader ); return result; } void BlockType::saveBlock( Block *zBlock, Framework::Writer *zWriter ) { saveSuperBlock( zBlock, zWriter ); } Item *BlockType::getItemFromBlock( Block *zBlock, Game *zTarget ) { Item *result = createItem( zTarget ); createSuperItem( zBlock, result ); return result; } Block *BlockType::createBlockAt( Framework::Vec3 position, Game *zTarget, Item *zUsedItem ) { Block *result = createBlock( position, zTarget ); createSuperBlock( result, zUsedItem ); return result; } int BlockType::getId() const { return id; }