/* $Id: gamereplay.cpp,v 1.4 2005/06/28 13:55:19 chfreund Exp $ */ #include "gamereplay.hpp" #include "world.hpp" #include "random.hpp" #include "player.hpp" #include "message.hpp" GameReplay::GameReplay( const char* filename, World* world, Random* random ) : m_out( filename ) { Uint32 worldSize = world->getSerializeBufferSize(); Uint8* buffer = new Uint8[Serialize::sizeOf() + worldSize]; Uint8* bufferPointer = buffer; Serialize::serialize( worldSize, bufferPointer ); world->serialize( bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + worldSize ); delete[] buffer; Uint32 randomSize = random->getSerializeBufferSize(); buffer = new Uint8[Serialize::sizeOf() + randomSize]; bufferPointer = buffer; Serialize::serialize( randomSize, bufferPointer ); random->serialize( bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + randomSize ); delete[] buffer; } GameReplay::~GameReplay() { m_out.close(); } void GameReplay::addEcho( const EchoMessage& echo ) { RecordType recordType = ECHO; Uint32 echoSize = echo.getSerializeBufferSize(); Uint8* buffer = new Uint8[Serialize::sizeOf() + Serialize::sizeOf() + echoSize]; Uint8* bufferPointer = buffer; Serialize::serialize( recordType, bufferPointer ); Serialize::serialize( echoSize, bufferPointer ); echo.serialize( bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + Serialize::sizeOf() + echoSize ); delete[] buffer; } void GameReplay::addPlayerEnter( const Player& player ) { RecordType recordType = PLAYER_ENTER; Uint32 playerSize = player.getSerializeBufferSize(); Uint8* buffer = new Uint8[Serialize::sizeOf() + Serialize::sizeOf() + playerSize]; Uint8* bufferPointer = buffer; Serialize::serialize( recordType, bufferPointer ); Serialize::serialize( playerSize, bufferPointer ); player.serialize( bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + Serialize::sizeOf() + playerSize ); delete[] buffer; } void GameReplay::addPlayerQuit( Uint8 playerIndex ) { RecordType recordType = PLAYER_QUIT; Uint8* buffer = new Uint8[Serialize::sizeOf() + Serialize::sizeOf()]; Uint8* bufferPointer = buffer; Serialize::serialize( recordType, bufferPointer ); Serialize::serialize( playerIndex, bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + Serialize::sizeOf() ); delete[] buffer; } void GameReplay::addChatMessage( const String& message ) { RecordType recordType = CHAT_MESSAGE; Uint32 messageSize = message.getSerializeBufferSize(); Uint8* buffer = new Uint8[Serialize::sizeOf() + Serialize::sizeOf() + messageSize]; Uint8* bufferPointer = buffer; Serialize::serialize( recordType, bufferPointer ); Serialize::serialize( messageSize, bufferPointer ); message.serialize( bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() + Serialize::sizeOf() + messageSize ); delete[] buffer; } void GameReplay::addBookmark() { RecordType recordType = BOOKMARK; Uint8* buffer = new Uint8[Serialize::sizeOf()]; Uint8* bufferPointer = buffer; Serialize::serialize( recordType, bufferPointer ); m_out.write( reinterpret_cast( buffer ), Serialize::sizeOf() ); delete[] buffer; }