#include "BasicBlocks.h"


BasicBlock::BasicBlock( BlockType *zType, ItemType *zTool, Framework::Vec3<int> pos )
    : Block( zType, zTool, pos )
{}

bool BasicBlock::onTick( TickQueue *zQueue, int numTicks, bool &blocked )
{
    return 0;
}

void BasicBlock::onPostTick()
{}


DirtBlockType::DirtBlockType()
    : BlockType( ID )
{}

void DirtBlockType::loadSuperBlock( Block *zBlock, Framework::StreamReader *zReader )
{
    BlockType::loadSuperBlock( zBlock, zReader );
}

void DirtBlockType::saveSuperBlock( Block *zBlock, Framework::StreamWriter *zWriter )
{
    BlockType::saveSuperBlock( zBlock, zWriter );
}

void DirtBlockType::createSuperBlock( Block *zBlock, Item *zItem )
{
    if( zItem )
        BlockType::createSuperBlock( zBlock, zItem );
    else
    {
        BasicBlock *block = dynamic_cast<BasicBlock *>( zBlock );
        if( !block )
            throw "DirtBlockType::createSuperBlock was called with a block witch is not an instance of BasicBlock";
        block->transparent = 0;
        block->passable = 0;
        block->hp = 100;
        block->maxHP = 100;
        block->hardness = 1;
        block->zTool = 0;
        block->speedModifier = 1;
    }
}

void DirtBlockType::createSuperItem( Block *zBlock, Item *zItem )
{
    BlockType::createSuperItem( zBlock, zItem );
}

Block *DirtBlockType::createBlock( Framework::Vec3<int> position, Game *zTarget )
{
    return new BasicBlock( this, 0, position ); // TODO: add efective tool
}

Item *DirtBlockType::createItem( Game *zTarget )
{
    return StaticRegistry<ItemType>::INSTANCE.zElement( DirtBlockItemType::ID )->createItem();
}


DirtBlockItemType::DirtBlockItemType()
    : BasicBlockItemType( ID, 0, 0 )
{}

Item *DirtBlockItemType::createItem() const
{
    BasicBlockItem *item = new BasicBlockItem( (ItemType *)this, "Dirt" );
    initializeItem( item, 0, 0, 100, 100, 1, 0, 1 );
    return item;
}