这篇教程C++ CalculateMeleeDamageForce函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中CalculateMeleeDamageForce函数的典型用法代码示例。如果您正苦于以下问题:C++ CalculateMeleeDamageForce函数的具体用法?C++ CalculateMeleeDamageForce怎么用?C++ CalculateMeleeDamageForce使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了CalculateMeleeDamageForce函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: GetTouchTracevoid CNPC_ControllerZapBall::ExplodeTouch( CBaseEntity *pOther ){ if (m_takedamage = DAMAGE_YES ) { trace_t tr; tr = GetTouchTrace( ); ClearMultiDamage( ); Vector vecAttackDir = GetAbsVelocity(); VectorNormalize( vecAttackDir ); if (m_hOwner != NULL) { CTakeDamageInfo info( this, m_hOwner, sk_controller_dmgball.GetFloat(), DMG_ENERGYBEAM ); CalculateMeleeDamageForce( &info, vecAttackDir, tr.endpos ); pOther->DispatchTraceAttack( info, vecAttackDir, &tr ); } else { CTakeDamageInfo info( this, this, sk_controller_dmgball.GetFloat(), DMG_ENERGYBEAM ); CalculateMeleeDamageForce( &info, vecAttackDir, tr.endpos ); pOther->DispatchTraceAttack( info, vecAttackDir, &tr ); } ApplyMultiDamage(); // void UTIL_EmitAmbientSound( CBaseEntity *entity, const Vector &vecOrigin, const char *samp, float vol, soundlevel_t soundlevel, int fFlags, int pitch, float soundtime /*= 0.0f*/ ) UTIL_EmitAmbientSound( GetSoundSourceIndex(), tr.endpos, "Controller.ElectroSound", 0.3, SNDLVL_NORM, 0, random->RandomInt( 90, 99 ) ); } Kill();}
开发者ID:AgentAgrimar,项目名称:source-sdk-trilogy,代码行数:34,
示例2: GetAbsOriginvoid CNPC_Infected::MeleeAttack( float distance, float damage, QAngle &viewPunch, Vector &shove ){ Vector vecForceDir; // Always hurt bullseyes for now if ( ( GetEnemy() != NULL ) && ( GetEnemy()->Classify() == CLASS_BULLSEYE ) ) { vecForceDir = (GetEnemy()->GetAbsOrigin() - GetAbsOrigin()); CTakeDamageInfo info( this, this, damage, DMG_SLASH ); CalculateMeleeDamageForce( &info, vecForceDir, GetEnemy()->GetAbsOrigin() ); GetEnemy()->TakeDamage( info ); return; } CBaseEntity *pHurt = CheckTraceHullAttack( distance, -Vector(16,16,32), Vector(16,16,32), damage, DMG_SLASH, 5.0f ); if ( pHurt ) { vecForceDir = ( pHurt->WorldSpaceCenter() - WorldSpaceCenter() ); //FIXME: Until the interaction is setup, kill combine soldiers in one hit -- jdw if ( FClassnameIs( pHurt, "npc_combine_s" ) ) { CTakeDamageInfo dmgInfo( this, this, pHurt->m_iHealth+25, DMG_SLASH ); CalculateMeleeDamageForce( &dmgInfo, vecForceDir, pHurt->GetAbsOrigin() ); pHurt->TakeDamage( dmgInfo ); return; } CBasePlayer *pPlayer = ToBasePlayer( pHurt ); if ( pPlayer != NULL ) { //Kick the player angles if ( !(pPlayer->GetFlags() & FL_GODMODE ) && pPlayer->GetMoveType() != MOVETYPE_NOCLIP ) { pPlayer->ViewPunch( viewPunch ); Vector dir = pHurt->GetAbsOrigin() - GetAbsOrigin(); VectorNormalize(dir); QAngle angles; VectorAngles( dir, angles ); Vector forward, right; AngleVectors( angles, &forward, &right, NULL ); //Push the target back pHurt->ApplyAbsVelocityImpulse( - right * shove[1] - forward * shove[0] ); } } // Play a random attack hit sound EmitSound( "Zombie.Punch" ); } else { EmitSound( "Zombie.AttackMiss" ); }}
开发者ID:wrenchmods,项目名称:Sleepless,代码行数:59,
示例3: info//-----------------------------------------------------------------------------// Purpose://-----------------------------------------------------------------------------void CPlayerClassCommando::BullRushTouch( CBaseEntity *pTouched ){ if ( pTouched->IsPlayer() && !pTouched->InSameTeam( m_pPlayer ) ) { // Get the player. CBaseTFPlayer *pTFPlayer = ( CBaseTFPlayer* )pTouched; // Check to see if we have "touched" this player already this bullrush cycle. if ( m_aHitPlayers.Find( pTFPlayer ) != -1 ) return; // Hitting the player now. m_aHitPlayers.AddToTail( pTFPlayer ); // ROBIN: Bullrush now instantly kills again float flDamage = 200; // Calculate the damage a player takes based on distance(time). //float flDamage = 1.0f - ( ( COMMANDO_BULLRUSH_TIME - m_ClassData.m_flBullRushTime ) * ( 1.0f / COMMANDO_BULLRUSH_TIME ) ); //flDamage *= 115.0f; // max bullrush damage trace_t tr = m_pPlayer->GetTouchTrace(); CTakeDamageInfo info( m_pPlayer, m_pPlayer, flDamage, DMG_CLUB, DMG_KILL_BULLRUSH ); CalculateMeleeDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos ); pTFPlayer->TakeDamage( info ); CPASAttenuationFilter filter( m_pPlayer, "Commando.BullRushFlesh" ); CBaseEntity::EmitSound( filter, m_pPlayer->entindex(), "Commando.BullRushFlesh" ); pTFPlayer->Touch( m_pPlayer ); }}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:34,
示例4: VectorNormalizevoid CNPC_Hydra::Stab( CBaseEntity *pOther, const Vector &vecSpeed, trace_t &tr ){ if (pOther->m_takedamage == DAMAGE_YES && !pOther->IsPlayer()) { Vector dir = vecSpeed; VectorNormalize( dir ); if ( !sv_hydraTestSpike.GetInt() ) { ClearMultiDamage(); // FIXME: this is bogus CTakeDamageInfo info( this, this, pOther->m_iHealth+25, DMG_SLASH ); CalculateMeleeDamageForce( &info, dir, tr.endpos ); pOther->DispatchTraceAttack( info, dir, &tr ); ApplyMultiDamage(); } else { CBaseAnimating *pAnimating = dynamic_cast<CBaseAnimating *>(pOther); if ( pAnimating ) { AttachStabbedEntity( pAnimating, vecSpeed * 30, tr ); } } } else { Nudge( pOther, tr.endpos, vecSpeed ); }}
开发者ID:Adidasman1,项目名称:source-sdk-2013,代码行数:30,
示例5: GetPlayerOwner//=====================================================================================//// Purpose: Performs the screen shake and it checks to see if we hit an entity to// handle the proper damage// An entity here can be another player or a wood plank//=====================================================================================//void CTDPBludgeonWeaponBase::Hit( trace_t &tr, Activity nHitActivity ){ // Do we have a valid owner holding the weapon? CTDPPlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return; // Let's shake the screen a little AddViewKick(); // if tr.m_pEnt is not NULL it means we have hit a target if ( tr.m_pEnt != NULL ) { Vector vForward; pPlayer->EyeVectors( &vForward, NULL, NULL ); VectorNormalize( vForward ); // Process the damage and send it to the entity we just hit CTakeDamageInfo dmgInfo( GetOwner(), GetOwner(), GetDamageForActivity( nHitActivity ), DMG_CLUB ); CalculateMeleeDamageForce( &dmgInfo, vForward, tr.endpos ); tr.m_pEnt->DispatchTraceAttack( dmgInfo, vForward, &tr ); ApplyMultiDamage();#if defined( GAME_DLL ) // Now hit all triggers along the ray that... TraceAttackToTriggers( dmgInfo, tr.startpos, tr.endpos, vForward );#endif } // Apply an impact effect ImpactEffect( tr );}
开发者ID:jrbedard,项目名称:troy-divine-playground,代码行数:37,
示例6: GetTouchTracevoid CGrenadeEnergy::GrenadeEnergyTouch( CBaseEntity *pOther ){ if ( pOther->m_takedamage ) { float flLifeLeft = 1-(gpGlobals->curtime - m_flLaunchTime)/ENERGY_GRENADE_LIFETIME; if ( pOther->GetFlags() & (FL_CLIENT) ) { CBasePlayer *pPlayer = ( CBasePlayer * )pOther; float flKick = 120 * flLifeLeft; pPlayer->m_Local.m_vecPunchAngle.SetX( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 ); pPlayer->m_Local.m_vecPunchAngle.SetY( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 ); } float flDamage = m_flDamage * flLifeLeft; if (flDamage < 1) { flDamage = 1; } trace_t tr; tr = GetTouchTrace(); CTakeDamageInfo info( this, GetThrower(), m_flDamage * flLifeLeft, DMG_SONIC ); CalculateMeleeDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos ); pOther->TakeDamage( info ); } Detonate();}
开发者ID:xxauroraxx,项目名称:Source.Python,代码行数:27,
示例7: ToBasePlayer//------------------------------------------------------------------------------// Purpose: Implement impact function//------------------------------------------------------------------------------void CWeaponCrowbar::Hit( void ){ //Make sound for the AI#ifndef CLIENT_DLL CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); CSoundEnt::InsertSound( SOUND_BULLET_IMPACT, m_traceHit.endpos, 400, 0.2f, pPlayer ); CBaseEntity *pHitEntity = m_traceHit.m_pEnt; //Apply damage to a hit target if ( pHitEntity != NULL ) { Vector hitDirection; pPlayer->EyeVectors( &hitDirection, NULL, NULL ); VectorNormalize( hitDirection ); ClearMultiDamage(); CTakeDamageInfo info( GetOwner(), GetOwner(), sk_plr_dmg_crowbar.GetFloat(), DMG_CLUB ); CalculateMeleeDamageForce( &info, hitDirection, m_traceHit.endpos ); pHitEntity->DispatchTraceAttack( info, hitDirection, &m_traceHit ); ApplyMultiDamage(); // Now hit all triggers along the ray that... TraceAttackToTriggers( CTakeDamageInfo( GetOwner(), GetOwner(), sk_plr_dmg_crowbar.GetFloat(), DMG_CLUB ), m_traceHit.startpos, m_traceHit.endpos, hitDirection ); //Play an impact sound ImpactSound( pHitEntity ); }#endif //Apply an impact effect ImpactEffect();}
开发者ID:AgentAgrimar,项目名称:source-sdk-trilogy,代码行数:38,
示例8: AngleVectors// Overridden for Gargantua because his swing starts lower as// a percentage of his height (otherwise he swings over the// players head)//=========================================================CBaseEntity* CNPC_Gargantua::GargantuaCheckTraceHullAttack(float flDist, int iDamage, int iDmgType){ trace_t tr; Vector vForward, vUp; AngleVectors( GetAbsAngles(), &vForward, NULL, &vUp ); Vector vecStart = GetAbsOrigin(); vecStart.z += 64; Vector vecEnd = vecStart + ( vForward * flDist) - ( vUp * flDist * 0.3); //UTIL_TraceHull( vecStart, vecEnd, dont_ignore_monsters, head_hull, ENT(pev), &tr ); UTIL_TraceEntity( this, GetAbsOrigin(), vecEnd, MASK_SOLID, &tr ); if ( tr.m_pEnt ) { CBaseEntity *pEntity = tr.m_pEnt; if ( iDamage > 0 ) { CTakeDamageInfo info( this, this, iDamage, iDmgType ); CalculateMeleeDamageForce( &info, vForward, tr.endpos ); pEntity->TakeDamage( info ); } return pEntity; } return NULL;}
开发者ID:hitmen047,项目名称:TF2HLCoop,代码行数:35,
示例9: infovoid CNPC_Tentacle::HitTouch( CBaseEntity *pOther ){ if (m_flHitTime > gpGlobals->curtime) return; // only look at the ones where the player hit me if( pOther == NULL || pOther->GetModelIndex() == GetModelIndex() || ( pOther->GetSolidFlags() & FSOLID_TRIGGER ) ) return; //Right now the BoneFollower will always be hit in box 0, and //will pass that to us. Make *any* touch by the physics objects a kill //as the ragdoll only covers the top portion of the tentacle. if ( pOther->m_takedamage ) { CTakeDamageInfo info( this, this, m_iHitDmg, DMG_CLUB ); Vector vDamageForce = pOther->GetAbsOrigin() - GetAbsOrigin(); VectorNormalize( vDamageForce ); CalculateMeleeDamageForce( &info, vDamageForce, pOther->GetAbsOrigin() ); pOther->TakeDamage( info ); m_flHitTime = gpGlobals->curtime + 0.5; }}
开发者ID:AgentAgrimar,项目名称:source-sdk-trilogy,代码行数:25,
示例10: Assert//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CBaseProjectile::ProjectileTouch( CBaseEntity *pOther ){ // Verify a correct "other." Assert( pOther ); if ( !pOther->IsSolid() || pOther->IsSolidFlagSet( FSOLID_VOLUME_CONTENTS ) ) return; // Handle hitting skybox (disappear). const trace_t *pTrace = &CBaseEntity::GetTouchTrace(); trace_t *pNewTrace = const_cast<trace_t*>( pTrace ); if( pTrace->surface.flags & SURF_SKY ) { UTIL_Remove( this ); return; } CTakeDamageInfo info; info.SetAttacker( GetOwnerEntity() ); info.SetInflictor( this ); info.SetDamage( GetDamage() ); info.SetDamageType( GetDamageType() ); CalculateMeleeDamageForce( &info, GetAbsVelocity(), GetAbsOrigin(), GetDamageScale() ); Vector dir; AngleVectors( GetAbsAngles(), &dir ); pOther->DispatchTraceAttack( info, dir, pNewTrace ); ApplyMultiDamage(); UTIL_Remove( this );}
开发者ID:BenLubar,项目名称:SwarmDirector2,代码行数:35,
示例11: Assertint CASW_Parasite::CalcDamageInfo( CTakeDamageInfo *pInfo ){ Assert(ASWGameRules()); pInfo->Set( this, this, asw_parasite_defanged_damage.GetFloat(), DMG_ACID ); CalculateMeleeDamageForce( pInfo, GetAbsVelocity(), GetAbsOrigin() ); return pInfo->GetDamage();}
开发者ID:detoxhby,项目名称:SwarmDirector2,代码行数:7,
示例12: SetNextThinkvoid CStomp::Think( void ){ trace_t tr; SetNextThink( gpGlobals->curtime + 0.1 ); // Do damage for this frame Vector vecStart = GetAbsOrigin(); vecStart.z += 30; Vector vecEnd = vecStart + (m_vecMoveDir * m_flSpeed * gpGlobals->frametime); UTIL_TraceHull( vecStart, vecEnd, Vector(-32, -32, -32), Vector(32, 32, 32), MASK_SOLID, m_pOwner, COLLISION_GROUP_NONE, &tr );// NDebugOverlay::Line( vecStart, vecEnd, 0, 255, 0, false, 10.0f ); if ( tr.m_pEnt ) { CBaseEntity *pEntity = tr.m_pEnt; CTakeDamageInfo info( this, this, 50, DMG_SONIC ); CalculateMeleeDamageForce( &info, m_vecMoveDir, tr.endpos ); pEntity->TakeDamage( info ); } // Accelerate the effect m_flSpeed += (gpGlobals->frametime) * m_uiFramerate; m_uiFramerate += (gpGlobals->frametime) * 2000; // Move and spawn trails while ( gpGlobals->curtime - m_flDmgTime > STOMP_INTERVAL ) { SetAbsOrigin( GetAbsOrigin() + m_vecMoveDir * m_flSpeed * STOMP_INTERVAL ); for ( int i = 0; i < 2; i++ ) { CSprite *pSprite = CSprite::SpriteCreate( GARG_STOMP_SPRITE_NAME, GetAbsOrigin(), TRUE ); if ( pSprite ) { UTIL_TraceLine( GetAbsOrigin(), GetAbsOrigin() - Vector(0,0,500), MASK_SOLID, this, COLLISION_GROUP_NONE, &tr ); pSprite->SetAbsOrigin( tr.endpos );// pSprite->pev->velocity = Vector(RandomFloat(-200,200),RandomFloat(-200,200),175); pSprite->SetNextThink( gpGlobals->curtime + 0.3 ); pSprite->SetThink( &CSprite::SUB_Remove ); pSprite->SetTransparency( kRenderTransAdd, 255, 255, 255, 255, kRenderFxFadeFast ); } g_pEffects->EnergySplash( tr.endpos, tr.plane.normal ); } m_flDmgTime += STOMP_INTERVAL; // Scale has the "life" of this effect m_flScale -= STOMP_INTERVAL * m_flSpeed; if ( m_flScale <= 0 ) { // Life has run out UTIL_Remove(this);// STOP_SOUND( edict(), CHAN_BODY, GARG_STOMP_BUZZ_SOUND ); CPASAttenuationFilter filter( this ); StopSound( entindex(), CHAN_STATIC, GARG_STOMP_BUZZ_SOUND ); } }}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:59,
示例13: FirePistol//---------------------------------------------------------//---------------------------------------------------------void CNPC_Assassin::HandleAnimEvent( animevent_t *pEvent ){ if ( pEvent->event == AE_ASSASIN_FIRE_PISTOL_RIGHT ) { FirePistol( 0 ); return; } if ( pEvent->event == AE_ASSASIN_FIRE_PISTOL_LEFT ) { FirePistol( 1 ); return; } if ( pEvent->event == AE_ASSASIN_KICK_HIT ) { Vector attackDir = BodyDirection2D(); Vector attackPos = WorldSpaceCenter() + ( attackDir * 64.0f ); trace_t tr; UTIL_TraceHull( WorldSpaceCenter(), attackPos, -Vector(8,8,8), Vector(8,8,8), MASK_SHOT_HULL, this, COLLISION_GROUP_NONE, &tr ); if ( ( tr.m_pEnt != NULL ) && ( tr.DidHitWorld() == false ) ) { if ( tr.m_pEnt->m_takedamage != DAMAGE_NO ) { CTakeDamageInfo info( this, this, 5, DMG_CLUB ); CalculateMeleeDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos ); tr.m_pEnt->TakeDamage( info ); CBasePlayer *pPlayer = ToBasePlayer( tr.m_pEnt ); if ( pPlayer != NULL ) { //Kick the player angles pPlayer->ViewPunch( QAngle( -30, 40, 10 ) ); } EmitSound( "Zombie.AttackHit" ); //EmitSound( "Assassin.AttackHit" ); } } else { EmitSound( "Assassin.AttackMiss" ); //EmitSound( "Assassin.AttackMiss" ); } return; } BaseClass::HandleAnimEvent( pEvent );}
开发者ID:0xFEEDC0DE64,项目名称:UltraGame,代码行数:56,
示例14: ToBasePlayer//------------------------------------------------------------------------------// Purpose: Implement impact function//------------------------------------------------------------------------------void CBaseSDKBludgeonWeapon::Hit( trace_t &traceHit, Activity nHitActivity, bool bIsSecondary ){ CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); //Do view kick AddViewKick(); //Make sound for the AI CSoundEnt::InsertSound( SOUND_BULLET_IMPACT, traceHit.endpos, 400, 0.2f, pPlayer ); // This isn't great, but it's something for when the crowbar hits. pPlayer->RumbleEffect( RUMBLE_AR2, 0, RUMBLE_FLAG_RESTART ); CBaseEntity *pHitEntity = traceHit.m_pEnt; //Apply damage to a hit target if ( pHitEntity != NULL ) { Vector hitDirection; pPlayer->EyeVectors( &hitDirection, NULL, NULL ); VectorNormalize( hitDirection ); CTakeDamageInfo info( GetOwner(), GetOwner(), GetDamageForActivity( nHitActivity ), DMG_CLUB ); if( pPlayer && pHitEntity->IsNPC() ) { // If bonking an NPC, adjust damage. info.AdjustPlayerDamageInflictedForSkillLevel(); } CalculateMeleeDamageForce( &info, hitDirection, traceHit.endpos ); pHitEntity->DispatchTraceAttack( info, hitDirection, &traceHit ); ApplyMultiDamage(); // Now hit all triggers along the ray that... TraceAttackToTriggers( info, traceHit.startpos, traceHit.endpos, hitDirection ); if ( ToBaseCombatCharacter( pHitEntity ) ) { gamestats->Event_WeaponHit( pPlayer, !bIsSecondary, GetClassname(), info ); } } // Apply an impact effect ImpactEffect( traceHit );}
开发者ID:gamenew09,项目名称:SourceSDK2010,代码行数:50,
示例15: SetTouchvoid CBreakable::BreakTouch( CBaseEntity *pOther ){ float flDamage; // only players can break these right now if ( !pOther->IsPlayer() || !IsBreakable() ) { return; } // can I be broken when run into? if ( HasSpawnFlags( SF_BREAK_TOUCH ) ) { flDamage = pOther->GetSmoothedVelocity().Length() * 0.01; if (flDamage >= m_iHealth) { m_takedamage = DAMAGE_YES; SetTouch( NULL ); OnTakeDamage( CTakeDamageInfo( pOther, pOther, flDamage, DMG_CRUSH ) ); // do a little damage to player if we broke glass or computer CTakeDamageInfo info( pOther, pOther, flDamage/4, DMG_SLASH ); CalculateMeleeDamageForce( &info, (pOther->GetAbsOrigin() - GetAbsOrigin()), GetAbsOrigin() ); pOther->TakeDamage( info ); } } // can I be broken when stood upon? if ( HasSpawnFlags( SF_BREAK_PRESSURE ) && pOther->GetGroundEntity() == this ) { // play creaking sound here. DamageSound(); m_hBreaker = pOther; SetThink ( &CBreakable::Die ); SetTouch( NULL ); // Add optional delay SetNextThink( gpGlobals->curtime + m_flPressureDelay ); }}
开发者ID:Biohazard90,项目名称:g-string_2013,代码行数:45,
示例16: ToBasePlayer//------------------------------------------------------------------------------// Purpose: Implement impact function//------------------------------------------------------------------------------void CBaseHL2MPBludgeonWeapon::Hit( trace_t &traceHit, Activity nHitActivity ){ CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); //Do view kick// AddViewKick(); CBaseEntity *pHitEntity = traceHit.m_pEnt; //Apply damage to a hit target if ( pHitEntity != NULL ) { Vector hitDirection; pPlayer->EyeVectors( &hitDirection, NULL, NULL ); VectorNormalize( hitDirection );#ifndef CLIENT_DLL CTakeDamageInfo info( GetOwner(), GetOwner(), GetDamageForActivity( nHitActivity ), DMG_CLUB ); if( pPlayer && pHitEntity->IsNPC() ) { // If bonking an NPC, adjust damage. info.AdjustPlayerDamageInflictedForSkillLevel(); } CalculateMeleeDamageForce( &info, hitDirection, traceHit.endpos ); pHitEntity->DispatchTraceAttack( info, hitDirection, &traceHit ); ApplyMultiDamage(); // Now hit all triggers along the ray that... TraceAttackToTriggers( info, traceHit.startpos, traceHit.endpos, hitDirection );#endif //DHL - Skillet if ( pHitEntity->entindex() == 0 ) WeaponSound( MELEE_HIT_WORLD ); else WeaponSound( MELEE_HIT ); } // Apply an impact effect ImpactEffect( traceHit );}
开发者ID:dreckard,项目名称:dhl2,代码行数:46,
示例17: GetAbsOriginvoid CASW_Harvester::StartTouch( CBaseEntity *pOther ){ BaseClass::StartTouch( pOther ); CASW_Marine *pMarine = CASW_Marine::AsMarine( pOther ); if (pMarine) { // don't hurt him if he was hurt recently if (m_fLastTouchHurtTime + 0.6f > gpGlobals->curtime) { return; } // hurt the marine Vector vecForceDir = (pMarine->GetAbsOrigin() - GetAbsOrigin()); CTakeDamageInfo info( this, this, asw_harvester_touch_damage.GetInt(), DMG_SLASH ); CalculateMeleeDamageForce( &info, vecForceDir, pMarine->GetAbsOrigin() ); pMarine->TakeDamage( info ); m_fLastTouchHurtTime = gpGlobals->curtime; }}
开发者ID:Au-heppa,项目名称:swarm-sdk,代码行数:20,
示例18: RelinkBeam//-----------------------------------------------------------------------------// Purpose: Damages anything in the beam.// Input : ptr - //-----------------------------------------------------------------------------void CBeam::BeamDamage( trace_t *ptr ){ RelinkBeam();#if !defined( CLIENT_DLL ) if ( ptr->fraction != 1.0 && ptr->m_pEnt != NULL ) { CBaseEntity *pHit = ptr->m_pEnt; if ( pHit ) { ClearMultiDamage(); Vector dir = ptr->endpos - GetAbsOrigin(); VectorNormalize( dir ); int nDamageType = DMG_ENERGYBEAM;#ifndef HL1_DLL if (m_nDissolveType == 0) { nDamageType = DMG_DISSOLVE; } else if ( m_nDissolveType > 0 ) { nDamageType = DMG_DISSOLVE | DMG_SHOCK; }#endif CTakeDamageInfo info( this, this, m_flDamage * (gpGlobals->curtime - m_flFireTime), nDamageType ); CalculateMeleeDamageForce( &info, dir, ptr->endpos ); pHit->DispatchTraceAttack( info, dir, ptr ); ApplyMultiDamage(); if ( HasSpawnFlags( SF_BEAM_DECALS ) ) { if ( pHit->IsBSPModel() ) { UTIL_DecalTrace( ptr, GetDecalName() ); } } } }#endif m_flFireTime = gpGlobals->curtime;}
开发者ID:xxauroraxx,项目名称:Source.Python,代码行数:45,
示例19: info//softcopy: ignited/explode marine by boomer on touch/on fire touch, 1=melee, 2=touch, 3=Allvoid CASW_Boomer::StartTouch( CBaseEntity *pOther ){ BaseClass::StartTouch( pOther ); CASW_Marine *pMarine = CASW_Marine::AsMarine( pOther ); if ( pMarine ) { m_TouchExplosionDamage = asw_boomer_touch_damage.GetInt(); CTakeDamageInfo info( this, this, m_TouchExplosionDamage, DMG_SLASH ); damageTypes = "on touch"; if (asw_boomer_ignite.GetInt() >= 2 || (m_bOnFire && asw_boomer_touch_onfire.GetBool())) MarineIgnite(pMarine, info, alienLabel, damageTypes); if ( m_fLastTouchHurtTime + 0.35f /*0.6f*/ > gpGlobals->curtime || m_TouchExplosionDamage <=0 ) //don't hurt him if he was hurt recently return; Vector vecForceDir = ( pMarine->GetAbsOrigin() - GetAbsOrigin() ); // hurt the marine CalculateMeleeDamageForce( &info, vecForceDir, pMarine->GetAbsOrigin() ); pMarine->TakeDamage( info ); if (asw_boomer_explode.GetInt() >= 2 ) MarineExplode(pMarine, alienLabel, damageTypes); m_fLastTouchHurtTime = gpGlobals->curtime; }}
开发者ID:jtanx,项目名称:ch1ckenscoop,代码行数:23,
示例20: GetVelocity//-----------------------------------------------------------------------------// Purpose:// Input :// Output ://-----------------------------------------------------------------------------void CGrenade_Brickbat::BrickbatTouch( CBaseEntity *pOther ){ // ----------------------------------------------------------- // Might be physically simulated so get my velocity manually // ----------------------------------------------------------- Vector vVelocity; GetVelocity(&vVelocity,NULL); // ----------------------------------- // Do damage if we moving fairly fast // ----------------------------------- if (vVelocity.Length() > 100) { if (GetThrower()) { trace_t tr; tr = CBaseEntity::GetTouchTrace( ); ClearMultiDamage( ); Vector forward; AngleVectors( GetLocalAngles(), &forward ); CTakeDamageInfo info( this, GetThrower(), m_flDamage, DMG_CRUSH ); CalculateMeleeDamageForce( &info, forward, tr.endpos ); pOther->DispatchTraceAttack( info, forward, &tr ); ApplyMultiDamage(); } // If this thrown item explodes, blow it up if (m_bExplodes) { Detonate(); return; } } else if (pOther->GetFlags() & FL_CLIENT) { SpawnBrickbatWeapon(); return; }}
开发者ID:Au-heppa,项目名称:source-sdk-2013,代码行数:44,
示例21: filter//-----------------------------------------------------------------------------// Purpose: Automatic Melee Attack//-----------------------------------------------------------------------------void CPlayerClassCommando::Boot( CBaseTFPlayer *pTarget ){ CPASAttenuationFilter filter( m_pPlayer, "Commando.BootSwing" ); CBaseEntity::EmitSound( filter, m_pPlayer->entindex(), "Commando.BootSwing" ); CBaseEntity::EmitSound( filter, m_pPlayer->entindex(), "Commando.BootHit" ); // Damage the target CTakeDamageInfo info( m_pPlayer, m_pPlayer, 25, DMG_CLUB ); CalculateMeleeDamageForce( &info, (pTarget->GetAbsOrigin() - m_pPlayer->GetAbsOrigin()), pTarget->GetAbsOrigin() ); pTarget->TakeDamage( info ); Vector vecForward; AngleVectors( m_pPlayer->GetLocalAngles(), &vecForward ); // Give it a lot of "in the air" vecForward.z = max( 0.8, vecForward.z ); VectorNormalize( vecForward ); // Knock the target to the ground for a few seconds (use default duration) pTarget->KnockDownPlayer( vecForward, 500.0f, tf_knockdowntime.GetFloat() );}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:25,
示例22: GetEnemy//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CNPC_Ichthyosaur::Bite( void ){ //Don't allow another bite too soon if ( m_flNextBiteTime > gpGlobals->curtime ) return; CBaseEntity *pHurt; //FIXME: E3 HACK - Always damage bullseyes if we're scripted to hit them if ( ( GetEnemy() != NULL ) && ( GetEnemy()->Classify() == CLASS_BULLSEYE ) ) { pHurt = GetEnemy(); } else { pHurt = CheckTraceHullAttack( 108, Vector(-32,-32,-32), Vector(32,32,32), 0, DMG_CLUB ); } //Hit something if ( pHurt != NULL ) { CTakeDamageInfo info( this, this, sk_ichthyosaur_melee_dmg.GetInt(), DMG_CLUB ); if ( pHurt->IsPlayer() ) { CBasePlayer *pPlayer = ToBasePlayer( pHurt ); if ( pPlayer ) { if ( ( ( m_flHoldTime < gpGlobals->curtime ) && ( pPlayer->m_iHealth < (pPlayer->m_iMaxHealth*0.5f)) ) || ( pPlayer->GetWaterLevel() < 1 ) ) { //EnsnareVictim( pHurt ); } else { info.SetDamage( sk_ichthyosaur_melee_dmg.GetInt() * 3 ); } CalculateMeleeDamageForce( &info, GetAbsVelocity(), pHurt->GetAbsOrigin() ); pHurt->TakeDamage( info ); color32 red = {64, 0, 0, 255}; UTIL_ScreenFade( pPlayer, red, 0.5, 0, FFADE_IN ); //Disorient the player QAngle angles = pPlayer->GetLocalAngles(); angles.x += random->RandomInt( 60, 25 ); angles.y += random->RandomInt( 60, 25 ); angles.z = 0.0f; pPlayer->SetLocalAngles( angles ); pPlayer->SnapEyeAngles( angles ); } } else { CalculateMeleeDamageForce( &info, GetAbsVelocity(), pHurt->GetAbsOrigin() ); pHurt->TakeDamage( info ); } m_flNextBiteTime = gpGlobals->curtime + random->RandomFloat( 2.0f, 4.0f ); //Bubbles! UTIL_Bubbles( pHurt->GetAbsOrigin()+Vector(-32.0f,-32.0f,-32.0f), pHurt->GetAbsOrigin()+Vector(32.0f,32.0f,0.0f), random->RandomInt( 16, 32 ) ); // Play a random attack hit sound EmitSound( "NPC_Ichthyosaur.Bite" ); if ( GetActivity() == ACT_MELEE_ATTACK1 ) { SetActivity( (Activity) ACT_ICH_BITE_HIT ); } return; } //Play the miss animation and sound if ( GetActivity() == ACT_MELEE_ATTACK1 ) { SetActivity( (Activity) ACT_ICH_BITE_MISS ); } //Miss sound EmitSound( "NPC_Ichthyosaur.BiteMiss" );}
开发者ID:Au-heppa,项目名称:source-sdk-2013,代码行数:89,
示例23: GetAbsAnglesvoid CSnark::SuperBounceTouch( CBaseEntity *pOther ){ float flpitch; trace_t tr = CBaseEntity::GetTouchTrace( ); // don't hit the guy that launched this grenade if ( m_hOwner && ( pOther == m_hOwner ) ) return; // at least until we've bounced once m_hOwner = NULL; QAngle angles = GetAbsAngles(); angles.x = 0; angles.z = 0; SetAbsAngles( angles ); // avoid bouncing too much if ( m_flNextHit > gpGlobals->curtime) return; // higher pitch as squeeker gets closer to detonation time flpitch = 155.0 - 60.0 * ( ( m_flDie - gpGlobals->curtime ) / SQUEEK_DETONATE_DELAY ); if ( pOther->m_takedamage && m_flNextAttack < gpGlobals->curtime ) { // attack! // make sure it's me who has touched them if ( tr.m_pEnt == pOther ) { // and it's not another squeakgrenade if ( tr.m_pEnt->GetModelIndex() != GetModelIndex() ) { // ALERT( at_console, "hit enemy/n"); ClearMultiDamage(); Vector vecForward; AngleVectors( GetAbsAngles(), &vecForward ); if ( m_hOwner != NULL ) { CTakeDamageInfo info( this, m_hOwner, sk_snark_dmg_bite.GetFloat(), DMG_SLASH ); CalculateMeleeDamageForce( &info, vecForward, tr.endpos ); pOther->DispatchTraceAttack( info, vecForward, &tr ); } else { CTakeDamageInfo info( this, this, sk_snark_dmg_bite.GetFloat(), DMG_SLASH ); CalculateMeleeDamageForce( &info, vecForward, tr.endpos ); pOther->DispatchTraceAttack( info, vecForward, &tr ); } ApplyMultiDamage(); SetDamage( GetDamage() + sk_snark_dmg_pop.GetFloat() ); // add more explosion damage // m_flDie += 2.0; // add more life // make bite sound CPASAttenuationFilter filter( this ); enginesound->EmitSound( filter, entindex(), CHAN_WEAPON, "squeek/sqk_deploy1.wav", 1, ATTN_NORM, 0, (int)flpitch ); m_flNextAttack = gpGlobals->curtime + 0.5; } } else { // ALERT( at_console, "been hit/n"); } } m_flNextHit = gpGlobals->curtime + 0.1; m_flNextHunt = gpGlobals->curtime; if ( g_pGameRules->IsMultiplayer() ) { // in multiplayer, we limit how often snarks can make their bounce sounds to prevent overflows. if ( gpGlobals->curtime < m_flNextBounceSoundTime ) { // too soon! return; } } if ( !( GetFlags() & FL_ONGROUND ) ) { // play bounce sound CPASAttenuationFilter filter2( this ); switch ( random->RandomInt( 0, 2 ) ) { case 0: enginesound->EmitSound( filter2, entindex(), CHAN_VOICE, "squeek/sqk_hunt1.wav", 1, ATTN_NORM, 0, (int)flpitch ); break; case 1: enginesound->EmitSound( filter2, entindex(), CHAN_VOICE, "squeek/sqk_hunt2.wav", 1, ATTN_NORM, 0, (int)flpitch ); break; case 2: enginesound->EmitSound( filter2, entindex(), CHAN_VOICE, "squeek/sqk_hunt3.wav", 1, ATTN_NORM, 0, (int)flpitch ); break; } CSoundEnt::InsertSound( SOUND_COMBAT, GetAbsOrigin(), 256, 0.25 ); } else//.........这里部分代码省略.........
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:101,
示例24: AngleVectors// Основная атака огнеметом// This is the cremator's main attack, or more precisely, its damage function.void CNPC_Cremator::DispatchSpray( CBaseEntity *pEntity ){ Vector vecSrc, vecAim; trace_t tr; //const char *entityname = pEntity->GetClassname(); Vector forward, right, up; AngleVectors( GetAbsAngles(), &forward, &right, &up ); vecSrc = GetAbsOrigin() + up * 36; vecAim = GetShootEnemyDir( vecSrc ); float deflection = 0.01; vecAim = vecAim + 1 * right * random->RandomFloat( 0, deflection ) + up * random->RandomFloat( -deflection, deflection ); UTIL_TraceLine ( vecSrc, vecSrc + vecAim * 512, MASK_SOLID, this, COLLISION_GROUP_NONE, &tr); /* if ( tr.DidHitWorld() ) // spawn flames on solid surfaces. // It's not very important since it is extremely rare for a cremator to // hit brush geometry but might be a nice feature for a close-space combat // it also works fine but again is EXTREMELY hard to get in-game { Vector ofsDir = ( tr.endpos - GetAbsOrigin() ); float offset = VectorNormalize( ofsDir ); if ( offset > 128 ) offset = 128; float scale = 0.1f + ( 0.75f * ( 1.0f - ( offset / 128.0f ) ) ); float growth = 0.1f + ( 0.75f * (offset / 128.0f ) ); if ( tr.surface.flags & CONTENTS_GRATE ) // get smaller flames on grates since they have a smaller burning area { scale = 0.1f + ( 0.15f * ( 1.0f - ( offset / 128.0f ) ) ); } else { scale = 0.1f + ( 0.75f * ( 1.0f - ( offset / 128.0f ) ) ); } FireSystem_StartFire( tr.endpos, scale, growth, 8.0, 10.0f, (SF_FIRE_START_ON|SF_FIRE_START_FULL), (CBaseEntity*) this, FIRE_NATURAL ); } */ pEntity = tr.m_pEnt; if ( pEntity != NULL && m_takedamage ) { CTakeDamageInfo firedamage( this, this, sk_cremator_firedamage.GetFloat(), DMG_BURN ); CTakeDamageInfo radiusdamage( this, this, sk_cremator_radiusdamage.GetFloat(), DMG_PLASMA ); CalculateMeleeDamageForce( &firedamage, vecAim, tr.endpos ); RadiusDamage ( CTakeDamageInfo ( this, this, 2, DMG_PLASMA ), // AOE; this stuff makes cremators absurdly powerfull sometimes btw tr.endpos, 64.0f, CLASS_NONE, NULL ); pEntity->DispatchTraceAttack( ( firedamage ), vecAim, &tr ); Vector flEnemyLKP = pEntity->GetAbsOrigin(); GetMotor()->SetIdealYawToTargetAndUpdate( flEnemyLKP ); ClearMultiDamage(); } m_iAmmo --;}
开发者ID:RaraFolf,项目名称:FIREFIGHT-RELOADED-src-sdk-2013,代码行数:68,
示例25: GetPlayerOwner// -----------------------------------------------------------------------------// Purpose:// Note: Think function to delay the impact decal until the animation is finished // playing.// -----------------------------------------------------------------------------void CTFWeaponBaseMelee::Smack( void ){ trace_t trace; CBasePlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return;#if !defined (CLIENT_DLL) // Move other players back to history positions based on local player's lag lagcompensation->StartLagCompensation( pPlayer, pPlayer->GetCurrentCommand() );#endif // We hit, setup the smack. if ( DoSwingTrace( trace ) ) { // Hit sound - immediate. if( trace.m_pEnt->IsPlayer() ) { WeaponSound( MELEE_HIT ); } else { WeaponSound( MELEE_HIT_WORLD ); } // Get the current player. CTFPlayer *pPlayer = GetTFPlayerOwner(); if ( !pPlayer ) return; Vector vecForward; AngleVectors( pPlayer->EyeAngles(), &vecForward ); Vector vecSwingStart = pPlayer->Weapon_ShootPosition(); Vector vecSwingEnd = vecSwingStart + vecForward * 48;#ifndef CLIENT_DLL // Do Damage. int iCustomDamage = TF_DMG_CUSTOM_NONE; float flDamage = GetMeleeDamage( trace.m_pEnt, iCustomDamage ); int iDmgType = DMG_BULLET | DMG_NEVERGIB | DMG_CLUB; if ( IsCurrentAttackACrit() ) { // TODO: Not removing the old critical path yet, but the new custom damage is marking criticals as well for melee now. iDmgType |= DMG_CRITICAL; } CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon(); CTFUbersaw *pUbersaw = dynamic_cast<CTFUbersaw*>(pWpn); CWeaponMedigun *pMedigun = static_cast<CWeaponMedigun*>(pPlayer->Weapon_OwnsThisID(TF_WEAPON_MEDIGUN)); if (pMedigun && pUbersaw) { if(trace.m_pEnt->IsPlayer() && trace.m_pEnt->GetTeamNumber() != pPlayer->GetTeamNumber()) { pMedigun->AddCharge(); } } CWeaponKritzkrieg *pKritzkrieg = static_cast<CWeaponKritzkrieg*>(pPlayer->Weapon_OwnsThisID(TF_WEAPON_KRITZKRIEG)); if (pKritzkrieg && pUbersaw) { if(trace.m_pEnt->IsPlayer() && trace.m_pEnt->GetTeamNumber() != pPlayer->GetTeamNumber()) { pKritzkrieg->AddCharge(); } } CTakeDamageInfo info( pPlayer, pPlayer, flDamage, iDmgType, iCustomDamage ); CalculateMeleeDamageForce( &info, vecForward, vecSwingEnd, 1.0f / flDamage * tf_meleeattackforcescale.GetFloat() ); trace.m_pEnt->DispatchTraceAttack( info, vecForward, &trace ); ApplyMultiDamage(); OnEntityHit( trace.m_pEnt );#endif // Don't impact trace friendly players or objects if ( trace.m_pEnt && trace.m_pEnt->GetTeamNumber() != pPlayer->GetTeamNumber() ) {#ifdef CLIENT_DLL UTIL_ImpactTrace( &trace, DMG_CLUB );#endif m_bConnected = true; } }#if !defined (CLIENT_DLL) lagcompensation->FinishLagCompensation( pPlayer );#endif}
开发者ID:staticfox,项目名称:TF2Classic,代码行数:91,
示例26: filter//=========================================================// HandleAnimEvent - catches the monster-specific messages// that occur when tagged animation frames are played.//// Returns number of events handled, 0 if none.//=========================================================void CNPC_BigMomma::HandleAnimEvent( animevent_t *pEvent ){ CPASAttenuationFilter filter( this ); Vector vecFwd, vecRight, vecUp; QAngle angles; angles = GetAbsAngles(); AngleVectors( angles, &vecFwd, &vecRight, &vecUp ); switch( pEvent->event ) { case BIG_AE_MELEE_ATTACKBR: case BIG_AE_MELEE_ATTACKBL: case BIG_AE_MELEE_ATTACK1: { Vector center = GetAbsOrigin() + vecFwd * 128; Vector mins = center - Vector( 64, 64, 0 ); Vector maxs = center + Vector( 64, 64, 64 ); CBaseEntity *pList[8]; int count = UTIL_EntitiesInBox( pList, 8, mins, maxs, FL_NPC | FL_CLIENT ); CBaseEntity *pHurt = NULL; for ( int i = 0; i < count && !pHurt; i++ ) { if ( pList[i] != this ) { if ( pList[i]->GetOwnerEntity() != this ) { pHurt = pList[i]; } } } if ( pHurt ) { CTakeDamageInfo info( this, this, 15, DMG_CLUB | DMG_SLASH ); CalculateMeleeDamageForce( &info, (pHurt->GetAbsOrigin() - GetAbsOrigin()), pHurt->GetAbsOrigin() ); pHurt->TakeDamage( info ); QAngle newAngles = angles; newAngles.x = 15; if ( pHurt->IsPlayer() ) { ((CBasePlayer *)pHurt)->SetPunchAngle( newAngles ); } switch( pEvent->event ) { case BIG_AE_MELEE_ATTACKBR:// pHurt->pev->velocity = pHurt->pev->velocity + (vecFwd * 150) + Vector(0,0,250) - (vecRight * 200); pHurt->SetAbsVelocity( pHurt->GetAbsVelocity() + (vecFwd * 150) + Vector(0,0,250) - (vecRight * 200) ); break; case BIG_AE_MELEE_ATTACKBL: pHurt->SetAbsVelocity( pHurt->GetAbsVelocity() + (vecFwd * 150) + Vector(0,0,250) + (vecRight * 200) ); break; case BIG_AE_MELEE_ATTACK1: pHurt->SetAbsVelocity( pHurt->GetAbsVelocity() + (vecFwd * 220) + Vector(0,0,200) ); break; } pHurt->SetGroundEntity( NULL ); EmitSound( filter, entindex(), "BigMomma.AttackHit" ); } } break; case BIG_AE_SCREAM: EmitSound( filter, entindex(), "BigMomma.Alert" ); break; case BIG_AE_PAIN_SOUND: EmitSound( filter, entindex(), "BigMomma.Pain" ); break; case BIG_AE_ATTACK_SOUND: EmitSound( filter, entindex(), "BigMomma.Attack" ); break; case BIG_AE_BIRTH_SOUND: EmitSound( filter, entindex(), "BigMomma.Birth" ); break; case BIG_AE_SACK: if ( RandomInt(0,100) < 30 ) { EmitSound( filter, entindex(), "BigMomma.Sack" ); } break; case BIG_AE_DEATHSOUND: EmitSound( filter, entindex(), "BigMomma.Die" ); break;//.........这里部分代码省略.........
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:101,
注:本文中的CalculateMeleeDamageForce函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ CalculatePassengerPosition函数代码示例 C++ Calculate函数代码示例 |