void trigger_push_touch (gentity_t *self, gentity_t *other, trace_t *trace ) { if ( !other->client ) { return; } BG_TouchJumpPad( &other->client->ps, &self->s ); }
/* ======================================================================================================================================= Touch_PushTrigger ======================================================================================================================================= */ void Touch_PushTrigger(gentity_t *self, gentity_t *other, trace_t *trace) { playerState_t *ps; ps = G_GetEntityPlayerState(other); if (ps) { BG_TouchJumpPad(ps, &self->s); } }
void trigger_push_touch(gentity_t *self, gentity_t *other, trace_t *trace) { // Nico, silent GCC (void)trace; // Nico, jumppads support if (!(g_enableMapEntities.integer & MAP_JUMPPADS) || !other->client) { return; } BG_TouchJumpPad(&other->client->ps, &self->s); }
void trigger_push_touch(gentity_t * self, gentity_t * other, trace_t * trace) { if(!other->client) { return; } #ifdef LUA G_RunLuaFunction(self->luaTouch, "ee>", self, other); #endif BG_TouchJumpPad(&other->client->ps, &self->s); }
void trigger_push_touch(gentity_t * self, gentity_t * other, trace_t * trace) { if(!other->client) { return; } #ifdef G_LUA // Lua API callbacks if(self->luaTrigger) { G_LuaHook_EntityTrigger(self->luaTrigger, self->s.number, other->s.number); } #endif BG_TouchJumpPad(&other->client->ps, &self->s); }
void trigger_push_touch (gentity_t *self, gentity_t *other, trace_t *trace ) { if ( self->flags & FL_INACTIVE ) {//set by target_deactivate return; } if ( !(self->spawnflags&PUSH_LINEAR) ) {//normal throw if ( !other->client ) { return; } BG_TouchJumpPad( &other->client->ps, &self->s ); return; } //linear if( level.time < self->painDebounceTime + self->wait ) // normal 'wait' check { if( self->spawnflags & PUSH_MULTIPLE ) // MULTIPLE - allow multiple entities to touch this trigger in one frame { if ( self->painDebounceTime && level.time > self->painDebounceTime ) // if we haven't reached the next frame continue to let ents touch the trigger { return; } } else // only allowing one ent per frame to touch trigger { return; } } /* //??? // if the player has already activated this trigger this frame if( other && !other->s.number && self->aimDebounceTime == level.time ) { return; } */ /* if( self->spawnflags & PUSH_CONVEYOR ) { // only push player if he's on the ground if( other->s.groundEntityNum == ENTITYNUM_NONE ) { return; } } */ /* if ( self->spawnflags & 1 ) {//PLAYERONLY if ( other->s.number >= MAX_CLIENTS ) { return; } } else { if ( self->spawnflags & 8 ) {//NPCONLY if ( other->NPC == NULL ) { return; } } } */ if ( !other->client ) { if ( other->s.pos.trType != TR_STATIONARY && other->s.pos.trType != TR_LINEAR_STOP && other->s.pos.trType != TR_NONLINEAR_STOP && VectorLengthSquared( other->s.pos.trDelta ) ) {//already moving VectorCopy( other->r.currentOrigin, other->s.pos.trBase ); VectorCopy( self->s.origin2, other->s.pos.trDelta ); other->s.pos.trTime = level.time; } return; } if ( other->client->ps.pm_type != PM_NORMAL && other->client->ps.pm_type != PM_DEAD && other->client->ps.pm_type != PM_FREEZE ) { return; } if ( (self->spawnflags&PUSH_RELATIVE) ) {//relative, dir to it * speed vec3_t dir; VectorSubtract( self->s.origin2, other->r.currentOrigin, dir ); if ( self->speed ) { VectorNormalize( dir ); VectorScale( dir, self->speed, dir ); } VectorCopy( dir, other->client->ps.velocity ); } else if ( (self->spawnflags&PUSH_LINEAR) ) {//linear dir * speed VectorScale( self->s.origin2, self->speed, other->client->ps.velocity ); } else { VectorCopy( self->s.origin2, other->client->ps.velocity ); } //so we don't take damage unless we land lower than we start here... /* other->client->ps.forceJumpZStart = 0; other->client->ps.pm_flags |= PMF_TRIGGER_PUSHED;//pushed by a trigger other->client->ps.jumpZStart = other->client->ps.origin[2]; */ if ( self->wait == -1 ) { self->touch = NULL; } else if ( self->wait > 0 ) { self->painDebounceTime = level.time; } /* if( other && !other->s.number ) { // mark that the player has activated this trigger this frame self->aimDebounceTime =level.time; } */ }
/* ========================= CG_TouchTriggerPrediction Predict push triggers and items ========================= */ static void CG_TouchTriggerPrediction( void ) { int i; trace_t trace; entityState_t *ent; clipHandle_t cmodel; centity_t *cent; qboolean spectator; // dead players don't activate triggers if ( cg.cur_lc->predictedPlayerState.stats[STAT_HEALTH] <= 0 ) { return; } spectator = ( cg.cur_lc->predictedPlayerState.pm_type == PM_SPECTATOR ); if ( cg.cur_lc->predictedPlayerState.pm_type != PM_NORMAL && !spectator ) { return; } for ( i = 0 ; i < cg_numTriggerEntities ; i++ ) { cent = cg_triggerEntities[ i ]; ent = ¢->currentState; if ( ent->eType == ET_ITEM && !spectator ) { CG_TouchItem( cent ); continue; } if ( ent->collisionType != CT_SUBMODEL ) { continue; } cmodel = trap_CM_InlineModel( ent->modelindex ); if ( !cmodel ) { continue; } if ( cg.cur_lc->predictedPlayerState.collisionType == CT_CAPSULE ) { trap_CM_CapsuleTrace( &trace, cg.cur_lc->predictedPlayerState.origin, cg.cur_lc->predictedPlayerState.origin, cg.cur_lc->predictedPlayerState.mins, cg.cur_lc->predictedPlayerState.maxs, cmodel, -1 ); } else { trap_CM_BoxTrace( &trace, cg.cur_lc->predictedPlayerState.origin, cg.cur_lc->predictedPlayerState.origin, cg.cur_lc->predictedPlayerState.mins, cg.cur_lc->predictedPlayerState.maxs, cmodel, -1 ); } if ( !trace.startsolid ) { continue; } if ( ent->eType == ET_TELEPORT_TRIGGER ) { cg.cur_lc->hyperspace = qtrue; } else if ( ent->eType == ET_PUSH_TRIGGER ) { BG_TouchJumpPad( &cg.cur_lc->predictedPlayerState, ent ); } } // if we didn't touch a jump pad this pmove frame if ( cg.cur_lc->predictedPlayerState.jumppad_frame != cg.cur_lc->predictedPlayerState.pmove_framecount ) { cg.cur_lc->predictedPlayerState.jumppad_frame = 0; cg.cur_lc->predictedPlayerState.jumppad_ent = 0; } }