static void Svcmd_ExitView_f( void ) { extern cvar_t *g_skippingcin; static int exitViewDebounce = 0; if ( exitViewDebounce > level.time ) { return; } exitViewDebounce = level.time + 500; if ( in_camera ) {//see if we need to exit an in-game cinematic if ( g_skippingcin->integer ) // already doing cinematic skip? {// yes... so stop skipping... G_StopCinematicSkip(); } else {// no... so start skipping... G_StartCinematicSkip(); } } else if ( !G_ClearViewEntity( player ) ) {//didn't exit control of a droid or turret //okay, now try exiting emplaced guns or AT-ST's if ( player->s.eFlags & EF_LOCKED_TO_WEAPON ) {//get out of emplaced gun ExitEmplacedWeapon( player ); } else if ( player->client && player->client->NPC_class == CLASS_ATST ) {//a player trying to get out of his ATST GEntity_UseFunc( player->activator, player, player ); } } }
void G_UseTargets2 (gentity_t *ent, gentity_t *activator, const char *string) { gentity_t *t; // // fire targets // if (string) { t = NULL; while ( (t = G_Find (t, FOFS(targetname), (char *) string)) != NULL ) { if (t == ent) { // gi.Printf ("WARNING: Entity used itself.\n"); } if (t->e_UseFunc != useF_NULL) // check can be omitted { GEntity_UseFunc(t, ent, activator); } if (!ent->inuse) { gi.Printf("entity was removed while using targets\n"); return; } } } }
void func_usable_pain(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, const vec3_t point, int damage, int mod,int hitLoc) { if ( self->paintarget ) { G_UseTargets2 (self, self->activator, self->paintarget); } else { GEntity_UseFunc( self, attacker, attacker ); } }
/*QUAKED target_relay (.5 .5 .5) (-8 -8 -8) (8 8 8) RED_ONLY BLUE_ONLY RANDOM x x x x INACTIVE This doesn't perform any actions except fire its targets. The activator can be forced to be from a certain team. if RANDOM is checked, only one of the targets will be fired, not all of them INACTIVE Can't be used until activated "delay" - Will actually fire this many seconds after being used "wait" - Cannot be fired again until this many seconds after the last time it was used */ void target_relay_use_go (gentity_t *self ) { G_ActivateBehavior( self, BSET_USE ); if ( self->spawnflags & 4 ) { gentity_t *ent; ent = G_PickTarget( self->target ); if ( ent && (ent->e_UseFunc != useF_NULL) ) { // e_UseFunc check can be omitted GEntity_UseFunc( ent, self, self->activator ); } return; } G_UseTargets( self, self->activator ); }
void func_usable_die(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod,int dFlags,int hitLoc) { self->takedamage = qfalse; GEntity_UseFunc( self, inflictor, attacker ); }
void TryUse( gentity_t *ent ) { gentity_t *target; trace_t trace; vec3_t src, dest, vf; if ( ent->s.number == 0 && ent->client->NPC_class == CLASS_ATST ) {//a player trying to get out of his ATST GEntity_UseFunc( ent->activator, ent, ent ); return; } //FIXME: this does not match where the new accurate crosshair aims... //cg.refdef.vieworg, basically VectorCopy( ent->client->renderInfo.eyePoint, src ); AngleVectors( ent->client->ps.viewangles, vf, NULL, NULL );//ent->client->renderInfo.eyeAngles was cg.refdef.viewangles, basically //extend to find end of use trace VectorMA( src, USE_DISTANCE, vf, dest ); //Trace ahead to find a valid target gi.trace( &trace, src, vec3_origin, vec3_origin, dest, ent->s.number, MASK_OPAQUE|CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_ITEM|CONTENTS_CORPSE, G2_NOCOLLIDE, 0 ); if ( trace.fraction == 1.0f || trace.entityNum < 1 ) { //TODO: Play a failure sound /* if ( ent->s.number == 0 ) {//if nothing else, try the force telepathy power ForceTelepathy( ent ); } */ return; } target = &g_entities[trace.entityNum]; //Check for a use command if ( ValidUseTarget( target ) ) { NPC_SetAnim( ent, SETANIM_TORSO, BOTH_BUTTON_HOLD, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); /* if ( !VectorLengthSquared( ent->client->ps.velocity ) && !PM_CrouchAnim( ent->client->ps.legsAnim ) ) { NPC_SetAnim( ent, SETANIM_LEGS, BOTH_BUTTON_HOLD, SETANIM_FLAG_NORMAL|SETANIM_FLAG_HOLD ); } */ //ent->client->ps.weaponTime = ent->client->ps.torsoAnimTimer; GEntity_UseFunc( target, ent, ent ); return; } else if ( target->client && target->client->ps.pm_type < PM_DEAD && target->NPC!=NULL && target->client->playerTeam && (target->client->playerTeam == ent->client->playerTeam || target->client->playerTeam == TEAM_NEUTRAL) && !(target->NPC->scriptFlags&SCF_NO_RESPONSE) ) { NPC_UseResponse ( target, ent, qfalse ); return; } /* if ( ent->s.number == 0 ) {//if nothing else, try the force telepathy power ForceTelepathy( ent ); } */ }
void target_random_use(gentity_t *self, gentity_t *other, gentity_t *activator) { int t_count = 0, pick; gentity_t *t = NULL; //gi.Printf("target_random %s used by %s (entnum %d)\n", self->targetname, activator->targetname, activator->s.number ); G_ActivateBehavior(self,BSET_USE); if(self->spawnflags & 1) { self->e_UseFunc = useF_NULL; } while ( (t = G_Find (t, FOFS(targetname), self->target)) != NULL ) { if (t != self) { t_count++; } } if(!t_count) { return; } if(t_count == 1) { G_UseTargets (self, activator); return; } //FIXME: need a seed pick = Q_irand(1, t_count); t_count = 0; while ( (t = G_Find (t, FOFS(targetname), self->target)) != NULL ) { if (t != self) { t_count++; } else { continue; } if (t == self) { // gi.Printf ("WARNING: Entity used itself.\n"); } else if(t_count == pick) { if (t->e_UseFunc != useF_NULL) // check can be omitted { GEntity_UseFunc(t, self, activator); return; } } if (!self->inuse) { gi.Printf("entity was removed while using targets\n"); return; } } }
void func_usable_pain(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, vec3_t point, int damage, int mod,int hitLoc) { GEntity_UseFunc( self, attacker, attacker ); }