//=============================================================================
// HopMineLchr
//=============================================================================
class HopMineLchr extends Crossbuzzsaw;

var byte NumMinesOut;
var() byte MaximumMines;
var() localized string MinesText;

var FakedHopMine FakedHopMine;
var vector FakedHopMineOffset;

replication
{
    // Variables the server should send to the client.
    reliable if( Role==ROLE_Authority && bNetOwner )
        NumMinesOut;
}

simulated function PostBeginPlay()
{
    super.PostBeginPlay();

    if ( Level.NetMode != NM_DedicatedServer ) {
        FakedHopMine = spawn(class'FakedHopMine',self);
        if ( FakedHopMine != none ) {
            SetBoneLocation('Blade', FakedHopMineOffset );
            // bone must have a size to properly adjust rotation
            SetBoneScale (55, 0.0001, 'Blade');
            AttachToBone(FakedHopMine, 'Blade');
        }
    }
}

simulated function Destroyed()
{
    local HopMineProj P;

    if ( FakedHopMine != None )
        FakedHopMine.Destroy();
        
    // blow up all mines on weapon destroy (drop)  -- PooSH
    foreach DynamicActors(Class'HopMineProj',P)
    {
        if( !P.bDeleteMe && P.WeaponOwner==self && !P.bNeedsDetonate )
        {
            if ( P.IsInState('OnWall') ) {
                P.RepLaunchPos = P.Location;
                P.bCriticalTarget = true;
                P.GoToState('LaunchMine');
                P.NetUpdateTime = Level.TimeSeconds-1;
            }
            else {
                P.Disintegrate(P.Location, vect(0,0,1));
            }
        }
    }        
        
    super.Destroyed();
}

// simulated function AltFire(float F)
// {
    // FakedHopMineOffset.Z += 0.1;
    // SetBoneLocation('Blade', FakedHopMineOffset );
    // PlayerController(Instigator.Controller).ClientMessage("FakedHopMineOffset = "$ FakedHopMineOffset);
// }


final function AddMine( HopMineProj M )
{
    ++NumMinesOut;
    M.WeaponOwner = Self;
    if ( Instigator != none && Instigator.PlayerReplicationInfo != none 
            && Instigator.PlayerReplicationInfo.Team != none )
    {
        M.PlacedTeam = Instigator.PlayerReplicationInfo.Team.TeamIndex;
    }
    NetUpdateTime = Level.TimeSeconds-1;
}
final function RemoveMine( HopMineProj M )
{
    --NumMinesOut;
    M.WeaponOwner = None;
    NetUpdateTime = Level.TimeSeconds-1;
}

// simulated function RenderOverlays( Canvas Canvas )
// {
    // Super.RenderOverlays(Canvas);
    // Canvas.SetDrawColor(255,255,255,255);
    // Canvas.Font = Canvas.MedFont;
    // Canvas.SetPos(25,Canvas.ClipY*0.5);
    // Canvas.DrawText(MinesText$NumMinesOut$"/"$MaximumMines,false);
// }

/*
function GiveTo(Pawn Other, optional Pickup Pickup)
{
    local HopMineProj P;

    Super.GiveTo(Other,Pickup);
    NumMinesOut = 0;
    foreach DynamicActors(Class'HopMineProj',P)
    {
        if( P.InstigatorController==Other.Controller && !P.bNeedsDetonate )
        {
            P.Instigator = Other;
            P.WeaponOwner = Self;
            ++NumMinesOut;
        }
        else if( P.WeaponOwner==Self )
            P.WeaponOwner = None;
    }
}
*/

defaultproperties
{
     MaximumMines=254
     MinesText="Mines: "
     FakedHopMineOffset=(Z=0.320000)
     RotateRate=500.000000
     Weight=6.000000
     AppID=0
     FireModeClass(0)=Class'ScrnWeaponPack.HopMineFire'
     Description="The prototype of Hopmine launcher. Alpha version. Have some serious bugs like mines are detonated by each other. But still can be very useful."
     PickupClass=Class'ScrnWeaponPack.HopMineLPickup'
     ItemName="HopMine Launcher SE"
}
