bool BVavatar::Init( BetaVerse *beta, iVosApi *sec )
{
LOG( "BVavatar::Init", 3, "starting..." );
bv = beta;
sector = meta_cast<A3DL::Sector>( sec->GetVobject() );
CS_ASSERT( sector.isValid() );
CS_ASSERT( bv->site.isValid() );
vRef<A3DL::Cube> avatarObj =
bv->site->createVobject3<A3DL::Cube, Talkative, Avatar>();
avatarObj->setDefaultPolicy( "core:read-only,property:ready-only,talkative:send-only" );
avatarObj->setPosition( 0, 0, 0 );
avatarObj->setScalingHT( .3, .3, .3 );
avatarObj->setOrientation( 0, 1, 0, 0 );
avatarObj->setOrientationHT( -1, 0, 0, 90 );
avatarObj->getMaterial()->setColor( .5, .2, .2 );
vRef<Avatar> avatar = meta_cast<Avatar>( avatarObj );
avatar->setNick( bv->prefs->GetNick() );
/* don't need this if we create the avatar locally and hence set position/orientation
*/
avatar3d = meta_cast<A3DL::Object3D>( avatarObj );
CS_ASSERT( avatar3d.isValid() );
avatar3d->setDefaultPolicy( "core:accept-all" );
double x, y, z;
double a, b, c, r;
x = y = z = a = b = c = r = 0.0;
try
{
avatar3d->getPosition(x, y, z);
avatar3d->getOrientation(a, b, c, r);
r *= M_PI/180.0;
}
catch( std::runtime_error &e )
{
LOG( "BVavatar::Init", 2, "Runtime error while setting position orientation with avatar." );
}
LOG( "BVavatar::Init", 3, "x: " << x << " y: " << y << " z: " << z );
LOG( "BVavatar::Init", 3, "a: " << a << " b: " << b << " c: " << c << " r: " << r );
sector->insertChild( -1, bv->prefs->GetNick(), avatarObj );
if( avatar->isLocal() )
{
talk = meta_cast<LocalTalkative>( avatar );
if( !talk.isValid() )
{
avatar->addType( "misc:talkative" );
talk = meta_cast<LocalTalkative>( avatar );
}
}
else
{
CS_ASSERT( bv->site.isValid() );
talk = bv->site->createVobject<LocalTalkative>();
CS_ASSERT( talk.isValid() );
LOG( "BVavatar::Init", 3, "talk.getURLstr(): " << talk->getURLstr() );
talk->setDefaultPolicy( "core:read-only,talkative:send-only" );
try
{
if( !avatar.isValid() )
LOG( "BVavatar::Init", 3, "Avatar not vaild, can't add chat." );
vRef<Talkative> t = meta_cast<Talkative>( avatar );
if( t.isValid() )
{
LOG( "BVavatar::Init", 3, "t.getURLstr(): " << t->getURLstr() );
t->addRelay( talk );
}
else
LOG( "BVavatar::Init", 3, "Remote talkative not valid." );
LOG( "BVavatar::Init", 3, "adding relay from " << avatar->getURLstr()
<< " to " << talk->getURLstr() );
}
catch( std::runtime_error e )
{
LOG( "BVavatar::Init", 2, "Got a runtime error adding ourselves as a relay to the avatar talkative, we won't receive any messages (!?!?)." << e.what() );
}
}
try
{
vRef<Talkative> tk = meta_cast<Talkative>(sector);
if( tk.isValid() )
tk->addRelay( talk );
LOG( "BVavatar::Init", 3, "adding relay from " << tk->getURLstr()
<< " to " << talk->getURLstr() );
}
catch(std::runtime_error e)
{
LOG("BVavatar::Init", 2, "Got a runtime error adding ourselves as a relay to the sector talkative, we won't receive messages from the sector. (!?!?)");
}
LOG( "BVavatar::Init", 3, "ended." );
return true;
}
_______________________________________________ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d