//=============================================================================
// KFProj_RicochetBullet
//=============================================================================
// Class for projectiles that can ricochet off the environment
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// Jeff Robinson
//=============================================================================

class KFProj_RicochetBullet extends KFProj_Bullet
	abstract;

var int                 BouncesLeft;
var float               DampingFactor;
var KFImpactEffectInfo  RicochetEffects;

/** return true if projectile actually bounced / was allowed to bounce */
simulated function bool Bounce( vector HitNormal, Actor BouncedOff )
{
    if( BouncesLeft > 0 )
    {
        Velocity = DampingFactor * (Velocity - 2.0*HitNormal*(Velocity dot HitNormal));
        BouncesLeft = BouncesLeft - 1;

        if( WorldInfo.NetMode != NM_DedicatedServer )
        {
            // do the impact effects
            `ImpactEffectManager.PlayImpactEffects(Location, Instigator, HitNormal, RicochetEffects, true );
        }

        // also done from ProcessDestructibleTouchOnBounce. update LastBounced to solve problem with bouncing rapidly between world/non-world geometry
        LastBounced.Actor = BouncedOff;
        LastBounced.Time = WorldInfo.TimeSeconds;

        return true;
    }

    return false;
}

defaultproperties
{
	bBounce=true
    bPushedByEncroachers=false

	// some reasonable defaults
	BouncesLeft=2
    DampingFactor=0.65
}
