本文整理汇总了C++中G_RadiusDamage函数的典型用法代码示例。如果您正苦于以下问题:C++ G_RadiusDamage函数的具体用法?C++ G_RadiusDamage怎么用?C++ G_RadiusDamage使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了G_RadiusDamage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: G_ExplodeMissile
// Explode a missile without an impact
void G_ExplodeMissile( gentity_t *ent ) {
vector3 dir = { 0.0f, 0.0f, 1.0f }, origin = { 0.0f };
BG_EvaluateTrajectory( &ent->s.pos, level.time, &origin );
VectorSnap( &origin );
G_SetOrigin( ent, &origin );
ent->s.eType = ET_GENERAL;
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( &dir ) );
ent->freeAfterEvent = qtrue;
ent->takedamage = qfalse;
if ( ent->splashDamage || ent->splashRadius )
{
if ( G_RadiusDamage( &ent->r.currentOrigin, ent->parent, (float)ent->splashDamage, (float)ent->splashRadius, ent, ent, ent->splashMethodOfDeath ) )
{
if ( ent->parent )
g_entities[ent->parent->s.number].client->accuracy_hits++;
else if ( ent->activator )
g_entities[ent->activator->s.number].client->accuracy_hits++;
}
}
trap->SV_LinkEntity( (sharedEntity_t *)ent );
}
示例2: DetPackBlow
void DetPackBlow(gentity_t *self)
{
vec3_t v;
self->pain = 0;
self->die = 0;
self->takedamage = qfalse;
if ( self->target_ent )
{//we were attached to something, do *direct* damage to it!
G_Damage( self->target_ent, self, &g_entities[self->r.ownerNum], v, self->r.currentOrigin, self->damage, 0, MOD_DET_PACK_SPLASH );
}
G_RadiusDamage( self->r.currentOrigin, self->parent, self->splashDamage, self->splashRadius, self, self, MOD_DET_PACK_SPLASH );
v[0] = 0;
v[1] = 0;
v[2] = 1;
if (self->count == -1)
{
VectorCopy(self->pos2, v);
}
G_PlayEffect(EFFECT_EXPLOSION_DETPACK, self->r.currentOrigin, v);
self->think = G_FreeEntity;
self->nextthink = level.time;
}
示例3: NoghriGasCloudThink
void NoghriGasCloudThink( gentity_t *self )
{
self->nextthink = level.time + FRAMETIME;
AddSightEvent( self->owner, self->currentOrigin, 200, AEL_DANGER, 50 );
if ( self->fx_time < level.time )
{
vec3_t up = {0,0,1};
G_PlayEffect( "noghri_stick/gas_cloud", self->currentOrigin, up );
self->fx_time = level.time + 250;
}
if ( level.time - self->s.time <= 2500 )
{
if ( !Q_irand( 0, 3-g_spskill->integer ) )
{
G_RadiusDamage( self->currentOrigin, self->owner, Q_irand( 1, 4 ), self->splashRadius,
self->owner, self->splashMethodOfDeath );
}
}
if ( level.time - self->s.time > 3000 )
{
G_FreeEntity( self );
}
}
示例4: thermalDetonatorExplode
//---------------------------------------------------------
void thermalDetonatorExplode( gentity_t *ent )
//---------------------------------------------------------
{
if ( !ent->count )
{
G_Sound( ent, CHAN_WEAPON, G_SoundIndex( "sound/weapons/thermal/warning.wav" ) );
ent->count = 1;
ent->genericValue5 = level.time + 500;
ent->think = thermalThinkStandard;
ent->nextthink = level.time;
ent->r.svFlags |= SVF_BROADCAST;//so everyone hears/sees the explosion?
}
else
{
vec3_t origin;
vec3_t dir={0,0,1};
BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
origin[2] += 8;
SnapVector( origin );
G_SetOrigin( ent, origin );
ent->s.eType = ET_GENERAL;
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( dir ) );
ent->freeAfterEvent = qtrue;
if (G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius,
ent, ent, ent->splashMethodOfDeath))
{
g_entities[ent->r.ownerNum].client->accuracy_hits++;
}
trap_LinkEntity( ent );
}
}
示例5: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void G_ExplodeMissile( gentity_t *ent ) {
vec3_t dir;
vec3_t origin;
BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
SnapVector( origin );
G_SetOrigin( ent, origin );
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
ent->s.eType = ET_GENERAL;
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( dir ) );
ent->freeAfterEvent = qtrue;
// splash damage
if ( ent->splashDamage ) {
if( G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent
, ent->splashMethodOfDeath ) ) {
g_entities[ent->r.ownerNum].player->accuracy_hits++;
}
}
trap_LinkEntity( ent );
}
示例6: G_ExplodeMissile
void G_ExplodeMissile( gentity_t *ent )
{
vec3_t dir;
vec3_t origin;
const missileAttributes_t *ma = BG_Missile( ent->s.modelindex );
BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
SnapVector( origin );
G_SetOrigin( ent, origin );
// we don't have a valid direction, so just point straight up
dir[ 0 ] = dir[ 1 ] = 0;
dir[ 2 ] = 1;
// turn the missile into an event carrier
ent->s.eType = ET_INVISIBLE;
ent->freeAfterEvent = true;
G_AddEvent( ent, EV_MISSILE_HIT_ENVIRONMENT, DirToByte( dir ) );
// splash damage
if ( ent->splashDamage )
{
G_RadiusDamage( ent->r.currentOrigin, ent->parent,
ent->splashDamage * MissileTimeSplashDmgMod( ent ),
ent->splashRadius, ent, ( ma->doKnockback ? DAMAGE_KNOCKBACK : 0 ),
ent->splashMethodOfDeath );
}
trap_LinkEntity( ent );
}
示例7: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void G_ExplodeMissile( gentity_t *ent )
{
vec3_t dir;
vec3_t origin;
EvaluateTrajectory( &ent->s.pos, level.time, origin );
SnapVector( origin );
G_SetOrigin( ent, origin );
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
if ( ent->owner )//&& ent->owner->s.number == 0 )
{
//Add the event
AddSoundEvent( ent->owner, ent->currentOrigin, 256, AEL_DISCOVERED, qfalse, qtrue );//FIXME: are we on ground or not?
AddSightEvent( ent->owner, ent->currentOrigin, 512, AEL_DISCOVERED, 100 );
}
/* ent->s.eType = ET_GENERAL;
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( dir ) );
ent->freeAfterEvent = qtrue;*/
// splash damage
if ( ent->splashDamage )
{
G_RadiusDamage( ent->currentOrigin, ent->owner, ent->splashDamage, ent->splashRadius, NULL
, ent->splashMethodOfDeath );
}
G_FreeEntity(ent);
//gi.linkentity( ent );
}
示例8: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void G_ExplodeMissile( gentity_t *ent )
{
vec3_t dir;
vec3_t origin;
BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
SnapVector( origin );
G_SetOrigin( ent, origin );
// we don't have a valid direction, so just point straight up
dir[ 0 ] = dir[ 1 ] = 0;
dir[ 2 ] = 1;
ent->s.eType = ET_GENERAL;
if ( ent->s.weapon != WP_LOCKBLOB_LAUNCHER &&
ent->s.weapon != WP_FLAMER )
{
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( dir ) );
}
ent->freeAfterEvent = qtrue;
// splash damage
if ( ent->splashDamage )
{
G_RadiusDamage( ent->r.currentOrigin, ent->parent,
ent->splashDamage * G_DoMissileTimePowerReduce( ent ),
ent->splashRadius, ent, ent->splashMethodOfDeath );
}
trap_LinkEntity( ent );
}
示例9: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void
G_ExplodeMissile(gentity_t *ent)
{
vec3_t dir;
vec3_t origin;
BG_EvaluateTrajectory(&ent->s.pos, level.time, origin);
SnapVector(origin);
G_SetOrigin(ent, origin);
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
ent->s.eType = ET_GENERAL;
//TA: tired... can't be fucked... hack
if (ent->s.weapon != WP_LOCKBLOB_LAUNCHER)
G_AddEvent(ent, EV_MISSILE_MISS, DirToByte(dir));
/* if( ent->s.weapon == WP_BOMB )
{
G_Explodefragnade(ent, origin);
return;
}*/
ent->freeAfterEvent = qtrue;
// splash damage
if (ent->splashDamage)
G_RadiusDamage(ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent, ent->splashMethodOfDeath);
trap_LinkEntity(ent);
}
示例10: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void G_ExplodeMissile(gentity_t * ent)
{
vec3_t dir;
vec3_t origin;
BG_EvaluateTrajectory(&ent->s.pos, level.time, origin);
SnapVector(origin);
G_SetOrigin(ent, origin);
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
// Tr3B: don't change the entity type because it is required by the EV_PROJECTILE_* events
// the ent->freeAfterEvent = qtrue; will do the same effect
//ent->s.eType = ET_GENERAL;
G_AddEvent(ent, EV_PROJECTILE_MISS, DirToByte(dir));
ent->s.modelindex = 0;
ent->freeAfterEvent = qtrue;
// splash damage
if(ent->splashDamage)
{
if(G_RadiusDamage(ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent, ent->splashMethodOfDeath))
{
g_entities[ent->r.ownerNum].client->accuracy_hits++;
}
}
trap_LinkEntity(ent);
}
示例11: target_explosion_explode
//QUAKED target_explosion (1 0 0) (-8 -8 -8) (8 8 8)
//Spawns an explosion temporary entity when used.
//
//"delay" wait this long before going off
//"dmg" how much radius damage should be done, defaults to 0
static void target_explosion_explode( edict_t *self )
{
float save;
int radius;
G_RadiusDamage( self, self->activator, NULL, NULL, MOD_EXPLOSIVE );
if( ( self->projectileInfo.radius * 1/8 ) > 255 )
{
radius = ( self->projectileInfo.radius * 1/16 ) & 0xFF;
if( radius < 1 )
radius = 1;
G_SpawnEvent( EV_EXPLOSION2, radius, self->s.origin );
}
else
{
radius = ( self->projectileInfo.radius * 1/8 ) & 0xFF;
if( radius < 1 )
radius = 1;
G_SpawnEvent( EV_EXPLOSION1, radius, self->s.origin );
}
save = self->delay;
self->delay = 0;
G_UseTargets( self, self->activator );
self->delay = save;
}
示例12: G_ExplodeMissile
/*
================
G_ExplodeMissile
Explode a missile without an impact
================
*/
void G_ExplodeMissile( gentity_t *ent ) {
vec3_t dir;
vec3_t origin;
BG_EvaluateTrajectory( &ent->s.pos, level.time, origin );
SnapVector( origin );
G_SetOrigin( ent, origin );
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
ent->s.eType = ET_GENERAL;
G_AddEvent( ent, EV_MISSILE_MISS, DirToByte( dir ) );
ent->freeAfterEvent = qtrue;
ent->takedamage = qfalse;
// splash damage
if ( ent->splashDamage ) {
//[Asteroids]
//NOTE: vehicle missiles don't have an ent->parent set, so check that here and set it
if ( ent->s.eType == ET_MISSILE//missile
&& (ent->s.eFlags&EF_JETPACK_ACTIVE)//vehicle missile
&& ent->r.ownerNum < MAX_CLIENTS )//valid client owner
{ //set my parent to my owner for purposes of damage credit...
ent->parent = &g_entities[ent->r.ownerNum];
}
//[/Asteroids]
G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent,
ent, ent->splashMethodOfDeath );
}
trap_LinkEntity( ent );
}
示例13: auto_turret_die
//------------------------------------------------------------------------------------------------------------
void auto_turret_die ( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath )
//------------------------------------------------------------------------------------------------------------
{
vec3_t forward = { 0,0, 1 }, pos;
// Turn off the thinking of the base & use it's targets
g_entities[self->r.ownerNum].think = NULL;
g_entities[self->r.ownerNum].use = NULL;
// clear my data
self->die = NULL;
self->takedamage = qfalse;
self->s.health = self->health = 0;
self->s.loopSound = 0;
self->s.shouldtarget = qfalse;
//self->s.owner = MAX_CLIENTS; //not owned by any client
VectorCopy( self->r.currentOrigin, pos );
pos[2] += self->r.maxs[2]*0.5f;
G_PlayEffect( EFFECT_EXPLOSION_TURRET, pos, forward );
G_PlayEffectID( G_EffectIndex( "turret/explode" ), pos, forward );
if ( self->splashDamage > 0 && self->splashRadius > 0 )
{
G_RadiusDamage( self->r.currentOrigin,
attacker,
self->splashDamage,
self->splashRadius,
attacker,
NULL,
MOD_UNKNOWN );
}
self->s.weapon = 0; // crosshair code uses this to mark crosshair red
if ( self->s.modelindex2 )
{
// switch to damage model if we should
self->s.modelindex = self->s.modelindex2;
if (self->target_ent && self->target_ent->s.modelindex2)
{
self->target_ent->s.modelindex = self->target_ent->s.modelindex2;
}
VectorCopy( self->r.currentAngles, self->s.apos.trBase );
VectorClear( self->s.apos.trDelta );
if ( self->target )
{
G_UseTargets( self, attacker );
}
}
else
{
ObjectDie( self, inflictor, attacker, damage, meansOfDeath );
}
}
示例14: W_Touch_Rocket
/*
* W_Touch_Rocket
*/
static void W_Touch_Rocket( edict_t *ent, edict_t *other, cplane_t *plane, int surfFlags ) {
int mod_splash;
vec3_t dir;
int hitType;
if( surfFlags & SURF_NOIMPACT ) {
G_FreeEdict( ent );
return;
}
hitType = G_Projectile_HitStyle( ent, other );
if( hitType == PROJECTILE_TOUCH_NOT ) {
return;
}
if( other->takedamage ) {
int directHitDamage = ent->projectileInfo.maxDamage;
VectorNormalize2( ent->velocity, dir );
if( hitType == PROJECTILE_TOUCH_DIRECTSPLASH ) { // use hybrid direction from splash and projectile
G_SplashFrac4D( ENTNUM( other ), ent->s.origin, ent->projectileInfo.radius, dir, NULL, NULL, ent->timeDelta );
} else {
VectorNormalize2( ent->velocity, dir );
if( hitType == PROJECTILE_TOUCH_DIRECTAIRHIT ) {
directHitDamage += DIRECTAIRTHIT_DAMAGE_BONUS;
} else if( hitType == PROJECTILE_TOUCH_DIRECTHIT ) {
directHitDamage += DIRECTHIT_DAMAGE_BONUS;
}
}
G_Damage( other, ent, ent->r.owner, dir, ent->velocity, ent->s.origin, directHitDamage, ent->projectileInfo.maxKnockback, ent->projectileInfo.stun, 0, ent->style );
}
if( ent->s.effects & EF_STRONG_WEAPON ) {
mod_splash = MOD_ROCKET_SPLASH_S;
} else {
mod_splash = MOD_ROCKET_SPLASH_W;
}
G_RadiusDamage( ent, ent->r.owner, plane, other, mod_splash );
// spawn the explosion
if( !( surfFlags & SURF_NOIMPACT ) ) {
edict_t *event;
vec3_t explosion_origin;
VectorMA( ent->s.origin, -0.02, ent->velocity, explosion_origin );
event = G_SpawnEvent( EV_ROCKET_EXPLOSION, DirToByte( plane ? plane->normal : NULL ), explosion_origin );
event->s.firemode = ( ent->s.effects & EF_STRONG_WEAPON ) ? FIRE_MODE_STRONG : FIRE_MODE_WEAK;
event->s.weapon = ( ( ent->projectileInfo.radius * 1 / 8 ) > 255 ) ? 255 : ( ent->projectileInfo.radius * 1 / 8 );
}
// free the rocket at next frame
G_FreeEdict( ent );
}
示例15: WP_flechette_alt_blow
//----------------------------------------------
void WP_flechette_alt_blow( gentity_t *ent )
//----------------------------------------------
{
EvaluateTrajectory( &ent->s.pos, level.time, ent->currentOrigin ); // Not sure if this is even necessary, but correct origins are cool?
G_RadiusDamage( ent->currentOrigin, ent->owner, ent->splashDamage, ent->splashRadius, NULL, MOD_EXPLOSIVE_SPLASH );
G_PlayEffect( "flechette/alt_blow", ent->currentOrigin );
G_FreeEntity( ent );
}