本文整理汇总了C++中CanAttack函数的典型用法代码示例。如果您正苦于以下问题:C++ CanAttack函数的具体用法?C++ CanAttack怎么用?C++ CanAttack使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CanAttack函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: AttackStart
void PetAI::AttackStart(Unit* target)
{
// Overrides Unit::AttackStart to correctly evaluate Pet states
// Check all pet states to decide if we can attack this target
if (!CanAttack(target))
return;
// Only chase if not commanded to stay or if stay but commanded to attack
DoAttack(target, (!m_creature->GetCharmInfo()->HasCommandState(COMMAND_STAY) || m_creature->GetCharmInfo()->IsCommandAttack()));
}
开发者ID:Maduse,项目名称:server,代码行数:11,代码来源:PetAI.cpp
示例2: TryRangedAttack
bool RPG_AiControllerComponent::TryRangedAttack()
{
if(CanAttack())
{
m_lastAttackTime = Vision::GetTimer()->GetTime();
SetState(RPG_ControllerStateId::kRangedAttacking);
return true;
}
return false;
}
开发者ID:RexBaribal,项目名称:projectanarchy,代码行数:11,代码来源:AiControllerComponent.cpp
示例3: AttackStart
void PetAI::AttackStart(Unit* target)
{
// Overrides Unit::AttackStart to correctly evaluate Pet states
// Check all pet states to decide if we can attack this target
if (!CanAttack(target))
return;
if (Unit* owner = me->GetOwner())
owner->SetInCombatWith(target);
DoAttack(target, true);
}
开发者ID:AlmasServer,项目名称:TrinityCore,代码行数:13,代码来源:PetAI.cpp
示例4: ToTFPlayer
//-----------------------------------------------------------------------------
// Purpose: Attempt to heal any player within range of the medikit
//-----------------------------------------------------------------------------
void CWeaponMedigun::PrimaryAttack( void )
{
CTFPlayer *pOwner = ToTFPlayer( GetOwnerEntity() );
if ( !pOwner )
return;
if ( !CanAttack() )
return;
#ifdef GAME_DLL
/*
// Start boosting ourself if we're not
if ( m_bChargeRelease && !m_bHealingSelf )
{
pOwner->m_Shared.Heal( pOwner, GetHealRate() * 2 );
m_bHealingSelf = true;
}
*/
#endif
#if !defined (CLIENT_DLL)
if ( tf_medigun_lagcomp.GetBool() )
lagcompensation->StartLagCompensation( pOwner, pOwner->GetCurrentCommand() );
#endif
if ( FindAndHealTargets() )
{
// Start the animation
if ( !m_bHealing )
{
#ifdef GAME_DLL
pOwner->SpeakWeaponFire();
#endif
SendWeaponAnim( ACT_MP_ATTACK_STAND_PREFIRE );
pOwner->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRE );
}
m_bHealing = true;
}
else
{
RemoveHealingTarget();
}
#if !defined (CLIENT_DLL)
if ( tf_medigun_lagcomp.GetBool() )
lagcompensation->FinishLagCompensation( pOwner );
#endif
}
开发者ID:Navton,项目名称:TF2Classic,代码行数:54,代码来源:tf_weapon_medigun.cpp
示例5: CanAttack
bool cCombatManager::ValidateEnemy(const int& unitID, UnitInfo* U, bool IdleIfInvalid)
{
if( U->enemyID == -1 || G->Enemies.find(U->enemyID) == G->Enemies.end() )
{ // old enemy target that doesn't exist
U->enemyID=-1;
if( IdleIfInvalid )
G->UpdateEventAdd(1,cb->GetCurrentFrame()+90,unitID,U);
return false;
}
float3 EPos = cb->GetUnitPos(U->enemyID);
if( U->group == 0 )
{ // keeping variables up-to-date, this is event-driven for groups
U->E = &G->Enemies.find(U->enemyID)->second;
U->enemyEff = CanAttack(U,U->E,EPos);
}
if( cb->GetUnitDef(U->enemyID) != 0 && cb->GetUnitAllyTeam(unitID) == cb->GetUnitAllyTeam(U->enemyID) )
{ // an enemy ID was reused by an ally team
if( U->E->inLOS || U->E->inRadar ) // ! Work Around: Spring-Version(v0.72b1-0.76b1)
{ // OR an ally captures an enemy unit & no events were sent
*l<<"\nWARNING: ValidateEnemy(eID="<<U->enemyID<<"): an ally has captured an enemy unit";
}
G->EnemyDestroyed(U->enemyID,-1);
U->enemyID=-1;
return false;
}
if( EPos.x > 0 || EPos.z > 0 || EPos.y > 0 ) // Position is valid
{
if( !U->E->inLOS && !U->E->inRadar ) // ! Work Around: Spring-Version(v0.72b1-0.76b1)
{
if( cb->GetUnitDef(U->enemyID) != 0 )
{
*l<<"\nWARNING: ValidateEnemy(eID="<<U->enemyID<<"): incorrect LOS status";
G->EnemyEnterLOS(U->enemyID);
}
else
{
*l<<"\nWARNING: ValidateEnemy(eID="<<U->enemyID<<"): incorrect radar status";
G->EnemyEnterRadar(U->enemyID);
}
}
return true;
}
if( !U->E->inLOS && !U->E->inRadar && cb->GetUnitPos(unitID).distance2D(U->E->position) > 300.0f )
return true;
G->EnemyRemove(U->enemyID,U->E);
U->enemyID=-1;
if( IdleIfInvalid )
G->UpdateEventAdd(1,cb->GetCurrentFrame()+90,unitID,U);
return false;
}
开发者ID:Mocahteam,项目名称:SpringPP,代码行数:50,代码来源:CombatManager.cpp
示例6: AttackStart
void PetAI::AttackStart(Unit* target)
{
// Overrides Unit::AttackStart to correctly evaluate Pet states
// Check all pet states to decide if we can attack this target
if (!CanAttack(target))
return;
if (Unit* owner = me->GetCharmerOrOwner())
owner->RemoveAurasByType(SPELL_AURA_MOD_CAMOUFLAGE);
// Only chase if not commanded to stay or if stay but commanded to attack
DoAttack(target, (!me->GetCharmInfo()->HasCommandState(COMMAND_STAY) || me->GetCharmInfo()->IsCommandAttack()));
}
开发者ID:Cailiaock,项目名称:5.4.7-Wow-source,代码行数:14,代码来源:PetAI.cpp
示例7: DetermineWeaponState
void AWeapon::DetermineWeaponState(){
EWeaponState::Type NewState = EWeaponState::Idle;
if (IsEquiped())
{
if (bWantsToAttack && CanAttack())
{
NewState = EWeaponState::Attacking;
}
}
else if (bPendingEquip)
{
NewState = EWeaponState::Equipping;
}
SetCurrentState(NewState);
}
开发者ID:belven,项目名称:Mutagen,代码行数:17,代码来源:Weapon.cpp
示例8: PrimaryAttack
//-----------------------------------------------------------------------------
// Purpose: Primary fire function
//-----------------------------------------------------------------------------
void CTFFlareGun::PrimaryAttack(void)
{
// Check for ammunition.
if (m_iClip1 <= 0 && m_iClip1 != -1)
return;
// Are we capable of firing again?
if (m_flNextPrimaryAttack > gpGlobals->curtime)
return;
if (!CanAttack())
return;
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
LaunchProjectile();
}
开发者ID:staticfox,项目名称:TF2Classic,代码行数:20,代码来源:tf_weapon_flaregun.cpp
示例9: if
int cCombatManager::GetClosestThreat(float3 Pos, UnitInfo* U)
{
sWeaponEfficiency* weTemp;
float distance,fTemp;
distance=0.0f;
float3 fE;
set<int> deletion;
for( map<int,EnemyInfo*>::iterator E=G->EThreat.begin(); E!=G->EThreat.end(); ++E )
{
fE=GetEnemyPosition(E->first,E->second);
if( E->second->baseThreatFrame > cb->GetCurrentFrame()+3600 ||
(E->second->baseThreatFrame > cb->GetCurrentFrame()+1200 && G->UImmobile.find(E->second->baseThreatID) == G->UImmobile.end() ) ||
(E->second->ud != 0 && G->UImmobile.find(E->second->baseThreatID) != G->UImmobile.end() && 1.3*E->second->ud->maxWeaponRange < fE.distance(cb->GetUnitPos(E->second->baseThreatID)) ) )
{
E->second->baseThreatID = -1;
E->second->baseThreatFrame = -1;
deletion.insert(E->first);
}
else if( (weTemp = CanAttack(U,E->second,fE)) != 0 )
{
fTemp=Pos.distance(fE);
if( U->enemyID == -1 || fTemp < distance )
{
U->enemyID=E->first;
U->E = E->second;
U->enemyEff = weTemp;
distance=fTemp;
}
}
}
while( int(deletion.size()) > 0 )
{
if( !G->UM->ActiveAttackOrders() )
{
EnemyInfo* E = G->EThreat.find(*deletion.begin())->second;
while( int(E->attackGroups.size()) > 0 )
G->UM->GroupRemoveEnemy(*deletion.begin(),E,*E->attackGroups.begin());
}
G->EThreat.erase(*deletion.begin());
deletion.erase(*deletion.begin());
}
if( U->enemyID != -1 && U->group != 0 )
G->UM->GroupAddEnemy(U->enemyID,U->E,U->group);
return U->enemyID;
}
开发者ID:9heart,项目名称:spring,代码行数:45,代码来源:CombatManager.cpp
示例10: GetTFPlayerOwner
void CTFChainsaw::PrimaryAttack(void)
{
// Get the current player.
CTFPlayer *pPlayer = GetTFPlayerOwner();
if ( !pPlayer )
return;
if ( !CanAttack() )
return;
// Set the weapon usage mode - primary, secondary.
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
m_bConnected = false;
bIsAttacking = true;
BaseClass::PrimaryAttack();
}
开发者ID:TenmaPL,项目名称:TF2Classic,代码行数:18,代码来源:tf_weapon_chainsaw.cpp
示例11: CanAttackSpell
/////////////////////////////////////////////////
/// [Serverside] Opposition: Unit can target a target with a harmful spell
///
/// @note Relations API Tier 3
///
/// This function is not intented to have client-side counterpart by original design.
/// It utilizes SpellEntry for additional target filtering.
/// Also an additional fine grained check needs to be done for AOE spells, because they
/// need to skip PVP enabled targets in some special cases. (Chain spells, AOE)
/////////////////////////////////////////////////
bool Unit::CanAttackSpell(Unit const* target, SpellEntry const* spellInfo, bool isAOE) const
{
if (spellInfo)
{
// inversealive is needed for some spells which need to be casted at dead targets (aoe)
if (!target->isAlive() && !spellInfo->HasAttribute(SPELL_ATTR_EX2_CAN_TARGET_DEAD))
return false;
}
if (CanAttack(target))
{
if (isAOE)
{
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
{
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
{
const Player* thisPlayer = GetControllingPlayer();
if (!thisPlayer)
return true;
const Player* unitPlayer = target->GetControllingPlayer();
if (!unitPlayer)
return true;
if (thisPlayer->IsInDuelWith(unitPlayer))
return true;
if (unitPlayer->IsPvP() && (!isAOE || thisPlayer->IsPvP()))
return true;
if (thisPlayer->IsPvPFreeForAll() && unitPlayer->IsPvPFreeForAll())
return true;
return false;
}
}
}
return true;
}
return false;
}
开发者ID:Tobschinski,项目名称:mangos-classic,代码行数:53,代码来源:Relations.cpp
示例12: ToBasePlayer
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFPistol::PrimaryAttack( void )
{
#if 0
CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
if( pOwner )
{
// Each time the player fires the pistol, reset the view punch. This prevents
// the aim from 'drifting off' when the player fires very quickly. This may
// not be the ideal way to achieve this, but it's cheap and it works, which is
// great for a feature we're evaluating. (sjb)
//pOwner->ViewPunchReset();
}
#endif
if ( !CanAttack() )
return;
BaseClass::PrimaryAttack();
}
开发者ID:TenmaPL,项目名称:TF2Classic,代码行数:23,代码来源:tf_weapon_pistol.cpp
示例13: GetTFPlayerOwner
// -----------------------------------------------------------------------------
// Purpose:
// -----------------------------------------------------------------------------
void CTFWeaponBaseMelee::PrimaryAttack()
{
// Get the current player.
CTFPlayer *pPlayer = GetTFPlayerOwner();
if ( !pPlayer )
return;
if ( !CanAttack() )
return;
// Set the weapon usage mode - primary, secondary.
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
m_bConnected = false;
// Swing the weapon.
Swing( pPlayer );
#if !defined( CLIENT_DLL )
pPlayer->SpeakWeaponFire();
CTF_GameStats.Event_PlayerFiredWeapon( pPlayer, IsCurrentAttackACritical() );
#endif
}
开发者ID:staticfox,项目名称:TF2Classic,代码行数:25,代码来源:tf_weaponbase_melee.cpp
示例14: GetPlayerOwner
void CDODBaseRocketWeapon::SecondaryAttack()
{
CBasePlayer *pPlayer = GetPlayerOwner();
//if we're underwater, lower it
if( pPlayer->GetWaterLevel() > 2 )
{
if( IsDeployed() )
Lower();
return;
}
if( IsDeployed() )
{
Lower();
}
else
{
if ( CanAttack() )
Raise();
}
}
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:22,代码来源:weapon_dodbaserpg.cpp
示例15: CanAttack
/////////////////////////////////////////////////
/// Opposition: Unit treats another unit as an enemy it can attack (immediate response)
///
/// @note Relations API Tier 1
///
/// Backported from TBC+ client-side counterpart: <tt>CGUnit_C::CanAttackNow(const CGUnit_C *this, const CGUnit_C *unit)</tt>
/// Intended usage is to verify direct requests to attack something.
/// First appeared in TBC+ clients, backported for API unification between expansions.
/////////////////////////////////////////////////
bool Unit::CanAttackNow(const Unit* unit) const
{
// Simple sanity check
if (!unit)
return false;
// Original logic
// We can't initiate attack while dead or ghost
if (!isAlive())
return false;
// We can't initiate attack while mounted
if (IsMounted())
return false;
// We can't initiate attack on dead units
if (!unit->isAlive())
return false;
return CanAttack(unit);
}
开发者ID:Tobschinski,项目名称:mangos-classic,代码行数:31,代码来源:Relations.cpp
示例16: ExecuteTask
EBTNodeResult::Type UShootAtEnemyTask::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
AMinionAIController* MinionController = Cast<AMinionAIController>(OwnerComp.GetAIOwner());
if (MinionController == NULL)
{
return EBTNodeResult::Failed;
}
AMinionCharacter* Minion = Cast<AMinionCharacter>(MinionController->GetPawn());
ABorderItem* Enemy = MinionController->GetEnemy();
if (CanAttack(Minion, Enemy))
{
AttackEnemy(Minion, Enemy);
return EBTNodeResult::InProgress;
}
else if (!Enemy)
{
return EBTNodeResult::Succeeded;
}
return EBTNodeResult::Failed;
}
开发者ID:joshkay,项目名称:BorderSecurity,代码行数:23,代码来源:ShootAtEnemyTask.cpp
示例17: Update
bool CAttackState::Update(time_point tick)
{
auto PTarget = static_cast<CBattleEntity*>(GetTarget());
if (!PTarget || PTarget->isDead())
{
return true;
}
if (AttackReady())
{
//CanAttack may have set target id to 0 (disengage from out of range)
if (m_PEntity->GetBattleTargetID() == 0)
{
return true;
}
if (CanAttack(PTarget))
{
action_t action;
if (m_PEntity->OnAttack(*this, action))
{
m_PEntity->loc.zone->PushPacket(m_PEntity, CHAR_INRANGE_SELF, new CActionPacket(action));
}
}
else if (m_PEntity->OnAttackError(*this))
{
m_PEntity->HandleErrorMessage(m_errorMsg);
}
if (m_PEntity->GetBattleTargetID() == 0)
{
return true;
}
}
else
{
m_attackTime -= (m_PEntity->PAI->getTick() - m_PEntity->PAI->getPrevTick());
}
return false;
}
开发者ID:Sacshop,项目名称:darkstar,代码行数:37,代码来源:attack_state.cpp
示例18: PrimaryAttack
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFPipebombLauncher::PrimaryAttack( void )
{
// Check for ammunition.
if ( m_iClip1 <= 0 && m_iClip1 != -1 )
return;
// Are we capable of firing again?
if ( m_flNextPrimaryAttack > gpGlobals->curtime )
return;
if ( !CanAttack() )
{
m_flChargeBeginTime = 0;
return;
}
if ( m_flChargeBeginTime <= 0 )
{
// Set the weapon mode.
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
// save that we had the attack button down
m_flChargeBeginTime = gpGlobals->curtime;
SendWeaponAnim( ACT_VM_PULLBACK );
}
else
{
float flTotalChargeTime = gpGlobals->curtime - m_flChargeBeginTime;
if ( flTotalChargeTime >= TF_PIPEBOMB_MAX_CHARGE_TIME )
{
LaunchGrenade();
}
}
}
开发者ID:Navton,项目名称:TF2Classic,代码行数:39,代码来源:tf_weapon_pipebomblauncher.cpp
示例19: min
void CBasePlayerWeapon::ItemPostFrame( void )
{
if ((m_fInReload) && ( m_pPlayer->m_flNextAttack <= UTIL_WeaponTimeBase() ) )
{
// complete the reload.
int j = min( iMaxClip() - m_iClip, m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]);
// Add them to the clip
m_iClip += j;
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= j;
m_pPlayer->TabulateAmmo();
m_fInReload = FALSE;
}
if ( !(m_pPlayer->pev->button & IN_ATTACK ) )
{
m_flLastFireTime = 0.0f;
}
if ((m_pPlayer->pev->button & IN_ATTACK2) && CanAttack( m_flNextSecondaryAttack, gpGlobals->time, UseDecrement() ) )
{
if ( pszAmmo2() && !m_pPlayer->m_rgAmmo[SecondaryAmmoIndex()] )
{
m_fFireOnEmpty = TRUE;
}
m_pPlayer->TabulateAmmo();
SecondaryAttack();
m_pPlayer->pev->button &= ~IN_ATTACK2;
}
else if ((m_pPlayer->pev->button & IN_ATTACK) && CanAttack( m_flNextPrimaryAttack, gpGlobals->time, UseDecrement() ) )
{
if ( (m_iClip == 0 && pszAmmo1()) || (iMaxClip() == -1 && !m_pPlayer->m_rgAmmo[PrimaryAmmoIndex()] ) )
{
m_fFireOnEmpty = TRUE;
}
m_pPlayer->TabulateAmmo();
PrimaryAttack();
}
else if ( m_pPlayer->pev->button & IN_RELOAD && iMaxClip() != WEAPON_NOCLIP && !m_fInReload )
{
// reload when reload is pressed, or if no buttons are down and weapon is empty.
Reload();
}
else if ( !(m_pPlayer->pev->button & (IN_ATTACK|IN_ATTACK2) ) )
{
// no fire buttons down
m_fFireOnEmpty = FALSE;
if ( !IsUseable() && m_flNextPrimaryAttack < ( UseDecrement() ? 0.0 : gpGlobals->time ) )
{
// weapon isn't useable, switch.
if ( !(iFlags() & ITEM_FLAG_NOAUTOSWITCHEMPTY) && g_pGameRules->GetNextBestWeapon( m_pPlayer, this ) )
{
m_flNextPrimaryAttack = ( UseDecrement() ? 0.0 : gpGlobals->time ) + 0.3;
return;
}
}
else
{
// weapon is useable. Reload if empty and weapon has waited as long as it has to after firing
if ( m_iClip == 0 && !(iFlags() & ITEM_FLAG_NOAUTORELOAD) && m_flNextPrimaryAttack < ( UseDecrement() ? 0.0 : gpGlobals->time ) )
{
Reload();
return;
}
}
WeaponIdle( );
return;
}
// catch all
if ( ShouldWeaponIdle() )
{
WeaponIdle();
}
}
开发者ID:AMeEeRo,项目名称:halflife,代码行数:82,代码来源:weapons.cpp
示例20: ToTFPlayer
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTFMinigun::SharedAttack()
{
CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );
if ( !pPlayer )
return;
if ( !CanAttack() )
{
WeaponIdle();
return;
}
if ( pPlayer->m_nButtons & IN_ATTACK )
{
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
}
else if ( pPlayer->m_nButtons & IN_ATTACK2 )
{
m_iWeaponMode = TF_WEAPON_SECONDARY_MODE;
}
switch ( m_iWeaponState )
{
default:
case AC_STATE_IDLE:
{
// Removed the need for cells to powerup the AC
WindUp();
m_flNextPrimaryAttack = gpGlobals->curtime + 1.0;
m_flNextSecondaryAttack = gpGlobals->curtime + 1.0;
m_flTimeWeaponIdle = gpGlobals->curtime + 1.0;
m_flStartedFiringAt = -1;
pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRE );
break;
}
case AC_STATE_STARTFIRING:
{
// Start playing the looping fire sound
if ( m_flNextPrimaryAttack <= gpGlobals->curtime )
{
if ( m_iWeaponMode == TF_WEAPON_SECONDARY_MODE )
{
m_iWeaponState = AC_STATE_SPINNING;
#ifdef GAME_DLL
pPlayer->SpeakWeaponFire( MP_CONCEPT_WINDMINIGUN );
#endif
}
else
{
m_iWeaponState = AC_STATE_FIRING;
#ifdef GAME_DLL
pPlayer->SpeakWeaponFire( MP_CONCEPT_FIREMINIGUN );
#endif
}
m_flNextSecondaryAttack = m_flNextPrimaryAttack = m_flTimeWeaponIdle = gpGlobals->curtime + 0.1;
}
break;
}
case AC_STATE_FIRING:
{
if ( m_iWeaponMode == TF_WEAPON_SECONDARY_MODE )
{
#ifdef GAME_DLL
pPlayer->ClearWeaponFireScene();
pPlayer->SpeakWeaponFire( MP_CONCEPT_WINDMINIGUN );
#endif
m_iWeaponState = AC_STATE_SPINNING;
m_flNextSecondaryAttack = m_flNextPrimaryAttack = m_flTimeWeaponIdle = gpGlobals->curtime + 0.1;
}
else if ( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 )
{
m_iWeaponState = AC_STATE_DRYFIRE;
}
else
{
if ( m_flStartedFiringAt < 0 )
{
m_flStartedFiringAt = gpGlobals->curtime;
}
#ifdef GAME_DLL
if ( m_flNextFiringSpeech < gpGlobals->curtime )
{
m_flNextFiringSpeech = gpGlobals->curtime + 5.0;
pPlayer->SpeakConceptIfAllowed( MP_CONCEPT_MINIGUN_FIREWEAPON );
}
#endif
// Only fire if we're actually shooting
BaseClass::PrimaryAttack(); // fire and do timers
CalcIsAttackCritical();
m_bCritShot = IsCurrentAttackACrit();
pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
//.........这里部分代码省略.........
开发者ID:Navton,项目名称:TF2Classic,代码行数:101,代码来源:tf_weapon_minigun.cpp
注:本文中的CanAttack函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论