//--------------------------------------
// flamethrower
//--------------------------------------

//color tent for EVERYTHING its red really red 
//1 r
//0.18 g
//0.03 b

//--------------------------------------
// Trail
//--------------------------------------

datablock ParticleData(flameParticle)
{
   dragCoeffiecient     = 0.0;
   gravityCoefficient   = -0.1;
   inheritedVelFactor   = 0.1;

   lifetimeMS           = 500;
   lifetimeVarianceMS   = 50;

   textureName          = "particleTest";

   spinRandomMin = -10.0;
   spinRandomMax = 10.0;

   colors[0]     = "1 0.18 0.03 0.4";
   colors[1]     = "1 0.18 0.03 0.3";
   colors[2]     = "1 0.18 0.03 0.0";
   sizes[0]      = 2.0;
   sizes[1]      = 1.0;
   sizes[2]      = 0.8;
   times[0]      = 0.0;
   times[1]      = 0.6;
   times[2]      = 1.0;
};

datablock ParticleEmitterData(flameEmitter)
{
   ejectionPeriodMS = 3;
   periodVarianceMS = 0;

   ejectionOffset = 0.2;
   ejectionVelocity = 10.0;
   velocityVariance = 0.0;

   thetaMin         = 0.0;
   thetaMax         = 10.0;  

   particles = "flameParticle";
};

//--------------------------------------------------------------------------
// Explosion
//--------------------------------------
datablock ParticleData(flameExplosionParticle)
{
   dragCoefficient      = 2;
   gravityCoefficient   = 0.2;
   inheritedVelFactor   = 0.2;
   constantAcceleration = 0.0;
   lifetimeMS           = 500;
   lifetimeVarianceMS   = 0;
   textureName          = "particleTest";
   colors[0]     = "1 0.18 0.03 0.6";
   colors[1]     = "1 0.18 0.03 0.0";
   sizes[0]      = 2;
   sizes[1]      = 2.5;
};

datablock ParticleEmitterData(flameExplosionEmitter)
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionOffset = 2.0;
   ejectionVelocity = 4.0;
   velocityVariance = 0.0;
   thetaMin         = 60.0;
   thetaMax         = 90.0;
   lifetimeMS       = 250;

   particles = "flameExplosionParticle";
};

datablock ExplosionData(flameBoltExplosion)
{
   particleEmitter = flameExplosionEmitter;
   particleDensity = 150;
   particleRadius = 1.25;
   faceViewer = true;
};

//--------------------------------------------------------------------------
// Idle Flame
//--------------------------------------

datablock ParticleData(FlamerIdleFlame) 
{ 
   dragCoeffiecient     = 0.0; 
   gravityCoefficient   = -0.3;   // rises slowly 
   inheritedVelFactor   = 0.5; 
   constantAcceleration = 0.0; 

   lifetimeMS           = 500; 
   lifetimeVarianceMS   = 0; 

   textureName          = "particleTest"; 

   spinRandomMin = -30.0; 
   spinRandomMax =  30.0;  

   colors[0]     = "1 0.18 0.03 0.3"; 
   colors[1]     = "1 0.18 0.03 0.2"; 
   colors[2]     = "1 0.18 0.03 0.0"; 
   sizes[0]      = 0.2; 
   sizes[1]      = 0.4; 
   sizes[2]      = 0.5; 
   times[0]      = 0.0; 
   times[1]      = 0.5; 
   times[2]      = 1.0; 
}; 

datablock ParticleEmitterData(FlamerIdleFlameEmitter) 
{ 
   ejectionPeriodMS = 3; 
   periodVarianceMS = 1; 

   ejectionVelocity = 0.0; 
   velocityVariance = 0.0; 

   thetaMin         = 0.0; 
   thetaMax         = 45.0; 

   phiReferenceVel  = 0; 
   phiVariance      = 360; 
   overrideAdvances = false; 

   particles = "FlamerIdleFlame"; 
};

//--------------------------------------------------------------------------
// Projectiles
//--------------------------------------
datablock LinearFlareProjectileData(FlameboltMain)
{
   projectileShapeName = "turret_muzzlepoint.dts";
   scale               = "1.0 1.0 1.0";
   faceViewer          = true;
   directDamage        = 0.05;
   hasDamageRadius     = true;
   indirectDamage      = 0.1;
   damageRadius        = 4.0;
   kickBackStrength    = 0.0;
   radiusDamageType    = $DamageType::Plasma;

   explosion           = "flameBoltExplosion";
   splash              = PlasmaSplash;

   baseEmitter        = FlameEmitter;

   dryVelocity       = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
   wetVelocity       = -1;
   velInheritFactor  = 0.3;
   fizzleTimeMS      = 250;
   lifetimeMS        = 1000;
   explodeOnDeath    = false;
   reflectOnWaterImpactAngle = 0.0;
   explodeOnWaterImpact      = true;
   deflectionOnWaterImpact   = 0.0;
   fizzleUnderwaterMS        = -1;

   //activateDelayMS = 100;
   activateDelayMS = -1;

   size[0]           = 0.2;
   size[1]           = 0.5;
   size[2]           = 0.1;


   numFlares         = 35;
   flareColor        = "1 0.18 0.03";
   flareModTexture   = "flaremod";
   flareBaseTexture  = "flarebase";

	sound        = PlasmaProjectileSound;
   fireSound    = PlasmaFireSound;
   wetFireSound = PlasmaFireWetSound;
   
   hasLight    = true;
   lightRadius = 10.0;
   lightColor  = "0.94 0.03 0.12";
};

//--------------------------------------------------------------------------
// Ammo
//--------------------------------------

datablock ItemData(flamerAmmo)
{
   className = Ammo;
   catagory = "Ammo";
   shapeFile = "ammo_plasma.dts";
   mass = 1;
   elasticity = 0.2;
   friction = 0.6;
   pickupRadius = 2;
	pickUpName = "some flame thrower fuel";
};

//--------------------------------------------------------------------------
// Weapon
//--------------------------------------
datablock ItemData(flamer)
{
   className = Weapon;
   catagory = "Spawn Items";
   shapeFile = "weapon_plasma.dts";
   image = flamerImage;
   mass = 1.0;
   elasticity = 0.2;
   friction = 0.6;
   pickupRadius = 2;
	pickUpName = "a flame thrower";
};

datablock ShapeBaseImageData(flamerImage)
{
   className = WeaponImage;
   shapeFile = "weapon_grenade_launcher.dts";
   mass = 10;
   item = flamer;
   ammo = flamerAmmo;
   offset = "0 0 0"; // L/R - F/B - T/B
   rotation = "0 1 0 180"; // L/R - F/B - T/B

   projectileSpread = 7.0 / 1000.0;

   projectile = flameBoltmain;
   projectileType = LinearFlareProjectile;

   stateName[0] = "Activate";
   stateTransitionOnTimeout[0] = "ActivateReady";
   stateTimeoutValue[0] = 0.5;
   stateSequence[0] = "Activate";
   stateSound[0] = GenericSwitchSound;

   stateName[1] = "ActivateReady";
   stateTransitionOnLoaded[1] = "Ready";
   stateTransitionOnNoAmmo[1] = "NoAmmo";

   stateName[2] = "Ready";
   stateEmitter[2] = "FlamerIdleFlameEmitter";
   stateEmitterNode[2] = "muzzlepoint1";
   stateEmitterTime[2] = 10000; 
   stateTransitionOnNoAmmo[2] = "NoAmmo";
   stateTransitionOnTriggerDown[2] = "CheckWet";

   stateName[3] = "Fire";
   stateTransitionOnTimeout[3] = "Reload";
   stateTimeoutValue[3] = 0.05;
   stateFire[3] = true;
   stateAllowImageChange[3] = false;
   stateScript[3] = "onFire";
   stateEmitterTime[3] = 0.05;

   stateName[4] = "Reload";
   stateTransitionOnNoAmmo[4] = "NoAmmo";
   stateTransitionOnTimeout[4] = "Ready";
   stateTimeoutValue[4] = 0.05;
   stateAllowImageChange[4] = false;
   stateSequence[4] = "Reload";
   stateSound[4] = MergeFireSound;

   stateName[5] = "NoAmmo";
   stateTransitionOnAmmo[5] = "Reload";
   stateSequence[5] = "NoAmmo";
   stateTransitionOnTriggerDown[5] = "DryFire";

   stateName[6]       = "DryFire";
   stateSound[6]      = MortarDryFireSound;
   stateTimeoutValue[6]        = 1.0;
   stateTransitionOnTimeout[6] = "NoAmmo";
   
   stateName[7]       = "WetFire";
   stateTimeoutValue[7]        = 1.0;
   stateTransitionOnTimeout[7] = "Ready";
   
   stateName[8]               = "CheckWet";
   stateTransitionOnWet[8]    = "WetFire";
   stateTransitionOnNotWet[8] = "Fire"; 
};

function flamerImage::onMount(%this,%obj,%slot) 
{ 
	Parent::onMount(%this,%obj,%slot); 
	CommandToClient(%obj.client, 'BottomPrint', "You must have a flamer ammo pack to get flamer ammo.", 3, 2 );
}

function burnloop(%obj){
   if(!isobject(%obj))
	return;
   if(%obj.firecount >= %obj.maxfirecount){
	%obj.firecount = "";
	%obj.maxfirecount = 0;
	%obj.onfire = 0;
   }
   else {
	%obj.damage(0, %obj.getposition(), 0.02, $DamageType::Burn);
   	%fire = new ParticleEmissionDummy(){ 
   	   position = vectoradd(%obj.getPosition(),"0 0 0.5");
   	   dataBlock = "defaultEmissionDummy"; 
   	   emitter = "FlameEmitter";  
      };
	MissionCleanup.add(%fire);
	%fire.schedule(100, "delete");
	%obj.firecount++;
	schedule(100, %obj, "burnloop", %obj);
   }
}
