Class NiceHopMineProj extends HopMineProj;
#exec obj load file="KF_GrenadeSnd.uax"
#exec OBJ LOAD FILE=ScrnWeaponPack_T.utx
#exec OBJ LOAD FILE=ScrnWeaponPack_SND.uax   
#exec OBJ LOAD FILE=ScrnWeaponPack_A.ukx   
state OnWall
{
    simulated function BeginState()
    {
       if ( SmokeTrail != none )
       {
           SmokeTrail.HandleOwnerDestroyed();
           SmokeTrail = none;
       }
       bCollideWorld = False;
       bFixedRotationDir = false;
       RotationRate = rot(0,0,0);
       if( Level.NetMode!=NM_DedicatedServer )
       {
           TweenAnim('Down',0.05f);
           PlaySound(Sound'ScrnWeaponPack_SND.mine.blade_cut');
           DotLight = Spawn(Class'HopMineLight',,,Location + (vect(0,0,5) << Rotation));
           if( DotLight!=none )
           {
               DotLight.SetBase(Self);
               DotLight.SetRelativeLocation(vect(0,0,5));
           }
       }
       if( Level.NetMode!=NM_Client )
       {
           NetUpdateFrequency = 1.f;
           SetTimer(0.25+FRand()*0.25,true);
       }
    }
    simulated function EndState()
    {
       if( Level.NetMode!=NM_Client )
       {
           SetTimer(0,false);
           NetUpdateFrequency = Default.NetUpdateFrequency;
           NetUpdateTime = Level.TimeSeconds-1;
       }
    }
    function Timer()
    {
       local Controller C;
       local vector X,Y,Z;
       local float DotP;
       local int ThreatLevel;
       local bool bA,bB;
           GetAxes(Rotation,X,Y,Z);
       for( C=Level.ControllerList; C!=none; C=C.nextController )
           if( C.Pawn!=none && C.Pawn.Health>0 && VSizeSquared(C.Pawn.Location-Location)<1000000.f )
           {
               X = C.Pawn.Location-Location;
               DotP = (X Dot Z);
               if( DotP<0 )
                   continue;
               DotP = VSizeSquared(X - (Z * DotP));
               if( DotP>90000.f || !FastTrace(C.Pawn.Location,Location) )
                   continue;
               if( Monster(C.Pawn)!=none )
               {
                   bB = true;
                   if( DotP<35500.f )
                   {
                       Y = C.Pawn.Location;
                       ThreatLevel+=C.Pawn.HealthMax;
                   }
               }
               else bA = true;
           }
       if( bA!=bWarningTarget || bB!=bCriticalTarget )
       {
           bWarningTarget = bA;
           bCriticalTarget = bB;
           if( DotLight!=none )
               DotLight.SetMode(bA,bB);
           NetUpdateTime = Level.TimeSeconds-1;
       }
       if( bB && ThreatLevel>400 )
       {
           bWarningTarget = false;
           bCriticalTarget = false;
           RepLaunchPos = Y;
           GoToState('LaunchMine');
       }
       else if( InstigatorController==none || bNeedsDetonate || (WeaponOwner!=none && WeaponOwner.NumMinesOut>WeaponOwner.MaximumMines) )
       {
           bWarningTarget = false;
           bCriticalTarget = false;
           RepLaunchPos = Location + Z*(150.f+FRand()*250.f);
           GoToState('LaunchMine');
       }
    }
    simulated function PostNetReceive()
    {
       if( RepLaunchPos!=vect(0,0,0) )
           GoToState('LaunchMine');
       else if( DotLight!=none )
           DotLight.SetMode(bWarningTarget,bCriticalTarget);
    }
}
defaultproperties
{
}
