本文整理汇总了C++中Vector2D::NormalizeInPlace方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector2D::NormalizeInPlace方法的具体用法?C++ Vector2D::NormalizeInPlace怎么用?C++ Vector2D::NormalizeInPlace使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector2D
的用法示例。
在下文中一共展示了Vector2D::NormalizeInPlace方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FaceTowards
bool CHostageImprov::FaceTowards(const Vector &target, float deltaT)
{
bool bError = false;
Vector2D to = (target - GetFeet()).Make2D();
#ifndef PLAY_GAMEDLL
to.NormalizeInPlace();
#else
// TODO: fix test demo
float_precision float_x = target.x - GetFeet().x;
float_precision float_y = target.y - GetFeet().y;
float_precision flLen = to.Length();
if (flLen <= 0)
{
to.x = 1;
to.y = 0;
}
else
{
to.x = float_x / flLen;
to.y = float_y / flLen;
}
#endif
float moveAngle = GetMoveAngle();
Vector2D lat(BotCOS(moveAngle), BotSIN(moveAngle));
Vector2D dir(-lat.y, lat.x);
float_precision dot = DotProduct(to, dir);
if (DotProduct(to, lat) < 0.0f)
{
if (dot >= 0.0f)
dot = 1.0f;
else
dot = -1.0f;
bError = true;
}
const float maxTurnRate = 0.05f;
if (bError || Q_fabs(dot) >= maxTurnRate)
{
const float tolerance = 300.0f;
float moveRatio = dot * deltaT * tolerance + moveAngle;
BotCOS(moveRatio);
BotSIN(moveRatio);
m_moveAngle = moveRatio;
m_hostage->pev->angles.y = moveRatio;
return false;
}
return true;
}
示例2: Panic
void CCSBot::Panic(CBasePlayer *pEnemy)
{
if (IsSurprised())
return;
Vector2D dir(BotCOS(pev->v_angle.y), BotSIN(pev->v_angle.y));
Vector2D perp(-dir.y, dir.x);
Vector spot;
if (GetProfile()->GetSkill() >= 0.5f)
{
Vector2D toEnemy = (pEnemy->pev->origin - pev->origin).Make2D();
toEnemy.NormalizeInPlace();
float along = DotProduct(toEnemy, dir);
float c45 = 0.7071f;
float size = 100.0f;
real_t shift = RANDOM_FLOAT(-75.0, 75.0);
if (along > c45)
{
spot.x = pev->origin.x + dir.x * size + perp.x * shift;
spot.y = pev->origin.y + dir.y * size + perp.y * shift;
}
else if (along < -c45)
{
spot.x = pev->origin.x - dir.x * size + perp.x * shift;
spot.y = pev->origin.y - dir.y * size + perp.y * shift;
}
else if (DotProduct(toEnemy, perp) > 0.0)
{
spot.x = pev->origin.x + perp.x * size + dir.x * shift;
spot.y = pev->origin.y + perp.y * size + dir.y * shift;
}
else
{
spot.x = pev->origin.x - perp.x * size + dir.x * shift;
spot.y = pev->origin.y - perp.y * size + dir.y * shift;
}
}
else
{
const float offset = 200.0f;
real_t side = RANDOM_FLOAT(-offset, offset) * 2.0f;
spot.x = pev->origin.x - dir.x * offset + perp.x * side;
spot.y = pev->origin.y - dir.y * offset + perp.y * side;
}
spot.z = pev->origin.z + RANDOM_FLOAT(-50.0, 50.0);
// we are stunned for a moment
m_surpriseDelay = RANDOM_FLOAT(0.1, 0.2);
m_surpriseTimestamp = gpGlobals->time;
SetLookAt("Panic", &spot, PRIORITY_HIGH, 0, 0, 5.0);
PrintIfWatched("Aaaah!\n");
}
示例3: __MAKE_VHOOK
bool CHostageImprov::__MAKE_VHOOK(IsPlayerLookingAtMe)(CBasePlayer *other, float cosTolerance) const
{
Vector2D toOther = (other->pev->origin - GetCentroid()).Make2D();
toOther.NormalizeInPlace();
UTIL_MakeVectors(other->pev->punchangle + other->pev->v_angle);
Vector2D otherDir = gpGlobals->v_forward.Make2D();
otherDir.NormalizeInPlace();
if (-cosTolerance > DotProduct(toOther, otherDir))
{
if (IsVisible(other->EyePosition()))
{
return true;
}
}
return false;
}
示例4: __MAKE_VHOOK
// Return true if we can see any part of the player
// Check parts in order of importance. Return the first part seen in "visParts" if it is non-NULL.
bool CCSBot::__MAKE_VHOOK(IsVisible)(CBasePlayer *player, bool testFOV, unsigned char *visParts) const
{
Vector spot = player->pev->origin;
VisiblePartType testVisParts = NONE;
// finish chest check
if (IsVisible(&spot, testFOV))
testVisParts |= CHEST;
// check top of head
spot = spot + Vector(0, 0, 25.0f);
if (IsVisible(&spot, testFOV))
testVisParts |= HEAD;
// check feet
const float standFeet = 34.0f;
const float crouchFeet = 14.0f;
if (player->pev->flags & FL_DUCKING)
spot.z = player->pev->origin.z - crouchFeet;
else
spot.z = player->pev->origin.z - standFeet;
// check feet
if (IsVisible(&spot, testFOV))
testVisParts |= FEET;
// check "edges"
const float edgeOffset = 13.0f;
Vector2D dir = (player->pev->origin - pev->origin).Make2D();
dir.NormalizeInPlace();
Vector2D perp(-dir.y, dir.x);
spot = player->pev->origin + Vector(perp.x * edgeOffset, perp.y * edgeOffset, 0);
if (IsVisible(&spot, testFOV))
testVisParts |= LEFT_SIDE;
spot = player->pev->origin - Vector(perp.x * edgeOffset, perp.y * edgeOffset, 0);
if (IsVisible(&spot, testFOV))
testVisParts |= RIGHT_SIDE;
if (visParts != NULL)
*visParts = testVisParts;
if (testVisParts != NONE)
return true;
return false;
}
示例5: SetStepData
void vParticleRenderer_Trail::SetStepData( vParticle *p, vTrailStep_t &step )
{
step.center = p->vecPos;
Vector2D up = vecLastPos - p->vecPos;
up.NormalizeInPlace();
Vector2D right( -up.y, up.x );
right *= p->GetCurrentSize();
step.a = p->vecPos - right;
step.b = p->vecPos + right;
}
示例6: Simulate
void vParticleOperator_GravityWorld::Simulate( vParticle *parent )
{
float dot_z = DotProduct( MainViewForward(), Vector( 0, 0, -1 ) );
float rotation_dir = Sign( dot_z );
int vx, vy, w, t;
vgui::surface()->GetFullscreenViewport( vx, vy, w, t );
Vector screen;
if ( ScreenTransform( MainViewOrigin() + Vector( 0, 0, 100 ), screen ) )
ScreenTransform( MainViewOrigin() - Vector( 0, 0, 100 ), screen );
screen *= Vector( 0.5f, -0.5f, 0 );
screen += Vector( 0.5f, 0.5f, 0 );
Vector2D gravity_center( w * screen.x, t * screen.y );
Vector2D delta = parent->vecPos - gravity_center;
float screenLength = delta.NormalizeInPlace();
delta *= rotation_dir * -1.0f;
Vector2D accel = delta * vParticle::GetRelativeScale() * GetImpulse( parent ) * amt;
float speedMult = 1.0f;
if ( rotation_dir > 0 )
{
float drag = RemapValClamped( rotation_dir, 0.5f, 1, 1, 0.00001f );
ScaleByFrametime( drag );
speedMult = RemapValClamped( (screenLength/vParticle::GetRelativeScale()), 0, 1000, 0, 1 ) * (1.0f - drag) + drag;
}
parent->vecVelocity += accel;
parent->vecVelocity *= speedMult;
}
示例7: GetAmountOfPlayerVisible
float GetAmountOfPlayerVisible(Vector vecSrc, CBaseEntity *entity)
{
float retval = 0.0f;
TraceResult tr;
Vector spot;
const float topOfHead = 25.0f;
const float standFeet = 34.0f;
const float crouchFeet = 14.0f;
const float edgeOffset = 13.0f;
if (!entity->IsPlayer())
{
UTIL_TraceLine(vecSrc, entity->pev->origin, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval = 1.0f;
return retval;
}
UTIL_TraceLine(vecSrc, entity->pev->origin, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval += 0.4f;
spot = entity->pev->origin + Vector(0, 0, topOfHead);
UTIL_TraceLine(vecSrc, spot, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval += 0.2f;
spot = entity->pev->origin;
if (entity->pev->flags & FL_DUCKING)
spot.z -= crouchFeet;
else
spot.z -= standFeet;
UTIL_TraceLine(vecSrc, spot, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval += 0.2f;
Vector2D dir = (entity->pev->origin - vecSrc).Make2D();
dir.NormalizeInPlace();
Vector2D perp(-dir.y * edgeOffset, dir.x * edgeOffset);
spot = entity->pev->origin + Vector(perp.x, perp.y, 0);
UTIL_TraceLine(vecSrc, spot, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval += 0.1;
spot = entity->pev->origin - Vector(perp.x, perp.y, 0);
UTIL_TraceLine(vecSrc, spot, ignore_monsters, NULL, &tr);
if (tr.flFraction == 1.0f)
retval += 0.1;
return retval;
}