54 lines
1.3 KiB
Plaintext
54 lines
1.3 KiB
Plaintext
|
|
object vehicle_weapon_law : vehicle_weapon_base {
|
|
void preinit();
|
|
void Fire();
|
|
|
|
string muzzleFlashFX;
|
|
|
|
float jointHandle;
|
|
float fireRate;
|
|
float spread;
|
|
float projectileIndex;
|
|
float feedback;
|
|
float currentWeaponIndex;
|
|
|
|
vector velocity;
|
|
|
|
entity vehicle;
|
|
};
|
|
|
|
void vehicle_weapon_law::preinit() {
|
|
projectileIndex = GetEntityDef( getKey( "def_projectile" ) );
|
|
|
|
vehicle = getVehicle();
|
|
|
|
muzzleFlashFX = getKey( "muzzle_flash" );
|
|
|
|
fireRate = getFloatKey( "fire_rate" );
|
|
spread = getFloatKey( "spread" );
|
|
velocity = getVectorKey( "velocity" );
|
|
feedback = getFloatKey( "feedback" );
|
|
}
|
|
|
|
void vehicle_weapon_law::Fire() {
|
|
RemoveCharge();
|
|
|
|
jointHandle = vehicle.getJointHandle( getKey( "missile_pos" + currentWeaponIndex ) );
|
|
vector origin = vehicle.getJointPos( jointHandle );
|
|
|
|
vehicle.launchMissileSimple( user, vehicle, user.getEnemy(), projectileIndex, -1, spread, origin, vehicle.jointToWorldSpace( jointHandle, velocity ) );
|
|
vehicle.applyImpulse( origin, -feedback * vehicle.getJointAxis( jointHandle, 0 ) );
|
|
|
|
vehicle.playJointEffect( muzzleFlashFX, jointHandle, 0 );
|
|
|
|
currentWeaponIndex++;
|
|
|
|
if( currentWeaponIndex == getFloatKey( "num_missiles" ) ) {
|
|
currentWeaponIndex = 0;
|
|
}
|
|
|
|
AddReFireDelay( fireRate );
|
|
|
|
GoToIdle();
|
|
}
|