/* $Id: noncollidablepool.cpp,v 1.7 2005/10/05 14:46:45 chfreund Exp $ */ #include "noncollidablepool.hpp" /**********************************************************/ NonCollidablePool::NonCollidablePool( World* wp ) : m_world( wp ) { } /**********************************************************/ NonCollidablePool::~NonCollidablePool() { reset(); } /**********************************************************/ bool NonCollidablePool::removeObject( const Object* const object ) { if( object->getID() >= SMALLEST_EXPLOSION && object->getID() <= BIGGEST_EXPLOSION ) { m_ExplosionPool.removeItem( reinterpret_cast(object) ); return true; } if( object->getID() >= SMALLEST_SMOKE && object->getID() <= BIGGEST_SMOKE ) { m_SmokePool.removeItem( reinterpret_cast(object) ); return true; } return false; } /**********************************************************/ void NonCollidablePool::reset() { m_ExplosionPool.reset(); m_SmokePool.reset(); } /**********************************************************/ Uint32 NonCollidablePool::getSerializeBufferSize() const { return 2*Serialize::sizeOf() + // adds additional size for debugging (see serialize.hpp), // but only, if the tags are used PLUS_TAG_SIZE( 1 ); } /**********************************************************/ void NonCollidablePool::serialize( Uint8*& bufferPointer ) const { START_SERIALIZED_SIZE_CHECK( bufferPointer ); Sint32 explosionPoolSize = m_ExplosionPool.getPoolSize(), smokePoolSize = m_SmokePool.getPoolSize(); Serialize::serialize( explosionPoolSize, bufferPointer ); Serialize::serialize( smokePoolSize, bufferPointer ); // expands to tag serialization SERIALIZE_TAG( bufferPointer ); END_SERIALIZED_SIZE_CHECK( bufferPointer, NonCollidablePool ); } /**********************************************************/ void NonCollidablePool::deserialize( Uint8*& bufferPointer ) { reset(); Sint32 explosionPoolSize = 0, smokePoolSize = 0; Serialize::deserialize( bufferPointer, explosionPoolSize ); Serialize::deserialize( bufferPointer, smokePoolSize ); // expands to tag deserialization DESERIALIZE_TAG( bufferPointer ); // blow up the pools for( Sint32 i = 0; i < explosionPoolSize; i++ ) { m_ExplosionPool.newItem(); } m_ExplosionPool.removeAllItems(); for( Sint32 i = 0; i < smokePoolSize; i++ ) { m_SmokePool.newItem(); } m_SmokePool.removeAllItems(); } /**********************************************************/