本文整理汇总了C++中ConVar类的典型用法代码示例。如果您正苦于以下问题:C++ ConVar类的具体用法?C++ ConVar怎么用?C++ ConVar使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ConVar类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SoftwareCursorChangedCB
void SoftwareCursorChangedCB( IConVar *pVar, const char *pOldValue, float fOldValue )
{
ConVar *pConVar = (ConVar *)pVar;
vgui::surface()->SetSoftwareCursor( pConVar->GetBool() || UseVR() );
}
示例2: RoundInit
void RoundInit (void)
{
// this is called at the start of each round
g_roundEnded = false;
// check team economics
g_botManager->CheckTeamEconomics (TEAM_TERRORIST);
g_botManager->CheckTeamEconomics (TEAM_COUNTER);
for (int i = 0; i < engine->GetMaxClients (); i++)
{
if (g_botManager->GetBot (i))
g_botManager->GetBot (i)->NewRound ();
g_radioSelect[i] = 0;
}
g_waypoint->SetBombPosition (true);
g_waypoint->ClearGoalScore ();
g_bombSayString = false;
g_timeBombPlanted = 0.0f;
g_timeNextBombUpdate = 0.0f;
g_leaderChoosen[TEAM_COUNTER] = false;
g_leaderChoosen[TEAM_TERRORIST] = false;
g_lastRadioTime[0] = 0.0f;
g_lastRadioTime[1] = 0.0f;
g_botsCanPause = false;
// SyPB Pro P.15
char *Plugin_INI = FormatBuffer("%s/addons/amxmodx/configs/plugins-dmkd.ini", GetModName());
if (TryFileOpen(Plugin_INI))
{
if (CVAR_GET_FLOAT("HsK_Deathmatch_Plugin_load_SyPB") == 1)
sypb_gamemod.SetInt(1);
else
sypb_gamemod.SetInt(0);
}
// SyPB Pro P.2 // SyPB Pro P.15
Plugin_INI = FormatBuffer("%s/addons/amxmodx/configs/plugins-zplague.ini", GetModName());
if (TryFileOpen(Plugin_INI)) // Getting GameMod
{
float delayTime = (CVAR_GET_FLOAT("zp_delay") > 0) ? CVAR_GET_FLOAT("zp_delay") : CVAR_GET_FLOAT("zp_gamemode_delay");
if (delayTime > 0)
{
sypb_gamemod.SetInt(2);
sypb_walkallow.SetInt(0);
//g_DelayTimer = engine->GetTime() + delayTime + 6.0f;
// SyPB Pro P.34 - ZP TIME FIXED
g_DelayTimer = engine->GetTime() + delayTime + 1.99f;
}
}
// SyPB Pro P.11
Plugin_INI = FormatBuffer("%s/addons/amxmodx/configs/zombiehell.cfg", GetModName());
if (TryFileOpen(Plugin_INI) && CVAR_GET_FLOAT("zh_zombie_maxslots") > 0)
{
sypb_gamemod.SetInt(4);
sypb_walkallow.SetInt(0);
extern ConVar sypb_quota;
sypb_quota.SetInt(static_cast <int> (CVAR_GET_FLOAT("zh_zombie_maxslots")));
}
// SyPB Pro P.29 - Support CSBTE Final
Plugin_INI = FormatBuffer("%s/addons/amxmodx/configs/bte_player.ini", GetModName());
if (TryFileOpen(Plugin_INI))
{
const int Const_GameModes = 12;
int bteGameModAi[Const_GameModes] =
{
0, 0, 1, 3, 0, 2, 2, 2, 2, 4, 2, 3
};//n, t, d, d, g, g, z, z, z, z, z, n
char *bteGameINI[Const_GameModes] =
{
"plugins-none",
"plugins-td",
"plugins-dm",
"plugins-dr",
"plugins-gd",
"plugins-ghost",
"plugins-zb1",
"plugins-zb3",
"plugins-zb4",
"plugins-ze",
"plugins-zse",
"plugins-npc"
};
for (int i = 0; i < Const_GameModes; i++)
{
if (TryFileOpen(FormatBuffer("%s/addons/amxmodx/configs/%s.ini", GetModName(), bteGameINI[i])))
{
sypb_gamemod.SetInt(bteGameModAi[i]);
//.........这里部分代码省略.........
示例3: ApplyMouse
//-----------------------------------------------------------------------------
// Purpose: ApplyMouse -- applies mouse deltas to CUserCmd
// Input : viewangles -
// *cmd -
// mouse_x -
// mouse_y -
//-----------------------------------------------------------------------------
void CInput::ApplyMouse( int nSlot, QAngle& viewangles, CUserCmd *cmd, float mouse_x, float mouse_y )
{
PerUserInput_t &user = GetPerUser( nSlot );
//roll the view angles so roll is 0 (the HL2 assumed state) and mouse adjustments are relative to the screen.
//Assuming roll is unchanging, we want mouse left to translate to screen left at all times (same for right, up, and down)
if ( !((in_strafe.GetPerUser( nSlot ).state & 1) || lookstrafe.GetInt()) )
{
if ( CAM_IsThirdPerson() && thirdperson_platformer.GetInt() )
{
if ( mouse_x )
{
// use the mouse to orbit the camera around the player, and update the idealAngle
user.m_vecCameraOffset[ YAW ] -= m_yaw.GetFloat() * mouse_x;
cam_idealyaw.SetValue( user.m_vecCameraOffset[ YAW ] - viewangles[ YAW ] );
// why doesn't this work??? CInput::AdjustYaw is why
//cam_idealyaw.SetValue( cam_idealyaw.GetFloat() - m_yaw.GetFloat() * mouse_x );
}
}
else
{
// Otherwize, use mouse to spin around vertical axis
{
viewangles[YAW] -= m_yaw.GetFloat() * mouse_x;
}
}
}
else
{
// If holding strafe key or mlooking and have lookstrafe set to true, then apply
// horizontal mouse movement to sidemove.
cmd->sidemove += m_side.GetFloat() * mouse_x;
}
// If mouselooking and not holding strafe key, then use vertical mouse
// to adjust view pitch.
if (!(in_strafe.GetPerUser( nSlot ).state & 1))
{
if ( CAM_IsThirdPerson() && thirdperson_platformer.GetInt() )
{
if ( mouse_y )
{
// use the mouse to orbit the camera around the player, and update the idealAngle
user.m_vecCameraOffset[ PITCH ] += m_pitch->GetFloat() * mouse_y;
cam_idealpitch.SetValue( user.m_vecCameraOffset[ PITCH ] - viewangles[ PITCH ] );
// why doesn't this work??? CInput::AdjustYaw is why
//cam_idealpitch.SetValue( cam_idealpitch.GetFloat() + m_pitch->GetFloat() * mouse_y );
}
}
else
{
{
viewangles[PITCH] += m_pitch->GetFloat() * mouse_y;
}
// Check pitch bounds
if (viewangles[PITCH] > cl_pitchdown.GetFloat())
{
viewangles[PITCH] = cl_pitchdown.GetFloat();
}
if (viewangles[PITCH] < -cl_pitchup.GetFloat())
{
viewangles[PITCH] = -cl_pitchup.GetFloat();
}
}
}
else
{
// Otherwise if holding strafe key and noclipping, then move upward
/* if ((in_strafe.state & 1) && IsNoClipping() )
{
cmd->upmove -= m_forward.GetFloat() * mouse_y;
}
else */
{
// Default is to apply vertical mouse movement as a forward key press.
cmd->forwardmove -= m_forward.GetFloat() * mouse_y;
}
}
// Finally, add mouse state to usercmd.
// NOTE: Does rounding to int cause any issues? ywb 1/17/04
cmd->mousedx = (int)mouse_x;
cmd->mousedy = (int)mouse_y;
}
示例4: SecondaryAttack
void CASW_Weapon_Assault_Shotgun::SecondaryAttack()
{
// Only the player fires this way so we can cast
CASW_Player *pPlayer = GetCommander();
if (!pPlayer)
return;
CASW_Marine *pMarine = GetMarine();
if (!pMarine)
return;
//Must have ammo
bool bUsesSecondary = UsesSecondaryAmmo();
bool bUsesClips = UsesClipsForAmmo2();
int iAmmoCount = pMarine->GetAmmoCount(m_iSecondaryAmmoType);
bool bInWater = ( pMarine->GetWaterLevel() == 3 );
if ( (bUsesSecondary &&
( ( bUsesClips && m_iClip2 <= 0) ||
( !bUsesClips && iAmmoCount<=0 )
) )
|| bInWater || m_bInReload )
{
SendWeaponAnim( ACT_VM_DRYFIRE );
BaseClass::WeaponSound( EMPTY );
m_flNextSecondaryAttack = gpGlobals->curtime + 0.5f;
return;
}
BaseClass::WeaponSound( SPECIAL1 );
#ifndef CLIENT_DLL
pMarine->GetMarineSpeech()->Chatter(CHATTER_GRENADE);
Vector vecSrc = pMarine->Weapon_ShootPosition();
Vector vecThrow;
// check for turning on lag compensation
if (pPlayer && pMarine->IsInhabited())
{
CASW_Lag_Compensation::RequestLagCompensation( pPlayer, pPlayer->GetCurrentUserCommand() );
}
vecThrow = UTIL_LaunchVector(vecSrc, pPlayer->GetCrosshairTracePos(), asw_vindicator_grenade_gravity.GetFloat()) * 8.0f * asw_vindicator_grenade_velocity.GetFloat();
QAngle angAiming = pPlayer->EyeAnglesWithCursorRoll();
float fGrenadeDamage = MarineSkills()->GetSkillBasedValueByMarine(pMarine, ASW_MARINE_SKILL_GRENADES, ASW_MARINE_SUBSKILL_GRENADE_INCENDIARY_DMG);
float fGrenadeRadius = MarineSkills()->GetSkillBasedValueByMarine(pMarine, ASW_MARINE_SKILL_GRENADES, ASW_MARINE_SUBSKILL_GRENADE_RADIUS);
if (asw_debug_marine_damage.GetBool())
{
Msg("Grenade damage = %f radius = %f\n", fGrenadeDamage, fGrenadeRadius);
}
// check the grenade fits where we want to spawn it
Ray_t ray;
trace_t pm;
ray.Init( pMarine->WorldSpaceCenter(), vecSrc, -Vector(4,4,4), Vector(4,4,4) );
UTIL_TraceRay( ray, MASK_SOLID, pMarine, COLLISION_GROUP_PROJECTILE, &pm );
if (pm.fraction < 1.0f)
vecSrc = pm.endpos;
CASW_Grenade_Vindicator::Vindicator_Grenade_Create(
fGrenadeDamage,
fGrenadeRadius,
vecSrc, angAiming, vecThrow, AngularImpulse(0,0,0), pMarine, this );
pMarine->OnWeaponFired( this, 1, true );
#endif
SendWeaponAnim( GetPrimaryAttackActivity() );
pMarine->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN_PRIMARY );
// Decrease ammo
if ( bUsesClips )
{
m_iClip2 -= 1;
}
else
{
pMarine->RemoveAmmo( 1, m_iSecondaryAmmoType );
}
#ifndef CLIENT_DLL
ASWFailAdvice()->OnMarineUsedSecondary();
CEffectData data;
data.m_vOrigin = GetAbsOrigin();
//data.m_vNormal = dir;
//data.m_flScale = (float)amount;
CPASFilter filter( data.m_vOrigin );
filter.SetIgnorePredictionCull(true);
DispatchParticleEffect( "muzzleflash_grenadelauncher_main", PATTACH_POINT_FOLLOW, this, "muzzle", false, -1, &filter );
#endif
// Can shoot again immediately
m_flNextPrimaryAttack = gpGlobals->curtime + 0.5f;
// Can blow up after a short delay (so have time to release mouse button)
m_flNextSecondaryAttack = gpGlobals->curtime + 1.0f;
}
示例5: UpdateDebugOverlayFonts
void UpdateDebugOverlayFonts()
{
if (hFontFG == vgui::INVALID_FONT || bFGDirty) {
DevMsg("UpdateDebugOverlayFonts: regenerating FG font\n");
hFontFG = g_pVGuiSurface->CreateFont();
const char *name = cvar_fg_name.GetString();
int tall = cvar_fg_tall.GetInt();
int weight = cvar_fg_weight.GetInt();
int blur = cvar_fg_blur.GetInt();
int scanlines = cvar_fg_scanlines.GetInt();
int flags = vgui::ISurface::FONTFLAG_NONE;
if (cvar_fg_italic .GetBool()) flags |= vgui::ISurface::FONTFLAG_ITALIC;
if (cvar_fg_underline .GetBool()) flags |= vgui::ISurface::FONTFLAG_UNDERLINE;
if (cvar_fg_strikeout .GetBool()) flags |= vgui::ISurface::FONTFLAG_STRIKEOUT;
if (cvar_fg_antialias .GetBool()) flags |= vgui::ISurface::FONTFLAG_ANTIALIAS;
if (cvar_fg_dropshadow.GetBool()) flags |= vgui::ISurface::FONTFLAG_DROPSHADOW;
if (cvar_fg_outline .GetBool()) flags |= vgui::ISurface::FONTFLAG_OUTLINE;
bool bFGOK = g_pVGuiSurface->SetFontGlyphSet(hFontFG, name, tall, weight, blur, scanlines, flags);
DevMsg("UpdateDebugOverlayFonts: FG: %-3s %08lx\n", (bFGOK ? "OK" : "BAD"), hFontFG);
bFGDirty = false;
}
if (hFontBG == vgui::INVALID_FONT || bBGDirty) {
DevMsg("UpdateDebugOverlayFonts: regenerating BG font\n");
hFontBG = g_pVGuiSurface->CreateFont();
const char *name = cvar_bg_name.GetString();
int tall = cvar_bg_tall.GetInt();
int weight = cvar_bg_weight.GetInt();
int blur = cvar_bg_blur.GetInt();
int scanlines = cvar_bg_scanlines.GetInt();
int flags = vgui::ISurface::FONTFLAG_NONE;
if (cvar_bg_italic .GetBool()) flags |= vgui::ISurface::FONTFLAG_ITALIC;
if (cvar_bg_underline .GetBool()) flags |= vgui::ISurface::FONTFLAG_UNDERLINE;
if (cvar_bg_strikeout .GetBool()) flags |= vgui::ISurface::FONTFLAG_STRIKEOUT;
if (cvar_bg_antialias .GetBool()) flags |= vgui::ISurface::FONTFLAG_ANTIALIAS;
if (cvar_bg_dropshadow.GetBool()) flags |= vgui::ISurface::FONTFLAG_DROPSHADOW;
if (cvar_bg_outline .GetBool()) flags |= vgui::ISurface::FONTFLAG_OUTLINE;
bool bBGOK = g_pVGuiSurface->SetFontGlyphSet(hFontBG, name, tall, weight, blur, scanlines, flags);
DevMsg("UpdateDebugOverlayFonts: BG: %-3s %08lx\n", (bBGOK ? "OK" : "BAD"), hFontBG);
bBGDirty = false;
}
}
示例6: Paint
void CASWHudCrosshair::Paint( void )
{
VPROF_BUDGET( "CASWHudCrosshair::Paint", VPROF_BUDGETGROUP_ASW_CLIENT );
if ( !crosshair.GetBool() )
return;
if ( engine->IsDrawingLoadingImage() || engine->IsPaused() || !engine->IsActiveApp() )
return;
C_ASW_Player* pPlayer = C_ASW_Player::GetLocalASWPlayer();
if ( !pPlayer )
return;
if ( pPlayer->GetFlags() & FL_FROZEN )
return;
if ( pPlayer->entindex() != render->GetViewEntity() )
return;
m_curViewAngles = CurrentViewAngles();
m_curViewOrigin = CurrentViewOrigin();
C_ASW_Marine *pMarine = pPlayer->GetViewMarine();
bool bControllingTurret = (pMarine && pMarine->IsControllingTurret());
if ( bControllingTurret )
{
PaintTurretTextures();
return; // don't draw the normal cross hair in addition
}
int x, y;
GetCurrentPos( x, y );
int nCrosshair = GetCurrentCrosshair( x, y );
if ( nCrosshair == m_nCrosshairTexture )
{
if ( pPlayer->IsSniperScopeActive() )
{
DrawSniperScope( x, y );
}
else
{
if ( pPlayer->GetASWControls() != 1 )
return;
DrawDirectionalCrosshair( x, y, YRES( asw_crosshair_progress_size.GetInt() ) );
}
}
else if ( nCrosshair != -1 )
{
const float fCrosshairScale = 1.0f;
int w = YRES( 20 ) * fCrosshairScale;
int h = YRES( 20 ) * fCrosshairScale;
surface()->DrawSetColor( m_clrCrosshair );
surface()->DrawSetTexture( nCrosshair );
surface()->DrawTexturedRect( x - w, y - h, x + w, y + h );
}
// icons attached to the cursor
x += 32; y += 16; // move them down and to the right a bit
if ( m_bShowGiveAmmo )
{
// todo: this text should in the ammo report tooltip?
const wchar_t *ammoName = g_pVGuiLocalize->Find(GetAmmoName(m_iShowGiveAmmoType));
DrawAttachedIcon(m_nGiveAmmoTexture, x, y, ammoName);
}
else if (m_bShowGiveHealth)
{
DrawAttachedIcon(m_nGiveHealthTexture, x, y);
}
}
示例7: OnThink
void CASWHudCrosshair::OnThink()
{
C_ASW_Player* pPlayer = C_ASW_Player::GetLocalASWPlayer();
if ( !pPlayer )
return;
PaintReloadProgressBar();
C_ASW_Marine *pMarine = pPlayer->GetViewMarine();
bool bControllingTurret = (pMarine && pMarine->IsControllingTurret());
if (!bControllingTurret)
return;
C_ASW_Remote_Turret *pTurret = pMarine->GetRemoteTurret();
if (!pTurret)
return;
Vector vecWeaponPos = pTurret->GetAbsOrigin();
QAngle angWeapon = pTurret->EyeAngles();
Vector vecWeaponDir;
AngleVectors(angWeapon, &vecWeaponDir);
// increase lock time of all targets and discard out of range/facing ones
for (int k=0;k<ASW_MAX_TURRET_TARGETS;k++)
{
C_BaseEntity *pEnt = m_TurretTarget[k].Get();
if (pEnt)
{
// validate the target
bool bValid = true;
Vector diff = pEnt->GetAbsOrigin() - vecWeaponPos;
if (diff.Length() > ASW_TURRET_TARGET_RANGE || !pEnt->ShouldDraw())
{
bValid = false;
}
else
{
diff.NormalizeInPlace();
float flDot = diff.Dot(vecWeaponDir);
if (flDot < asw_turret_dot.GetFloat())
bValid = false;
}
// fade it in or out appropriately
if (bValid)
{
if (m_fTurretTargetLock[k] < 1.0f)
{
m_fTurretTargetLock[k] += gpGlobals->frametime * 2;
if (m_fTurretTargetLock[k] > 1.0f)
m_fTurretTargetLock[k] = 1.0f;
}
}
else
{
if (m_fTurretTargetLock[k] <= 0)
{
m_TurretTarget[k] = NULL;
}
else
{
m_fTurretTargetLock[k] -= gpGlobals->frametime * 2;
if (m_fTurretTargetLock[k] < 0.0f)
m_fTurretTargetLock[k] = 0.0f;
}
}
}
}
// check for adding new targets to the array
for ( int i = 0; i < IASW_Client_Aim_Target::AutoList().Count(); i++ )
{
IASW_Client_Aim_Target *pAimTarget = static_cast< IASW_Client_Aim_Target* >( IASW_Client_Aim_Target::AutoList()[ i ] );
C_BaseEntity *pEnt = pAimTarget->GetEntity();
if (!pEnt || !pAimTarget->IsAimTarget() || !pEnt->ShouldDraw())
continue;
// check he's in range
Vector vecAlienPos = pEnt->WorldSpaceCenter();
float flAlienDist = vecAlienPos.DistTo(vecWeaponPos);
if (flAlienDist > ASW_TURRET_TARGET_RANGE)
continue;
// check it's in front of us
Vector dir = vecAlienPos - vecWeaponPos;
dir.NormalizeInPlace();
if (dir.Dot(vecWeaponDir) <= asw_turret_dot.GetFloat())
continue;
// we've got a possible target, add him to the list if he's not in there already
bool bAlreadyInArray = false;
int iSpace = -1;
for (int k=0;k<ASW_MAX_TURRET_TARGETS;k++)
{
if (m_TurretTarget[k].Get() == pEnt)
{
bAlreadyInArray = true;
break;
}
if (iSpace == -1 && m_TurretTarget[k].Get() == NULL)
//.........这里部分代码省略.........
示例8: DrawSkin_DX9_Internal
//-----------------------------------------------------------------------------
// Draws the shader
//-----------------------------------------------------------------------------
void DrawSkin_DX9_Internal( CBaseVSShader *pShader, IMaterialVar** params, IShaderDynamicAPI *pShaderAPI, IShaderShadow* pShaderShadow,
bool bHasFlashlight, VertexLitGeneric_DX9_Vars_t &info, VertexCompressionType_t vertexCompression,
CBasePerMaterialContextData **pContextDataPtr )
{
bool bHasBaseTexture = (info.m_nBaseTexture != -1) && params[info.m_nBaseTexture]->IsTexture();
bool bHasBump = (info.m_nBumpmap != -1) && params[info.m_nBumpmap]->IsTexture();
bool bHasBaseTextureWrinkle = bHasBaseTexture &&
(info.m_nWrinkle != -1) && params[info.m_nWrinkle]->IsTexture() &&
(info.m_nStretch != -1) && params[info.m_nStretch]->IsTexture();
bool bHasBumpWrinkle = bHasBump &&
(info.m_nNormalWrinkle != -1) && params[info.m_nNormalWrinkle]->IsTexture() &&
(info.m_nNormalStretch != -1) && params[info.m_nNormalStretch]->IsTexture();
bool bHasVertexColor = IS_FLAG_SET( MATERIAL_VAR_VERTEXCOLOR );
bool bHasVertexAlpha = IS_FLAG_SET( MATERIAL_VAR_VERTEXALPHA );
bool bIsAlphaTested = IS_FLAG_SET( MATERIAL_VAR_ALPHATEST ) != 0;
bool bHasSelfIllum = IS_FLAG_SET( MATERIAL_VAR_SELFILLUM ) != 0;
bool bHasSelfIllumFresnel = ( bHasSelfIllum ) && ( info.m_nSelfIllumFresnel != -1 ) && ( params[info.m_nSelfIllumFresnel]->GetIntValue() != 0 );
bool bHasSelfIllumMask = ( bHasSelfIllum ) && (info.m_nSelfIllumMask != -1) && params[info.m_nSelfIllumMask]->IsTexture();
// Tie these to specular
bool bHasPhong = (info.m_nPhong != -1) && ( params[info.m_nPhong]->GetIntValue() != 0 );
bool bHasSpecularExponentTexture = (info.m_nPhongExponentTexture != -1) && params[info.m_nPhongExponentTexture]->IsTexture();
bool bHasPhongTintMap = bHasSpecularExponentTexture && (info.m_nPhongAlbedoTint != -1) && ( params[info.m_nPhongAlbedoTint]->GetIntValue() != 0 );
bool bHasDiffuseWarp = (info.m_nDiffuseWarpTexture != -1) && params[info.m_nDiffuseWarpTexture]->IsTexture();
bool bHasPhongWarp = (info.m_nPhongWarpTexture != -1) && params[info.m_nPhongWarpTexture]->IsTexture();
bool bHasNormalMapAlphaEnvmapMask = IS_FLAG_SET( MATERIAL_VAR_NORMALMAPALPHAENVMAPMASK );
#if !defined( _X360 )
bool bIsDecal = IS_FLAG_SET( MATERIAL_VAR_DECAL );
#endif
// Rimlight must be set to non-zero to trigger rim light combo (also requires Phong)
bool bHasRimLight = r_rimlight.GetBool() && bHasPhong && (info.m_nRimLight != -1) && ( params[info.m_nRimLight]->GetIntValue() != 0 );
bool bHasRimMaskMap = bHasSpecularExponentTexture && bHasRimLight && (info.m_nRimMask != -1) && ( params[info.m_nRimMask]->GetIntValue() != 0 );
int nDetailBlendMode = ( info.m_nDetailTextureCombineMode == -1 ) ? 0 : params[info.m_nDetailTextureCombineMode]->GetIntValue();
float fBlendFactor=( info.m_nDetailTextureBlendFactor == -1 )? 1 : params[info.m_nDetailTextureBlendFactor]->GetFloatValue();
BlendType_t nBlendType = pShader->EvaluateBlendRequirements( info.m_nBaseTexture, true );
bool bFullyOpaque = (nBlendType != BT_BLENDADD) && (nBlendType != BT_BLEND) && !bIsAlphaTested && !bHasFlashlight; //dest alpha is free for special use
bool hasDetailTexture = ( info.m_nDetail != -1 ) && params[info.m_nDetail]->IsTexture();
CSkin_DX9_Context *pContextData = reinterpret_cast< CSkin_DX9_Context *> ( *pContextDataPtr );
if ( ! pContextData )
{
pContextData = new CSkin_DX9_Context;
*pContextDataPtr = pContextData;
}
if( pShader->IsSnapshotting() )
{
// look at color and alphamod stuff.
// Unlit generic never uses the flashlight
bool bHasEnvmap = !bHasFlashlight && params[info.m_nEnvmap]->IsTexture();
bool bHasNormal = params[info.m_nBumpmap]->IsTexture();
bool bCanUseBaseAlphaPhongMaskFastPath = (info.m_nBaseMapAlphaPhongMask != -1) && ( params[info.m_nBaseMapAlphaPhongMask]->GetIntValue() != 0 );
if ( ! ( params[info.m_nBaseTexture]->GetTextureValue()->IsTranslucent() ) )
bCanUseBaseAlphaPhongMaskFastPath = true;
pContextData->m_bFastPath =
(! bHasBump ) &&
(! bHasSpecularExponentTexture ) &&
(! bHasPhongTintMap ) &&
(! bHasPhongWarp ) &&
(! bHasRimLight ) &&
(! hasDetailTexture ) &&
bCanUseBaseAlphaPhongMaskFastPath &&
(! bHasSelfIllum );
// Alpha test: FIXME: shouldn't this be handled in CBaseVSShader::SetInitialShadowState
pShaderShadow->EnableAlphaTest( bIsAlphaTested );
if( info.m_nAlphaTestReference != -1 && params[info.m_nAlphaTestReference]->GetFloatValue() > 0.0f )
{
pShaderShadow->AlphaFunc( SHADER_ALPHAFUNC_GEQUAL, params[info.m_nAlphaTestReference]->GetFloatValue() );
}
const int nShadowFilterMode = g_pHardwareConfig->GetShadowFilterMode();
if( bHasFlashlight )
{
if (params[info.m_nBaseTexture]->IsTexture())
{
pShader->SetAdditiveBlendingShadowState( info.m_nBaseTexture, true );
}
if( bIsAlphaTested )
{
// disable alpha test and use the zfunc zequals since alpha isn't guaranteed to
// be the same on both the regular pass and the flashlight pass.
pShaderShadow->EnableAlphaTest( false );
pShaderShadow->DepthFunc( SHADER_DEPTHFUNC_EQUAL );
//.........这里部分代码省略.........
示例9: RunCommand
//-----------------------------------------------------------------------------
// Purpose: Predicts a single movement command for player
// Input : *moveHelper -
// *player -
// *u -
//-----------------------------------------------------------------------------
void CASW_Prediction::RunCommand( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper *moveHelper )
{
#if !defined( NO_ENTITY_PREDICTION )
VPROF( "CPrediction::RunCommand" );
#if defined( _DEBUG )
char sz[ 32 ];
Q_snprintf( sz, sizeof( sz ), "runcommand%04d", ucmd->command_number );
PREDICTION_TRACKVALUECHANGESCOPE( sz );
#endif
C_ASW_Player *pASWPlayer = (C_ASW_Player*)player;
Assert( pASWPlayer );
StartCommand( player, ucmd );
pASWPlayer->SetHighlightEntity( C_BaseEntity::Instance( ucmd->crosshair_entity ) );
// Set globals appropriately
gpGlobals->curtime = player->m_nTickBase * TICK_INTERVAL;
gpGlobals->frametime = TICK_INTERVAL;
g_pGameMovement->StartTrackPredictionErrors( player );
// TODO
// TODO: Check for impulse predicted?
// Do weapon selection
if ( ucmd->weaponselect != 0 )
{
C_BaseCombatWeapon *weapon = dynamic_cast< C_BaseCombatWeapon * >( CBaseEntity::Instance( ucmd->weaponselect ) );
if (weapon)
{
pASWPlayer->ASWSelectWeapon(weapon, 0); //ucmd->weaponsubtype); // asw - subtype var used for sending marine profile index instead
}
}
// Latch in impulse.
IClientVehicle *pVehicle = player->GetVehicle();
if ( ucmd->impulse )
{
// Discard impulse commands unless the vehicle allows them.
// FIXME: UsingStandardWeapons seems like a bad filter for this.
// The flashlight is an impulse command, for example.
if ( !pVehicle || player->UsingStandardWeaponsInVehicle() )
{
player->m_nImpulse = ucmd->impulse;
}
}
// Get button states
player->UpdateButtonState( ucmd->buttons );
// TODO
// CheckMovingGround( player, ucmd->frametime );
// TODO
// g_pMoveData->m_vecOldAngles = player->pl.v_angle;
// Copy from command to player unless game .dll has set angle using fixangle
// if ( !player->pl.fixangle )
{
player->SetLocalViewAngles( ucmd->viewangles );
}
// Call standard client pre-think
RunPreThink( player );
// Call Think if one is set
RunThink( player, TICK_INTERVAL );
// Setup input.
{
SetupMove( player, ucmd, moveHelper, g_pMoveData );
}
// Run regular player movement if we're not controlling a marine
if ( asw_allow_detach.GetBool() )
{
if ( !pVehicle )
{
Assert( g_pGameMovement );
g_pGameMovement->ProcessMovement( player, g_pMoveData );
}
else
{
pVehicle->ProcessMovement( player, g_pMoveData );
}
}
// if ( !asw_allow_detach.GetBool() && pASWPlayer->GetMarine() )
// {
// g_pMoveData->SetAbsOrigin( pASWPlayer->GetMarine()->GetAbsOrigin() );
// }
//.........这里部分代码省略.........
示例10: ep
void C_PlantedC4::ClientThink( void )
{
BaseClass::ClientThink();
// If it's dormant, don't beep or anything..
if ( IsDormant() )
return;
if ( !m_bBombTicking )
{
// disbale C4 thinking if not armed
SetNextClientThink( CLIENT_THINK_NEVER );
return;
}
if( gpGlobals->curtime > m_flNextBeep )
{
// as it gets closer to going off, increase the radius
CLocalPlayerFilter filter;
float attenuation;
float freq;
//the percent complete of the bomb timer
float fComplete = ( ( m_flC4Blow - gpGlobals->curtime ) / m_flTimerLength );
fComplete = clamp( fComplete, 0.0f, 1.0f );
attenuation = min( 0.3 + 0.6 * fComplete, 1.0 );
CSoundParameters params;
if ( GetParametersForSound( "C4.PlantSound", params, NULL ) )
{
EmitSound_t ep( params );
ep.m_SoundLevel = ATTN_TO_SNDLVL( attenuation );
ep.m_pOrigin = &GetAbsOrigin();
EmitSound( filter, SOUND_FROM_WORLD, ep );
}
freq = max( 0.1 + 0.9 * fComplete, 0.15 );
m_flNextBeep = gpGlobals->curtime + freq;
}
if( gpGlobals->curtime > m_flNextGlow )
{
int modelindex = modelinfo->GetModelIndex( "sprites/ledglow.vmt" );
float scale = 0.8f;
Vector vPos = GetAbsOrigin();
const Vector offset( 0, 0, 4 );
// See if the c4 ended up underwater - we need to pull the flash up, or it won't get seen
if ( enginetrace->GetPointContents( vPos ) & (CONTENTS_WATER|CONTENTS_SLIME) )
{
C_CSPlayer *player = GetLocalOrInEyeCSPlayer();
if ( player )
{
const Vector& eyes = player->EyePosition();
if ( ( enginetrace->GetPointContents( eyes ) & (CONTENTS_WATER|CONTENTS_SLIME) ) == 0 )
{
// trace from the player to the water
trace_t waterTrace;
UTIL_TraceLine( eyes, vPos, (CONTENTS_WATER|CONTENTS_SLIME), player, COLLISION_GROUP_NONE, &waterTrace );
if( waterTrace.allsolid != 1 )
{
// now trace from the C4 to the edge of the water (in case there was something solid in the water)
trace_t solidTrace;
UTIL_TraceLine( vPos, waterTrace.endpos, MASK_SOLID, this, COLLISION_GROUP_NONE, &solidTrace );
if( solidTrace.allsolid != 1 )
{
float waterDist = (solidTrace.endpos - vPos).Length();
float remainingDist = (solidTrace.endpos - eyes).Length();
scale = scale * remainingDist / ( remainingDist + waterDist );
vPos = solidTrace.endpos;
}
}
}
}
}
vPos += offset;
tempents->TempSprite( vPos, vec3_origin, scale, modelindex, kRenderTransAdd, 0, 1.0, 0.05, FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP );
if( cl_c4dynamiclight.GetBool() )
{
dlight_t *dl;
dl = effects->CL_AllocDlight( entindex() );
if( dl )
{
//.........这里部分代码省略.........
示例11:
void VrController::update(float previousViewYaw)
{
if (_vrIO->getChannelCount() == 0) { //todo: check vrIO state
Msg("Trackers not initialized properly, nothing to do here...\n");
return;
}
VRIO_Message message;
_vrIO->think();
VRIO_Channel headChannel = HEAD;
VRIO_Channel weaponChannel = WEAPON;
if ( vr_swap_trackers.GetBool() )
{
headChannel = WEAPON;
weaponChannel = HEAD;
}
// HEAD ORIENTATION
_vrIO->getOrientation(headChannel, message);
_headAngle[PITCH] = message.pitch;
_headAngle[ROLL] = message.roll;
_headAngle[YAW] = message.yaw;
float previousYaw = _previousYaw[HEAD];
float currentYaw = _headAngle[YAW];
float deltaYaw = currentYaw - previousYaw;
_headAngle[YAW] = deltaYaw + previousViewYaw;
_previousYaw[HEAD] = currentYaw;
_totalAccumulatedYaw[HEAD] += deltaYaw;
_headAngle -= _headCalibration;
// BODY ORIENTATION
VectorCopy(_headAngle, _bodyAngle);
_bodyAngle[YAW] = previousViewYaw - _totalAccumulatedYaw[HEAD]; // this gives us the global original value
// if uninitialized, set initial body calibration
if (_bodyCalibration[YAW] < 0) {
_bodyCalibration[YAW] = -_totalAccumulatedYaw[HEAD];
}
_bodyAngle -= _bodyCalibration;
// WEAPON ORIENTATION
if (!hasWeaponTracking())
{
VectorCopy(_headAngle, _weaponAngle);
return;
}
_vrIO->getOrientation(weaponChannel, message);
_weaponAngle[PITCH] = message.pitch;
_weaponAngle[ROLL] = message.roll;
_weaponAngle[YAW] = message.yaw;
previousYaw = _previousYaw[WEAPON];
currentYaw = _weaponAngle[YAW];
deltaYaw = currentYaw - previousYaw;
_previousYaw[WEAPON] = currentYaw;
_totalAccumulatedYaw[WEAPON] += deltaYaw;
_weaponAngle[YAW] = previousViewYaw + _totalAccumulatedYaw[WEAPON] - _totalAccumulatedYaw[HEAD];
_weaponAngle -= _weaponCalibration;
};
示例12: TestDeployAngle
bool CDODBipodWeapon::TestDeployAngle( CDODPlayer *pPlayer, float *flDeployedHeight, CBaseEntity **pDeployedOn, QAngle angles )
{
// make sure we are deployed on the same entity at the same height
trace_t tr;
angles[PITCH] = 0;
Vector forward, right, up;
AngleVectors( angles, &forward, &right, &up );
// start at top of player bbox
Vector vecStart = pPlayer->GetAbsOrigin();
float flForwardTraceDist = 32;
// check us as ducking if we are ducked, or if were ducked when we were deployed
bool bDucking = pPlayer->m_Shared.IsDucking() || ( IsDeployed() && m_bDuckedWhenDeployed );
if ( pPlayer->m_Shared.IsProne() )
{
vecStart.z += VEC_PRONE_HULL_MAX[2];
flForwardTraceDist = 16;
}
else if ( bDucking )
{
vecStart.z += VEC_DUCK_HULL_MAX[2];
}
else
{
vecStart.z += 60;
}
int dim = 1; // dod_deploy_box_size.GetInt();
Vector vecDeployTraceBoxSize( dim, dim, dim );
vecStart.z -= vecDeployTraceBoxSize[2];
vecStart.z -= 4;
// sandbags are around 50 units high. Shouldn't be able to deploy on anything a lot higher than that
// optimal standing height ( for animation's sake ) is around 42 units
// optimal ducking height is around 20 units ( 20 unit high object, plus 8 units of gun )
// Start one half box width away from the edge of the player hull
Vector vecForwardStart = vecStart + forward * ( VEC_HULL_MAX[0] + vecDeployTraceBoxSize[0] );
int traceMask = MASK_SOLID;
CBaseEntity *pDeployedOnPlayer = NULL;
if ( m_hDeployedOnEnt && m_hDeployedOnEnt->IsPlayer() )
{
pDeployedOnPlayer = m_hDeployedOnEnt.Get();
}
CTraceFilterIgnorePlayersExceptFor deployedFilter( pDeployedOnPlayer, COLLISION_GROUP_NONE );
CTraceFilterSimple undeployedFilter( pPlayer, COLLISION_GROUP_NONE );
// if we're deployed, skip all players except for the deployed on player
// if we're not, only skip ourselves
ITraceFilter *filter;
if ( IsDeployed() )
filter = &deployedFilter;
else
filter = &undeployedFilter;
UTIL_TraceHull( vecForwardStart,
vecForwardStart + forward * ( flForwardTraceDist - 2 * vecDeployTraceBoxSize[0] ),
-vecDeployTraceBoxSize,
vecDeployTraceBoxSize,
traceMask,
filter,
&tr );
#ifndef CLIENT_DLL
if ( dod_debugmgdeploy.GetBool() )
{
NDebugOverlay::Line( vecForwardStart, vecForwardStart + forward * ( flForwardTraceDist - 2 * vecDeployTraceBoxSize[0] ), 0, 0, 255, true, 0.1 );
NDebugOverlay::Box( vecForwardStart, -vecDeployTraceBoxSize, vecDeployTraceBoxSize, 255, 0, 0, 128, 0.1 );
NDebugOverlay::Box( tr.endpos, -vecDeployTraceBoxSize, vecDeployTraceBoxSize, 0, 0, 255, 128, 0.1 );
}
#endif
// Test forward, are we trying to deploy into a solid object?
if ( tr.fraction < 1.0 )
{
return false;
}
// If we're prone, we can always deploy, don't do the ground test
if ( pPlayer->m_Shared.IsProne() && !pPlayer->m_Shared.IsGettingUpFromProne() )
{
// MATTTODO: do trace from *front* of player, not from the edge of crouch hull
// this is sufficient
*flDeployedHeight = PRONE_DEPLOY_HEIGHT;
return true;
}
// fix prediction hitch when coming up from prone. client thinks we aren't
// prone, but hull is still prone hull
//.........这里部分代码省略.........
示例13: SetUpViews
//-----------------------------------------------------------------------------
// Sets up the view parameters
//-----------------------------------------------------------------------------
void CViewRender::SetUpViews()
{
VPROF("CViewRender::SetUpViews");
// Initialize view structure with default values
float farZ = GetZFar();
// Set up the mono/middle view.
CViewSetup &view = m_View;
view.zFar = farZ;
view.zFarViewmodel = farZ;
// UNDONE: Make this farther out?
// closest point of approach seems to be view center to top of crouched box
view.zNear = GetZNear();
view.zNearViewmodel = 1;
view.fov = default_fov.GetFloat();
view.m_bOrtho = false;
view.m_bViewToProjectionOverride = false;
view.m_eStereoEye = STEREO_EYE_MONO;
// Enable spatial partition access to edicts
partition->SuppressLists( PARTITION_ALL_CLIENT_EDICTS, false );
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
// You in-view weapon aim.
bool bCalcViewModelView = false;
Vector ViewModelOrigin;
QAngle ViewModelAngles;
if ( engine->IsHLTV() )
{
HLTVCamera()->CalcView( view.origin, view.angles, view.fov );
}
#if defined( REPLAY_ENABLED )
else if ( g_pEngineClientReplay->IsPlayingReplayDemo() )
{
ReplayCamera()->CalcView( view.origin, view.angles, view.fov );
}
#endif
else
{
// FIXME: Are there multiple views? If so, then what?
// FIXME: What happens when there's no player?
if (pPlayer)
{
pPlayer->CalcView( view.origin, view.angles, view.zNear, view.zFar, view.fov );
// If we are looking through another entities eyes, then override the angles/origin for view
int viewentity = render->GetViewEntity();
if ( !g_nKillCamMode && (pPlayer->entindex() != viewentity) )
{
C_BaseEntity *ve = cl_entitylist->GetEnt( viewentity );
if ( ve )
{
VectorCopy( ve->GetAbsOrigin(), view.origin );
VectorCopy( ve->GetAbsAngles(), view.angles );
}
}
// There is a viewmodel.
bCalcViewModelView = true;
ViewModelOrigin = view.origin;
ViewModelAngles = view.angles;
}
else
{
view.origin.Init();
view.angles.Init();
}
// Even if the engine is paused need to override the view
// for keeping the camera control during pause.
g_pClientMode->OverrideView( &view );
}
// give the toolsystem a chance to override the view
ToolFramework_SetupEngineView( view.origin, view.angles, view.fov );
if ( engine->IsPlayingDemo() )
{
if ( cl_demoviewoverride.GetFloat() > 0.0f )
{
// Retreive view angles from engine ( could have been set in IN_AdjustAngles above )
CalcDemoViewOverride( view.origin, view.angles );
}
else
{
s_DemoView = view.origin;
s_DemoAngle = view.angles;
}
}
//Find the offset our current FOV is from the default value
//.........这里部分代码省略.........
示例14: DriftPitch
//-----------------------------------------------------------------------------
// Purpose: Moves the client pitch angle towards cl.idealpitch sent by the server.
// If the user is adjusting pitch manually, either with lookup/lookdown,
// mlook and mouse, or klook and keyboard, pitch drifting is constantly stopped.
//-----------------------------------------------------------------------------
void CViewRender::DriftPitch (void)
{
float delta, move;
C_BasePlayer *player = C_BasePlayer::GetLocalPlayer();
if ( !player )
return;
#if defined( REPLAY_ENABLED )
if ( engine->IsHLTV() || g_pEngineClientReplay->IsPlayingReplayDemo() || ( player->GetGroundEntity() == NULL ) || engine->IsPlayingDemo() )
#else
if ( engine->IsHLTV() || ( player->GetGroundEntity() == NULL ) || engine->IsPlayingDemo() )
#endif
{
m_PitchDrift.driftmove = 0;
m_PitchDrift.pitchvel = 0;
return;
}
// Don't count small mouse motion
if ( m_PitchDrift.nodrift )
{
if ( fabs( input->GetLastForwardMove() ) < cl_forwardspeed.GetFloat() )
{
m_PitchDrift.driftmove = 0;
}
else
{
m_PitchDrift.driftmove += gpGlobals->frametime;
}
if ( m_PitchDrift.driftmove > v_centermove.GetFloat() )
{
StartPitchDrift ();
}
return;
}
// How far off are we
delta = prediction->GetIdealPitch() - player->GetAbsAngles()[ PITCH ];
if ( !delta )
{
m_PitchDrift.pitchvel = 0;
return;
}
// Determine movement amount
move = gpGlobals->frametime * m_PitchDrift.pitchvel;
// Accelerate
m_PitchDrift.pitchvel += gpGlobals->frametime * v_centerspeed.GetFloat();
// Move predicted pitch appropriately
if (delta > 0)
{
if ( move > delta )
{
m_PitchDrift.pitchvel = 0;
move = delta;
}
player->SetLocalAngles( player->GetLocalAngles() + QAngle( move, 0, 0 ) );
}
else if ( delta < 0 )
{
if ( move > -delta )
{
m_PitchDrift.pitchvel = 0;
move = -delta;
}
player->SetLocalAngles( player->GetLocalAngles() - QAngle( move, 0, 0 ) );
}
}
示例15: MoveGroundStep
//-----------------------------------------------------------------------------
// Step iteratively toward a destination position
//-----------------------------------------------------------------------------
AIMotorMoveResult_t CAI_Motor::MoveGroundStep( const Vector &newPos, CBaseEntity *pMoveTarget, float yaw, bool bAsFarAsCan, bool bTestZ, AIMoveTrace_t *pTraceResult )
{
// By definition, this will produce different results than GroundMoveLimit()
// because there's no guarantee that it will step exactly one step
// See how far toward the new position we can step...
// But don't actually test for ground geometric validity;
// if it isn't valid, there's not much we can do about it
AIMoveTrace_t moveTrace;
unsigned testFlags = AITGM_IGNORE_FLOOR;
if ( !bTestZ )
testFlags |= AITGM_2D;
#ifdef DEBUG
if ( ai_draw_motor_movement.GetBool() )
testFlags |= AITGM_DRAW_RESULTS;
#endif
GetMoveProbe()->TestGroundMove( GetLocalOrigin(), newPos, MASK_NPCSOLID, testFlags, &moveTrace );
if ( pTraceResult )
{
*pTraceResult = moveTrace;
}
bool bHitTarget = (moveTrace.pObstruction && (pMoveTarget == moveTrace.pObstruction ));
// Move forward either if there was no obstruction or if we're told to
// move as far as we can, regardless
bool bIsBlocked = IsMoveBlocked(moveTrace.fStatus);
if ( !bIsBlocked || bAsFarAsCan || bHitTarget )
{
#ifdef DEBUG
if ( GetMoveProbe()->CheckStandPosition( GetLocalOrigin(), MASK_NPCSOLID ) && !GetMoveProbe()->CheckStandPosition( moveTrace.vEndPosition, MASK_NPCSOLID ) )
{
DevMsg( 2, "Warning: AI motor probably given invalid instructions\n" );
}
#endif
// The true argument here causes it to touch all triggers
// in the volume swept from the previous position to the current position
UTIL_SetOrigin(GetOuter(), moveTrace.vEndPosition, true);
// check to see if our ground entity has changed
// NOTE: This is to detect changes in ground entity as the movement code has optimized out
// ground checks. So now we have to do a simple recheck to make sure we detect when we've
// stepped onto a new entity.
if ( GetOuter()->GetFlags() & FL_ONGROUND )
{
GetOuter()->PhysicsStepRecheckGround();
}
// skip tiny steps, but notify the shadow object of any large steps
if ( moveTrace.flStepUpDistance > 0.1f )
{
float height = clamp( moveTrace.flStepUpDistance, 0, StepHeight() );
IPhysicsObject *pPhysicsObject = GetOuter()->VPhysicsGetObject();
if ( pPhysicsObject )
{
IPhysicsShadowController *pShadow = pPhysicsObject->GetShadowController();
if ( pShadow )
{
pShadow->StepUp( height );
}
}
}
if ( yaw != -1 )
{
QAngle angles = GetLocalAngles();
angles.y = yaw;
SetLocalAngles( angles );
}
if ( bHitTarget )
return AIM_PARTIAL_HIT_TARGET;
if ( !bIsBlocked )
return AIM_SUCCESS;
if ( moveTrace.fStatus == AIMR_BLOCKED_NPC )
return AIM_PARTIAL_HIT_NPC;
return AIM_PARTIAL_HIT_WORLD;
}
return AIM_FAILED;
}