//--------------------------------------------------------- void WP_PlaceLaserTrap( gentity_t *ent, qboolean alt_fire ) //--------------------------------------------------------- { vec3_t start; gentity_t *laserTrap; // limit to 10 placed at any one time WP_RemoveOldTraps( ent ); //FIXME: surface must be within 64 laserTrap = G_Spawn(); if ( laserTrap ) { // now make the new one VectorCopy( wpMuzzle, start ); WP_TraceSetStart( ent, start, vec3_origin, vec3_origin );//make sure our start point isn't on the other side of a wall CreateLaserTrap( laserTrap, start, ent ); // set player-created-specific fields laserTrap->setTime = level.time;//remember when we placed it laserTrap->s.eFlags |= EF_MISSILE_STICK; laserTrap->s.pos.trType = TR_GRAVITY; VectorScale( wpFwd, LT_VELOCITY, laserTrap->s.pos.trDelta ); if ( alt_fire ) { laserTrap->count = PROXIMITY_STYLE; laserTrap->delay = level.time + 40000; // will auto-blow in 40 seconds. laserTrap->methodOfDeath = MOD_LASERTRIP_ALT; laserTrap->splashMethodOfDeath = MOD_LASERTRIP_ALT;//? SPLASH; } else { laserTrap->count = TRIPWIRE_STYLE; } } }
void WP_PlaceLaserTrap( gentity_t *ent, qboolean alt_fire ) { gentity_t *laserTrap; vec3_t dir, start; int foundLaserTraps[MAX_GENTITIES]; foundLaserTraps[0] = ENTITYNUM_NONE; VectorCopy( forward, dir ); VectorCopy( muzzle, start ); laserTrap = G_Spawn(); //now make the new one CreateLaserTrap( laserTrap, start, ent ); //set player-created-specific fields laserTrap->setTime = level.time;//remember when we placed it if (!alt_fire) {//tripwire laserTrap->count = 1; } //move it laserTrap->s.pos.trType = TR_GRAVITY; if (alt_fire) { VectorScale( dir, 512, laserTrap->s.pos.trDelta ); } else { VectorScale( dir, 256, laserTrap->s.pos.trDelta ); } trap_LinkEntity(laserTrap); }