/* ================ rvClientEntity::Think ================ */ void rvClientEntity::Think( void ) { if ( bindMaster.IsValid() && bindMaster->IsInterpolated() ) { UpdateBind( true ); } else { UpdateBind( false ); } UpdateSound(); Present(); }
/* ================ rvClientEntity::Bind ================ */ void rvClientEntity::Bind( rvClientEntity* master, jointHandle_t joint ) { Unbind(); if ( joint != INVALID_JOINT && !master->GetAnimator() ) { gameLocal.Warning( "rvClientEntity::Bind: entity '%s' cannot support skeletal models.", master->GetName() ); joint = INVALID_JOINT; } bindMasterClient = master; bindJoint = joint; bindOrigin = worldOrigin; bindAxis = worldAxis; bindNode.AddToEnd( bindMasterClient->clientEntities ); UpdateBind( false ); }
/* ================ rvClientEntity::ClientUpdateView ================ */ void rvClientEntity::ClientUpdateView( void ) { UpdateBind( true ); Present(); }
/* ================ rvClientEffect::Think ================ */ void rvClientEffect::Think ( void ) { // If we are bound to an entity that is now hidden we can just not render if looping, otherwise stop the effect if( bindMaster && (bindMaster->GetRenderEntity()->hModel && bindMaster->GetModelDefHandle() == -1) ) { if ( renderEffect.loop ) { return; } Stop ( ); } // RAVEN BEGIN // jnewquist: Tag scope and callees to track allocations using "new". MEM_SCOPED_TAG(tag,MA_EFFECT); // RAVEN END // If there is a valid effect handle and we havent started playing // and effect yet then see if its time if( effectDefHandle < 0 && renderEffect.declEffect ) { if( renderEffect.startTime >= 0.0f ) { // Make sure our origins are all straight before starting the effect UpdateBind(); renderEffect.attenuation = 1.0f; // if the rendereffect needs sound give it an emitter. if( renderEffect.referenceSoundHandle <= 0 ) { if( gameRenderWorld->EffectDefHasSound( &renderEffect) ) { renderEffect.referenceSoundHandle = soundSystem->AllocSoundEmitter( SOUNDWORLD_GAME ); } else { renderEffect.referenceSoundHandle = -1; } } // Add the render effect effectDefHandle = gameRenderWorld->AddEffectDef( &renderEffect, gameLocal.time ); if ( effectDefHandle < 0 ) { PostEventMS( &EV_Remove, 0 ); } } return; } // If we lost our effect def handle then just remove ourself if( effectDefHandle < 0 ) { PostEventMS ( &EV_Remove, 0 ); return; } // Dont do anything else if its not a new client frame if( !gameLocal.isNewFrame ) { return; } // Check to see if the player can possibly see the effect or not renderEffect.inConnectedArea = true; if( bindMaster ) { renderEffect.inConnectedArea = gameLocal.InPlayerConnectedArea( bindMaster ); } // Update the bind UpdateBind(); // Update the actual render effect now if( gameRenderWorld->UpdateEffectDef( effectDefHandle, &renderEffect, gameLocal.time ) ) { FreeEffectDef ( ); PostEventMS( &EV_Remove, 0 ); return; } }