/* $Id: goal.cpp,v 1.5 2005/10/16 17:53:05 pohlt Exp $ */ #include "global.hpp" #include "spriteset.hpp" #include "world.hpp" #include "goal.hpp" /**********************************************************/ Goal::Goal() { setDrawBeforeCollidableObjects( true ); } /**********************************************************/ Goal::~Goal() { } /**********************************************************/ bool Goal::initialize( const Vector& pos, const Vector& vel ) { m_pos = pos; m_vel = vel; m_newDirDelay = m_initialNewDirDelay; return true; } /**********************************************************/ void Goal::update() { // move goal m_pos += m_vel; // no DT ?! bool newVelocityOk = true; if( m_pos.x-m_size < 0 || m_pos.x+m_size > m_worldPointer->getMap()->getSizeX() ) { m_vel.x *= -1; newVelocityOk = false; } if( m_pos.y-m_size < 0 || m_pos.y+m_size > m_worldPointer->getMap()->getSizeY() ) { m_vel.y *= -1; newVelocityOk = false; } if( --m_newDirDelay <= 0 && newVelocityOk ) { m_vel = m_worldPointer->getRandom().getVector( m_vel.abs() ); m_newDirDelay = m_initialNewDirDelay; } } /**********************************************************/ bool Goal::testInside( const Vector& pos ) { return (pos - m_pos).abs2() <= m_size*m_size; } /**********************************************************/ Uint32 Goal::getSerializeBufferSize() const { return NonCollidableObject::getSerializeBufferSize() + Serialize::sizeOf( m_newDirDelay ) PLUS_TAG_SIZE( 1 ); } /**********************************************************/ void Goal::serialize( Uint8*& bufferPointer ) const { // expands to a check of the buffer movement START_OBJECT_SERIALIZED_SIZE_CHECK( bufferPointer ); NonCollidableObject::serialize( bufferPointer ); Serialize::serialize( m_newDirDelay, bufferPointer ); // expands to tag serialization SERIALIZE_OBJECT_TAG( bufferPointer ); // expands to a check of the buffer movement END_OBJECT_SERIALIZED_SIZE_CHECK( bufferPointer, Goal ); } /**********************************************************/ void Goal::deserialize( Uint8*& bufferPointer ) { NonCollidableObject::deserialize( bufferPointer ); Serialize::deserialize( bufferPointer, m_newDirDelay ); // expands to tag deserialization INFO( "testing ball object tag\n" ); DESERIALIZE_OBJECT_TAG( bufferPointer ); } /**********************************************************/