#include "AddChunkUpdate.h"
#include "Chunk.h"
#include "Constants.h"
#include "Dimension.h"


AddChunkUpdate::AddChunkUpdate( Chunk *chunk )
    : WorldUpdate( chunk->getDimensionId(), Framework::Vec3<int>( chunk->getCenter().x - CHUNK_SIZE / 2, chunk->getCenter().y - CHUNK_SIZE / 2, 0 ), Framework::Vec3<int>( chunk->getCenter().x + CHUNK_SIZE / 2, chunk->getCenter().y + CHUNK_SIZE / 2, WORLD_HEIGHT - 1 ) ),
    chunk( chunk )
{}

AddChunkUpdate::~AddChunkUpdate()
{
    chunk->release();
}

void AddChunkUpdate::onUpdate( Dimension *zDimension )
{
    zDimension->addChunk( dynamic_cast<Chunk *>( chunk->getThis() ) );
}

void AddChunkUpdate::write( Framework::StreamWriter *zWriter )
{
    zWriter->schreibe( (char *)&AddChunkUpdateType::ID, 4 );
    int dimensionID = chunk->getDimensionId();
    zWriter->schreibe( (char *)&dimensionID, 4 );
    Framework::Punkt center = chunk->getCenter();
    zWriter->schreibe( (char *)&center.x, 4 );
    zWriter->schreibe( (char *)&center.y, 4 );
    chunk->save( zWriter );
}


AddChunkUpdateType::AddChunkUpdateType()
    : WorldUpdateType( ID )
{}