//----------------------------------------
// PaintballGun
//----------------------------------------
datablock EffectProfile(PaintballHitEffect)
{
   effectname = "armor/general_water_smallsplash";
   minDistance = 5;
   maxDistance = 10;
};

datablock AudioProfile(PaintballHitSound)
{
   filename    = "fx/armor/general_water_smallsplash.wav";
   description = AudioExplosion3d;
   preload = true;
   effect = PaintballHitEffect;
};

datablock ParticleData( PaintballSplash1Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "1.0 0.0 0.0 1.0";
   colors[1]     = "1.0 0.0 0.0 0.5";
   colors[2]     = "1.0 0.0 0.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash1Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash1Particle";
};

datablock ExplosionData(PaintballExplosion1)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash1Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock ParticleData( PaintballSplash2Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "0.0 1.0 0.0 1.0";
   colors[1]     = "0.0 1.0 0.0 0.5";
   colors[2]     = "0.0 1.0 0.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash2Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash2Particle";
};

datablock ExplosionData(PaintballExplosion2)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash2Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock ParticleData( PaintballSplash3Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "0.0 0.0 1.0 1.0";
   colors[1]     = "0.0 0.0 1.0 0.5";
   colors[2]     = "0.0 0.0 1.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash3Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash3Particle";
};

datablock ExplosionData(PaintballExplosion3)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash3Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock ParticleData( PaintballSplash4Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "1.0 1.0 0.0 1.0";
   colors[1]     = "1.0 1.0 0.0 0.5";
   colors[2]     = "1.0 1.0 0.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash4Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash4Particle";
};

datablock ExplosionData(PaintballExplosion4)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash4Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock ParticleData( PaintballSplash5Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "0.0 1.0 1.0 1.0";
   colors[1]     = "0.0 1.0 1.0 0.5";
   colors[2]     = "0.0 1.0 1.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash5Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash5Particle";
};

datablock ExplosionData(PaintballExplosion5)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash5Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock ParticleData( PaintballSplash6Particle )
{
   dragCoefficient      = 1;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = -0.0;
   lifetimeMS           = 600;
   lifetimeVarianceMS   = 0;
   textureName          = "special/droplet";
   colors[0]     = "1.0 0.0 1.0 1.0";
   colors[1]     = "1.0 0.0 1.0 0.5";
   colors[2]     = "1.0 0.0 1.0 0.0";
   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;
   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData( PaintballSplash6Emitter )
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 3;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 60;
   thetaMax         = 80;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvances = false;
   orientParticles  = true;
   lifetimeMS       = 100;
   particles = "PaintballSplash6Particle";
};

datablock ExplosionData(PaintballExplosion6)
{
	soundProfile  = PaintballHitSound;
    emitter[0] = PaintballSplash6Emitter;
	particleDensity = 100;
	particleRadius = 2.50;
	faceViewer      = false;
};

datablock LinearFlareProjectileData(PaintballShot1)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion1";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "1 0 0";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock LinearFlareProjectileData(PaintballShot2)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion2";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "0 1 0";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock LinearFlareProjectileData(PaintballShot3)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion3";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "0 0 1";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock LinearFlareProjectileData(PaintballShot4)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion4";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "1 1 0";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock LinearFlareProjectileData(PaintballShot5)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion5";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "0 1 1";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock LinearFlareProjectileData(PaintballShot6)
{
   emitterDelay        = -1;
   directDamage        = 0;
   directDamageType    = $DamageType::Default;
   kickBackStrength    = 0.0;
   bubbleEmitTime      = 1.0;

   sound = NerfBoltProjectileSound;
   velInheritFactor    = 0.5;

   explosion           = "PaintballExplosion6";
   splash              = PlasmaSplash;

   grenadeElasticity = 0.998;
   grenadeFriction   = 0.0;
   armingDelayMS     = 500;

   muzzleVelocity    = 100.0;

   drag = 0.05;

   gravityMod        = 0.0;

   dryVelocity       = 100.0;
   wetVelocity       = 80.0;

   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = false;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = 3000;

   lifetimeMS     = 3000;

   scale             = "0.2 0.2 0.2";
   numFlares         = 0;
   flareColor        = "1 0 1";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";
};

datablock ItemData(PaintballGun)
{
   className = Weapon;
   catagory = "Spawn Items";
   shapeFile = "weapon_plasma.dts";
   image = PaintballGunImage;
   mass = 1;
   elasticity = 0.2;
   friction = 0.6;
   pickupRadius = 2;
   pickUpName = "a paintball gun";

   computeCRC = true;
   emap = true;
};

datablock ShapeBaseImageData(PaintballGunImage)
{
   className = WeaponImage;
   shapeFile = "weapon_plasma.dts";
   item = PaintballGun;
   offset = "0 0 0";
   emap = true;

   //projectile = PaintballShot;
   //projectileType = LinearFlareProjectile;
   
   usesEnergy = true;
   fireEnergy = 0;
   minEnergy = 0;

   stateName[0] = "Activate";
   stateTransitionOnTimeout[0] = "ActivateReady";
   stateTimeoutValue[0] = 0.5;
   stateSequence[0] = "Activate";
   stateSound[0] = NukeSwitchSound;

   stateName[1] = "ActivateReady";
   stateTransitionOnLoaded[1] = "Ready";
   stateTransitionOnNoAmmo[1] = "NoAmmo";

   stateName[2] = "Ready";
   stateTransitionOnNoAmmo[2] = "NoAmmo";
   stateTransitionOnTriggerDown[2] = "Fire";
   //stateSound[2] = MortarIdleSound;

   stateName[3] = "Fire";
   stateSequence[3] = "Recoil";
   stateTransitionOnTimeout[3] = "Reload";
   stateTimeoutValue[3] = 0.3;
   stateFire[3] = true;
   stateRecoil[3] = LightRecoil;
   stateAllowImageChange[3] = false;
   stateScript[3] = "onFire";
   stateSound[3] = NukeFireSound;

   stateName[4] = "Reload";
   stateTransitionOnNoAmmo[4] = "NoAmmo";
   stateTransitionOnTimeout[4] = "Ready";
   stateTimeoutValue[4] = 0.3;
   stateAllowImageChange[4] = false;
   stateSequence[4] = "Reload";
   stateSound[4] = NukeReloadSound;

   stateName[5] = "NoAmmo";
   stateTransitionOnAmmo[5] = "Reload";
   stateSequence[5] = "NoAmmo";
   stateTransitionOnTriggerDown[5] = "DryFire";

   stateName[6]       = "DryFire";
   stateSound[6]      = MortarDryFireSound;
   stateTimeoutValue[6]        = 0.3;
   stateTransitionOnTimeout[6] = "NoAmmo";
};

function PaintballGunImage::onFire(%data,%obj,%slot) {
if (%obj.paintballGunMode == 0) {
%p = new LinearFlareProjectile(){
dataBlock        = PaintballShot @ "" @ getRandom(1,6);
initialDirection = %obj.getMuzzleVector(%slot);
initialPosition  = %obj.getMuzzlePoint(%slot);
sourceObject     = %obj;
sourceSlot       = %slot;
vehicleObject    = %vehicle;
};
MissionCleanup.add(%p);
}
}

//function PaintballGunImage::onMount(%this,%obj,%slot) {
//%obj.usingPaintballGun = true;
//if (!%obj.paintballGunMode)
//     %obj.paintballGunMode = 0;
//if (!%obj.paintballGunMode2)
//     %obj.paintballGunMode2 = 0;
//displayPaintballStatus(%obj);
//WeaponImage::onMount(%this,%obj,%slot);
//}
//
//function PaintballGunImage::onUnmount(%this,%obj,%slot) {
//%obj.usingPaintballGun = false;
//WeaponImage::onUnmount(%this,%obj,%slot);
//}
//
//function displayPaintballStatus(%obj) {
//    if (%obj.paintballGunMode == 0)
//        bottomPrint(%obj.client,"Paintball Color: Random",2,1);
//    else if (%obj.paintballGunMode == 1)
//        bottomPrint(%obj.client,"Paintball Color: Red",2,1);
//    else if (%obj.paintballGunMode == 2)
//        bottomPrint(%obj.client,"Paintball Color: Green",2,1);
//    else if (%obj.paintballGunMode == 3)
//        bottomPrint(%obj.client,"Paintball Color: Blue",2,1);
//    else if (%obj.paintballGunMode == 4)
//        bottomPrint(%obj.client,"Paintball Color: Yellow",2,1);
//    else if (%obj.paintballGunMode == 5)
//        bottomPrint(%obj.client,"Paintball Color: Cyan",2,1);
//    else if (%obj.paintballGunMode == 6)
//        bottomPrint(%obj.client,"Paintball Color: Purple",2,1);
//	else
//		bottomPrint(%obj.client,"Paintball Gun Modes",2,1);
//}
