本文整理汇总了C++中QAngle::Length方法的典型用法代码示例。如果您正苦于以下问题:C++ QAngle::Length方法的具体用法?C++ QAngle::Length怎么用?C++ QAngle::Length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QAngle
的用法示例。
在下文中一共展示了QAngle::Length方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AngularMove
//-----------------------------------------------------------------------------
// Purpose: Calculate m_vecVelocity and m_flNextThink to reach vecDest from
// GetLocalOrigin() traveling at flSpeed. Just like LinearMove, but rotational.
// Input : vecDestAngle -
// flSpeed -
//-----------------------------------------------------------------------------
void CBaseToggle::AngularMove( const QAngle &vecDestAngle, float flSpeed )
{
ASSERTSZ(flSpeed != 0, "AngularMove: no speed is defined!");
m_vecFinalAngle = vecDestAngle;
m_movementType = MOVE_TOGGLE_ANGULAR;
// Already there?
if (vecDestAngle == GetLocalAngles())
{
MoveDone();
return;
}
// set destdelta to the vector needed to move
QAngle vecDestDelta = vecDestAngle - GetLocalAngles();
// divide by speed to get time to reach dest
float flTravelTime = vecDestDelta.Length() / flSpeed;
const float MinTravelTime = 0.01f;
if ( flTravelTime < MinTravelTime )
{
// If we only travel for a short time, we can fail WillSimulateGamePhysics()
flTravelTime = MinTravelTime;
flSpeed = vecDestDelta.Length() / flTravelTime;
}
// set m_flNextThink to trigger a call to AngularMoveDone when dest is reached
SetMoveDoneTime( flTravelTime );
// scale the destdelta vector by the time spent traveling to get velocity
SetLocalAngularVelocity( vecDestDelta * (1.0 / flTravelTime) );
}
示例2: SampleAngularVelocity
//-----------------------------------------------------------------------------
// Purpose: Returns the magnitude of the entity's angular velocity.
//-----------------------------------------------------------------------------
float CPointAngularVelocitySensor::SampleAngularVelocity(CBaseEntity *pEntity)
{
if (pEntity->GetMoveType() == MOVETYPE_VPHYSICS)
{
IPhysicsObject *pPhys = pEntity->VPhysicsGetObject();
if (pPhys != NULL)
{
Vector vecVelocity;
AngularImpulse vecAngVelocity;
pPhys->GetVelocity(&vecVelocity, &vecAngVelocity);
QAngle angles;
pPhys->GetPosition( NULL, &angles );
float dt = gpGlobals->curtime - GetLastThink();
if ( dt == 0 )
dt = 0.1;
// HACKHACK: We don't expect a real 'delta' orientation here, just enough of an error estimate to tell if this thing
// is trying to move, but failing.
QAngle delta = angles - m_lastOrientation;
if ( ( delta.Length() / dt ) < ( vecAngVelocity.Length() * 0.01 ) )
{
return 0.0f;
}
m_lastOrientation = angles;
if ( m_bUseHelper == false )
{
return vecAngVelocity.Length();
}
else
{
Vector vLine = m_vecAxis - GetAbsOrigin();
VectorNormalize( vLine );
Vector vecWorldAngVelocity;
pPhys->LocalToWorldVector( &vecWorldAngVelocity, vecAngVelocity );
float flDot = DotProduct( vecWorldAngVelocity, vLine );
return flDot;
}
}
}
else
{
QAngle vecAngVel = pEntity->GetLocalAngularVelocity();
float flMax = MAX(fabs(vecAngVel[PITCH]), fabs(vecAngVel[YAW]));
return MAX(flMax, fabs(vecAngVel[ROLL]));
}
return 0;
}
示例3: PostDataUpdate
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void C_ObjectSentrygun::PostDataUpdate( DataUpdateType_t updateType )
{
BaseClass::PostDataUpdate( updateType );
if ( m_bLastTurtled != m_bTurtled )
{
if ( m_bTurtled )
{
m_flStartedTurtlingAt = gpGlobals->curtime;
m_flStartedUnTurtlingAt = 0;
}
else
{
m_flStartedUnTurtlingAt = gpGlobals->curtime;
m_flStartedTurtlingAt = 0;
}
}
if ( m_nLastAnimationParity != m_nAnimationParity )
{
m_flCycle = 0.0f;
}
bool changed = false;
QAngle angleDiff;
angleDiff = ( GetAbsAngles() - m_angPrevLocalAngles );
for (int i = 0;i < 3; i++ )
{
angleDiff[i] = UTIL_AngleMod( angleDiff[ i ] );
}
if ( angleDiff.Length() > 0.1f )
{
changed = true;
}
if ( updateType == DATA_UPDATE_CREATED || changed )
{
// Orient it
m_vecCurAngles.y = UTIL_AngleMod( GetLocalAngles().y );
RecomputeOrientation();
}
else if ( m_nPrevOrientationParity != m_nOrientationParity )
{
if ( changed )
{
RecomputeOrientation();
}
}
}
示例4: Smooth
void Aimbot::Smooth(C_BasePlayer* player, QAngle& angle, CUserCmd* cmd)
{
if (!Settings::Aimbot::Smooth::enabled)
return;
if (Settings::AntiAim::Pitch::enabled || Settings::AntiAim::Yaw::enabled)
return;
if (!shouldAim || !player)
return;
if (Settings::Aimbot::silent)
return;
QAngle viewAngles = QAngle(0.f, 0.f, 0.f);
engine->GetViewAngles(viewAngles);
QAngle delta = angle - viewAngles;
Math::NormalizeAngles(delta);
float smooth = powf(Settings::Aimbot::Smooth::value, 0.4f); // Makes more slider space for actual useful values
smooth = std::min(0.99f, smooth);
if (Settings::Aimbot::Smooth::Salting::enabled)
Salt(smooth);
QAngle toChange = QAngle();
int type = (int) Settings::Aimbot::Smooth::type;
if (type == (int) SmoothType::SLOW_END)
toChange = delta - delta * smooth;
else if (type == (int) SmoothType::CONSTANT || type == (int) SmoothType::FAST_END)
{
float coeff = (1.0f - smooth) / delta.Length() * 4.f;
if (type == (int) SmoothType::FAST_END)
coeff = powf(coeff, 2.f) * 10.f;
coeff = std::min(1.f, coeff);
toChange = delta * coeff;
}
angle = viewAngles + toChange;
}
示例5: UpdateEntityPosition
//-----------------------------------------------------------------------------
// Purpose: Sends Hammer an update to the current position
//-----------------------------------------------------------------------------
void NWCEdit::UpdateEntityPosition( CBaseEntity *pEntity )
{
const Vector &newPos = pEntity->GetAbsOrigin();
const QAngle &newAng = pEntity->GetAbsAngles();
DevMsg( 1, "%s\n origin %f %f %f\n angles %f %f %f\n", pEntity->GetClassname(), newPos.x, newPos.y, newPos.z, newAng.x, newAng.y, newAng.z );
if ( Ragdoll_IsPropRagdoll(pEntity) )
{
char tmp[2048];
Ragdoll_GetAngleOverrideString( tmp, sizeof(tmp), pEntity );
DevMsg( 1, "pose: %s\n", tmp );
}
if ( !(pEntity->ObjectCaps() & FCAP_WCEDIT_POSITION) )
return;
// can't do this unless in edit mode
if ( !engine->IsInEditMode() )
return;
int entIndex = pEntity->entindex();
Vector pos = g_EntityPositions[entIndex];
EditorSendResult_t result = Editor_BadCommand;
const char *pClassname = STRING(g_EntityClassnames[entIndex]);
if ( pEntity->GetModel() && modelinfo->GetModelType(pEntity->GetModel()) == mod_brush )
{
QAngle xformAngles;
RotationDelta( g_EntityOrientations[entIndex], newAng, &xformAngles );
if ( xformAngles.Length() > 1e-4 )
{
result = Editor_RotateEntity( pClassname, pos.x, pos.y, pos.z, xformAngles );
}
else
{
// don't call through for an identity rotation, may just increase error
result = Editor_OK;
}
}
else
{
if ( Ragdoll_IsPropRagdoll(pEntity) )
{
char tmp[2048];
Ragdoll_GetAngleOverrideString( tmp, sizeof(tmp), pEntity );
result = Editor_SetKeyValue( pClassname, pos.x, pos.y, pos.z, "angleOverride", tmp );
if ( result != Editor_OK )
goto error;
}
result = Editor_SetKeyValue( pClassname, pos.x, pos.y, pos.z, "angles", CFmtStr("%f %f %f", newAng.x, newAng.y, newAng.z) );
}
if ( result != Editor_OK )
goto error;
result = Editor_SetKeyValue( pClassname, pos.x, pos.y, pos.z, "origin", CFmtStr("%f %f %f", newPos.x, newPos.y, newPos.z) );
if ( result != Editor_OK )
goto error;
NDebugOverlay::EntityBounds(pEntity, 0, 255, 0, 0 ,5);
// save the update
RememberEntityPosition( pEntity );
return;
error:
NDebugOverlay::EntityBounds(pEntity, 255, 0, 0, 0 ,5);
}