//----------------------------------------------------------------------------- // Purpose: // Input : height - //----------------------------------------------------------------------------- void CNPC_CeilingTurret::SetHeight( float height ) { Vector forward, right, up; AngleVectors( GetLocalAngles(), &forward, &right, &up ); Vector mins = ( forward * -16.0f ) + ( right * -16.0f ); Vector maxs = ( forward * 16.0f ) + ( right * 16.0f ) + ( up * -height ); if ( mins.x > maxs.x ) { V_swap( mins.x, maxs.x ); } if ( mins.y > maxs.y ) { V_swap( mins.y, maxs.y ); } if ( mins.z > maxs.z ) { V_swap( mins.z, maxs.z ); } SetCollisionBounds( mins, maxs ); }
void CUtlVector<T, A>::Swap(CUtlVector< T, A > &vec) { m_Memory.Swap(vec.m_Memory); V_swap(m_Size, vec.m_Size); #ifndef _X360 V_swap(m_pElements, vec.m_pElements); #endif }
void CHLTVDirector::CreateShotFromEvent( CHLTVGameEvent *event ) { // show event at least for 2 more seconds after it occured const char *name = event->m_Event->GetName(); bool bPlayerHurt = Q_strcmp( "player_hurt", name ) == 0; bool bPlayerKilled = Q_strcmp( "player_death", name ) == 0; bool bRoundStart = Q_strcmp( "round_start", name ) == 0; bool bRoundEnd = Q_strcmp( "round_end", name ) == 0; if ( bPlayerHurt || bPlayerKilled ) { CBaseEntity *victim = UTIL_PlayerByUserId( event->m_Event->GetInt("userid") ); CBaseEntity *attacker = UTIL_PlayerByUserId( event->m_Event->GetInt("attacker") ); if ( !victim ) return; if ( attacker == victim || attacker == NULL ) { // player killed self or by WORLD StartChaseCameraShot( victim->entindex(), 0, 96, 20, 0, false ); } else // attacker != NULL { // check if we would show it from ineye view bool bInEye = (bPlayerKilled && RandomFloat(0,1) > 0.33) || (bPlayerHurt && RandomFloat(0,1) > 0.66); // if we show ineye view, show it more likely from killer if ( RandomFloat(0,1) > (bInEye?0.3f:0.7f) ) { V_swap( attacker, victim ); } // hurting a victim is shown as chase more often // view from behind over head // lower view point, dramatic // view over shoulder, randomly left or right StartChaseCameraShot( victim->entindex(), attacker->entindex(), 96, -20, (RandomFloat()>0.5)?30:-30, bInEye ); } // shot 2 seconds after death/hurt m_nNextShotTick = MIN( m_nNextShotTick, (event->m_Tick+TIME_TO_TICKS(2.0)) ); } else if ( bRoundStart || bRoundEnd ) { StartBestFixedCameraShot( false ); } else { DevMsg( "No known TV shot for event %s\n", name ); } }
bool CHL2MPRules::ShouldCollide( int collisionGroup0, int collisionGroup1 ) { if ( collisionGroup0 > collisionGroup1 ) { // swap so that lowest is always first V_swap(collisionGroup0,collisionGroup1); } if ( (collisionGroup0 == COLLISION_GROUP_PLAYER || collisionGroup0 == COLLISION_GROUP_PLAYER_MOVEMENT) && collisionGroup1 == COLLISION_GROUP_WEAPON ) { return false; } return BaseClass::ShouldCollide( collisionGroup0, collisionGroup1 ); }
CDispMeshEvent::CDispMeshEvent( unsigned short *pIndices, int indexCount, CCoreDispInfo *pDispInfo ) { m_pIndices = pIndices; m_indexCount = indexCount; int maxIndex = 0; for ( int i = 0; i < indexCount; i++ ) { if ( pIndices[i] > maxIndex ) { maxIndex = pIndices[i]; } } for ( int i = 0; i < indexCount/2; i++ ) { V_swap( pIndices[i], pIndices[(indexCount-i)-1] ); } int count = maxIndex + 1; m_verts.SetCount( count ); for ( int i = 0; i < count; i++ ) { m_verts[i] = pDispInfo->GetVert(i); } }
void CUtlVector<T, A>::Sort(int(__cdecl *pfnCompare)(const T *, const T *)) { typedef int(__cdecl *QSortCompareFunc_t)(const void *, const void *); if(Count() <= 1) return; if(Base()) { qsort(Base(), Count(), sizeof(T), (QSortCompareFunc_t)(pfnCompare)); } else { assert(0); // this path is untested // if you want to sort vectors that use a non-sequential memory allocator, // you'll probably want to patch in a quicksort algorithm here // I just threw in this bubble sort to have something just in case... for(int i = m_Size - 1; i >= 0; --i) { for(int j = 1; j <= i; ++j) { if(pfnCompare(&Element(j - 1), &Element(j)) < 0) { V_swap(Element(j - 1), Element(j)); } } } } }
// Sets fade parameters void CClientAlphaProperty::SetFade( float flGlobalFadeScale, float flDistFadeStart, float flDistFadeEnd ) { if( flDistFadeStart > flDistFadeEnd ) { V_swap( flDistFadeStart, flDistFadeEnd ); } // If a negative value is provided for the MIN fade distance, then base it off the MAX. if( flDistFadeStart < 0 ) { flDistFadeStart = flDistFadeEnd + flDistFadeStart; if( flDistFadeStart < 0 ) { flDistFadeStart = 0; } } Assert( flDistFadeStart >= 0 && flDistFadeStart <= 65535 ); Assert( flDistFadeEnd >= 0 && flDistFadeEnd <= 65535 ); m_nDistFadeStart = (uint16)flDistFadeStart; m_nDistFadeEnd = (uint16)flDistFadeEnd; m_flFadeScale = flGlobalFadeScale; }
bool CGameRules::ShouldCollide( int collisionGroup0, int collisionGroup1 ) { if ( collisionGroup0 > collisionGroup1 ) { // swap so that lowest is always first V_swap(collisionGroup0,collisionGroup1); } if ( (collisionGroup0 == COLLISION_GROUP_PLAYER || collisionGroup0 == COLLISION_GROUP_PLAYER_MOVEMENT) && collisionGroup1 == COLLISION_GROUP_PUSHAWAY ) { return false; } if ( collisionGroup0 == COLLISION_GROUP_DEBRIS && collisionGroup1 == COLLISION_GROUP_PUSHAWAY ) { // let debris and multiplayer objects collide return true; } // Only let projectile blocking debris collide with projectiles if ( collisionGroup0 == COLLISION_GROUP_PROJECTILE && collisionGroup1 == COLLISION_GROUP_DEBRIS_BLOCK_PROJECTILE ) return true; if ( collisionGroup0 == COLLISION_GROUP_DEBRIS_BLOCK_PROJECTILE || collisionGroup1 == COLLISION_GROUP_DEBRIS_BLOCK_PROJECTILE ) return false; // -------------------------------------------------------------------------- // NOTE: All of this code assumes the collision groups have been sorted!!!! // NOTE: Don't change their order without rewriting this code !!! // -------------------------------------------------------------------------- // Don't bother if either is in a vehicle... if (( collisionGroup0 == COLLISION_GROUP_IN_VEHICLE ) || ( collisionGroup1 == COLLISION_GROUP_IN_VEHICLE )) return false; if ( ( collisionGroup1 == COLLISION_GROUP_DOOR_BLOCKER ) && ( collisionGroup0 != COLLISION_GROUP_NPC ) ) return false; if ( ( collisionGroup0 == COLLISION_GROUP_PLAYER ) && ( collisionGroup1 == COLLISION_GROUP_PASSABLE_DOOR ) ) return false; if ( collisionGroup0 == COLLISION_GROUP_DEBRIS || collisionGroup0 == COLLISION_GROUP_DEBRIS_TRIGGER ) { // put exceptions here, right now this will only collide with COLLISION_GROUP_NONE return false; } // Dissolving guys only collide with COLLISION_GROUP_NONE if ( (collisionGroup0 == COLLISION_GROUP_DISSOLVING) || (collisionGroup1 == COLLISION_GROUP_DISSOLVING) ) { if ( collisionGroup0 != COLLISION_GROUP_NONE ) return false; } // doesn't collide with other members of this group // or debris, but that's handled above if ( collisionGroup0 == COLLISION_GROUP_INTERACTIVE_DEBRIS && collisionGroup1 == COLLISION_GROUP_INTERACTIVE_DEBRIS ) return false; // This change was breaking HL2DM // Adrian: TEST! Interactive Debris doesn't collide with the player. if ( collisionGroup0 == COLLISION_GROUP_INTERACTIVE_DEBRIS && ( collisionGroup1 == COLLISION_GROUP_PLAYER_MOVEMENT || collisionGroup1 == COLLISION_GROUP_PLAYER ) ) return false; if ( collisionGroup0 == COLLISION_GROUP_BREAKABLE_GLASS && collisionGroup1 == COLLISION_GROUP_BREAKABLE_GLASS ) return false; // interactive objects collide with everything except debris & interactive debris if ( collisionGroup1 == COLLISION_GROUP_INTERACTIVE && collisionGroup0 != COLLISION_GROUP_NONE ) return false; // Projectiles hit everything but debris, weapons, + other projectiles if ( collisionGroup1 == COLLISION_GROUP_PROJECTILE ) { if ( collisionGroup0 == COLLISION_GROUP_DEBRIS || collisionGroup0 == COLLISION_GROUP_WEAPON || collisionGroup0 == COLLISION_GROUP_PROJECTILE ) { return false; } } // Don't let vehicles collide with weapons // Don't let players collide with weapons... // Don't let NPCs collide with weapons // Weapons are triggers, too, so they should still touch because of that if ( collisionGroup1 == COLLISION_GROUP_WEAPON ) { if ( collisionGroup0 == COLLISION_GROUP_VEHICLE || collisionGroup0 == COLLISION_GROUP_PLAYER || collisionGroup0 == COLLISION_GROUP_NPC ) { return false; } } // collision with vehicle clip entity?? if ( collisionGroup0 == COLLISION_GROUP_VEHICLE_CLIP || collisionGroup1 == COLLISION_GROUP_VEHICLE_CLIP ) { // yes then if it's a vehicle, collide, otherwise no collision // vehicle sorts lower than vehicle clip, so must be in 0 if ( collisionGroup0 == COLLISION_GROUP_VEHICLE ) return true; // vehicle clip against non-vehicle, no collision return false; } return true; }