etqw-sdk/base/script/vehicles/weapons/gpmg_twin.script
2008-05-29 00:00:00 +00:00

95 lines
2.2 KiB
Text

object vehicle_weapon_gpmg_twin : vehicle_weapon_base {
void preinit();
void init();
void Fire();
string muzzleFlashFX;
string muzzleTracerFX;
string muzzleSound;
entity vehicle;
float projectileIndex;
float fireRate;
float spread;
vector velocity;
float muzzleJoint1;
float muzzleJoint2;
float currentWeapon;
boolean fireAnim;
float tracerCounter;
float tracerInterval;
};
void vehicle_weapon_gpmg_twin::preinit() {
muzzleFlashFX = getKey( "muzzle_flash" );
muzzleTracerFX = getKey( "muzzle_tracer" );
muzzleSound = getKey( "muzzle_sound" );
projectileIndex = GetEntityDef( getKey( "def_projectile" ) );
vehicle = getVehicle();
muzzleJoint1 = vehicle.getJointHandle( getKey( "muzzle_left" ) );
muzzleJoint2 = vehicle.getJointHandle( getKey( "muzzle_right" ) );
fireAnim = getFloatKey( "fire_anim" ) != 0;
fireRate = getFloatKey( "fire_rate" );
spread = getFloatKey( "spread" );
velocity = getVectorKey( "velocity" );
tracerCounter = 0;
tracerInterval = 1;// sys.getEntityDefIntKey( projectileIndex, "tracer_interval" );
}
void vehicle_weapon_gpmg_twin::init() {
}
void vehicle_weapon_gpmg_twin::Fire() {
currentWeapon++;
if ( currentWeapon == 2 ) {
currentWeapon = 0;
}
RemoveCharge();
float jointHandle;
if ( currentWeapon == 0 ) {
jointHandle = muzzleJoint1;
if( fireAnim ) {
vehicle.playAnim( ANIMCHANNEL_HEAD, "fire_left" );
}
} else {
jointHandle = muzzleJoint2;
if( fireAnim ) {
vehicle.playAnim( ANIMCHANNEL_HEAD, "fire_right" );
}
}
float forceTracer = TRACER_CHANCE;
if ( tracerInterval > 0 ) {
if ( tracerCounter % tracerInterval == 0 ) {
forceTracer = TRACER_FORCE;
}
}
vehicle.launchBullet( vehicle, vehicle, projectileIndex, spread, vehicle.getJointPos( jointHandle ), vehicle.jointToWorldSpace( jointHandle, velocity ), forceTracer, true );
tracerCounter++;
vehicle.playJointEffect( muzzleFlashFX, jointHandle, 0 );
vehicle.playJointEffect( muzzleTracerFX, jointHandle, 0 );
vehicle.playJointEffect( muzzleSound, jointHandle, 0 );
AddReFireDelay( fireRate );
GoToIdle();
}