- Статус
- Оффлайн
- Регистрация
- 25 Мар 2025
- Сообщения
- 29
- Реакции
- 21
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
REVERSED STUFF ONLY FOR PREDICT THROW NADES!!! WITHOUT THROW, DETONATE, EXPIRE TIME(REVERSE THIS SHIT URSELF)
its can usage for grenade warning or other something stuff
its can usage for grenade warning or other something stuff
C++:
bool CPhysics::Simulate( )
{
GameTrace_t pTrace;
PhysicsAddGravityMove( m_vecMove );
PhysicsPushEntity( m_vecStart, m_vecMove, pTrace, m_pOwner );
if ( m_bDetonated )
return true;
if ( pTrace.m_flFraction != 1.0f )
ResolveFlyCollisionBounce( pTrace );
m_vecStart = pTrace.m_vecEndPos;
return false;
}
void CPhysics::PhysicsAddGravityMove( Vector& vecMove )
{
float flGravity = sv_gravity->GetFloat( ) * 0.4f;
vecMove.x = m_vecVelocity.x * 0.015625f;
vecMove.y = m_vecVelocity.y * 0.015625f;
float newZVelocity = m_vecVelocity.z - ( flGravity * 0.015625f );
vecMove.z = ( ( m_vecVelocity.z + newZVelocity ) / 2.0f ) * 0.015625f;
m_vecVelocity.z = newZVelocity;
}
void CPhysics::PhysicsClipVelocity( const Vector& vecIn, const Vector& vecNormal, Vector& vecOut, float flOverBounce )
{
constexpr float STOP_EPSILON = 0.1f;
float flBackOff = vecIn.DotProduct( vecNormal ) * flOverBounce;
for ( int i{ }; i < 3; ++i )
{
vecOut[ i ] = vecIn[ i ] - ( vecNormal[ i ] * flBackOff );
if ( vecOut[ i ] > -STOP_EPSILON && vecOut[ i ] < STOP_EPSILON )
vecOut[ i ] = 0.0f;
}
}
void CPhysics::PhysicsPushEntity( Vector& vecStart, const Vector& vecMove, GameTrace_t& pTrace, C_CSPlayerPawn* pPawn )
{
Vector vecEnd = vecStart + vecMove;
TraceHull( vecStart, vecEnd, pTrace, pPawn );
}
void CPhysics::ResolveFlyCollisionBounce( GameTrace_t& pTrace )
{
// Get the impact surface's elasticity.
float flSurfaceElasticity = 1.0f;
if ( pTrace.m_pHitEntity )
{
SchemaClassInfoData_t* pClassInfo = nullptr;
pTrace.m_pHitEntity->GetSchemaClassInfo( &pClassInfo );
if ( pClassInfo == nullptr )
return;
const FNV1A_t uHashedName = FNV1A::Hash( pClassInfo->szName );
if ( uHashedName == FNV1A::HashConst( "C_BreakableProp" )
|| uHashedName == FNV1A::HashConst( "C_DynamicProp" ) )
{
if ( uHashedName != FNV1A::HashConst( "C_FuncBrush" )
&& uHashedName != FNV1A::HashConst( "C_BaseDoor" )
&& uHashedName != FNV1A::HashConst( "C_CSPlayerPawn" )
&& uHashedName != FNV1A::HashConst( "C_BaseEntity" ) )
{
PhysicsPushEntity( m_vecStart, m_vecMove, pTrace, pTrace.m_pHitEntity );
m_vecVelocity *= 0.4f;
return;
}
}
if ( pTrace.m_pHitEntity->IsBasePlayerPawn( ) )
flSurfaceElasticity = 0.3f;
if ( !pTrace.DidHitWorld( ) )
{
if ( pTrace.m_pHitEntity->IsBasePlayerPawn( )
&& m_pLastHitEntity == pTrace.m_pHitEntity )
return;
m_pLastHitEntity = pTrace.m_pHitEntity;
}
}
Vector vecVelocity;
PhysicsClipVelocity( m_vecVelocity, pTrace.m_vecNormal, vecVelocity, 2.0f );
vecVelocity *= std::clamp( flSurfaceElasticity * 0.45f, 0.0f, 0.9f );
if ( pTrace.m_vecNormal.z > 0.7f )
{
float flSpeed = vecVelocity.LengthSqr( );
if ( flSpeed > 96000.0f )
{
float flLength = vecVelocity.Normalized( ).DotProduct( pTrace.m_vecNormal );
if ( flLength > 0.5f )
vecVelocity *= 1.5f - flLength;
}
if ( flSpeed < 400.0f )
m_vecVelocity.Zero( );
else
{
m_vecVelocity = vecVelocity;
PhysicsPushEntity( pTrace.m_vecEndPos, vecVelocity * ( ( 1.0f - pTrace.m_flFraction ) * 0.015625f ), pTrace, m_pOwner );
}
}
else
{
m_vecVelocity = vecVelocity;
PhysicsPushEntity( pTrace.m_vecEndPos, vecVelocity * ( ( 1.0f - pTrace.m_flFraction ) * 0.015625f ), pTrace, m_pOwner );
}
}
Последнее редактирование: