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


AddChunkUpdate::AddChunkUpdate( Chunk* chunk )
    : WorldUpdate( AddChunkUpdateType::ID, 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->setChunk( dynamic_cast<Chunk*>(chunk->getThis()), chunk->getCenter() );
}

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 );
}

Chunk* AddChunkUpdate::zChunk() const
{
    return chunk;
}


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