class repl_LAWProj extends LAWProj;


simulated function Explode(vector HitLocation, vector HitNormal)
{
  local Controller C;
  local PlayerController  LocalPlayer;

  bHasExploded = true;

  // Don't explode if this is a dud
  if (bDud)
  {
    Velocity = vect(0,0,0);
    LifeSpan=1.0;
    SetPhysics(PHYS_Falling);
  }


  PlaySound(ExplosionSound,,2.0);
  if (!class'Settings'.default.bRemoveSmoke && EffectIsRelevant(Location,false) )
  {
    Spawn(class'KFMod.LawExplosion',,,HitLocation + HitNormal*20,rotator(HitNormal));
    Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
  }

  BlowUp(HitLocation);
  Destroy();

  // Shake nearby players screens
  LocalPlayer = Level.GetLocalPlayerController();
  if ((LocalPlayer != none) && (VSize(Location - LocalPlayer.ViewTarget.Location) < DamageRadius))
    LocalPlayer.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);

  for (C=Level.ControllerList; C!=none; C=C.NextController)
    if ((PlayerController(C) != none) && (C != LocalPlayer)
      && (VSize(Location - PlayerController(C).ViewTarget.Location) < DamageRadius))
      C.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);
}


simulated function PostBeginPlay()
{
  local rotator SmokeRotation;

  BCInverse = 1 / BallisticCoefficient;

  if (!class'Settings'.default.bRemoveSmoke && Level.NetMode != NM_DedicatedServer)
  {
    SmokeTrail = Spawn(class'PanzerfaustTrail',self);
    SmokeTrail.SetBase(self);
    SmokeRotation.Pitch = 32768;
    SmokeTrail.SetRelativeRotation(SmokeRotation);
    //Corona = Spawn(class'KFMod.KFLAWCorona',self);
  }

  OrigLoc = Location;

  if (!bDud)
  {
    Dir = vector(Rotation);
    Velocity = speed * Dir;
  }

  if (PhysicsVolume.bWaterVolume)
  {
    bHitWater = true;
    Velocity=0.6*Velocity;
  }

  super(Projectile).PostBeginPlay();
}

defaultproperties
{
}
