//=============================================================================
// KFWeapAttach_FAMAS
//=============================================================================
//
//=============================================================================
// Killing Floor 2
// Copyright (C) 2021 Tripwire Interactive LLC
//=============================================================================

class KFWeapAttach_ParasiteImplanter extends KFWeaponAttachment;

`define PARASITEIMPLANTER_MIC_INDEX 0

const SecondaryFireAnim                   = 'Shoot_Secondary';
const SecondaryFireAnimCrouch             = 'Shoot_Secondary_CH';
const SecondaryFireIronAnim               = 'Shoot_Secondary_Iron';
const SecondaryFireBodyAnim               = 'ADD_Shoot_Secondary';
const SecondaryFireBodyAnimCH             = 'ADD_Shoot_Secondary_CH';
const SecondaryFireBodyAnimIron           = 'ADD_Shoot_Secondary_Iron';

/** Material colors applied to different fire modes */
var LinearColor NoAmmoMaterialColor;
var LinearColor AmmoReadyMaterialColor;

/** Plays fire animation on weapon mesh */
simulated function PlayWeaponFireAnim()
{
	local float Duration;
	local name Anim;

	if ( Instigator.bIsWalking )
	{
        if (Instigator.FiringMode == 0) // DEFAULT FIRE MODE
        {
            Anim = WeaponIronFireAnim;
        }
        else if (Instigator.FiringMode == 1)
        {
            Anim = SecondaryFireIronAnim;
        }
	}
	else
	{
        if (Instigator.FiringMode == 0) // ALT FIRE MODE
        {
            Anim = WeaponFireAnim;
        }
        else if (Instigator.FiringMode == 1)
        {
            Anim = Instigator.bIsCrouched ? SecondaryFireAnimCrouch : SecondaryFireAnim;
        }
	}

    Duration = WeapMesh.GetAnimLength( Anim );
    WeapMesh.PlayAnim( Anim, Duration / ThirdPersonAnimRate,, true );
}

/** Plays fire animation on pawn */
simulated function PlayPawnFireAnim( KFPawn P, EAnimSlotStance AnimType )
{
	if (P.FiringMode == 0)
	{
		super.PlayPawnFireAnim(P, AnimType);
	}
	else if (P.FiringMode == 1)
	{
		if ( P.bIsCrouched )
		{
			P.PlayBodyAnim(SecondaryFireBodyAnimCH, AnimType, ThirdPersonAnimRate, ShootBlendInTime, ShootBlendOutTime);
		}
		else if ( P.bIsWalking )
		{
			P.PlayBodyAnim(SecondaryFireBodyAnimIron, AnimType, ThirdPersonAnimRate, ShootBlendInTime, ShootBlendOutTime);
		}
		else
		{
			P.PlayBodyAnim(SecondaryFireBodyAnim, AnimType, ThirdPersonAnimRate, ShootBlendInTime, ShootBlendOutTime);
		}
	}
}

/** Special event added for weap attachments. Free for use */
function OnSpecialEvent(int Arg)
{
	if (Arg <= 2)
	{
		UpdateMaterial(Arg == 2);
	}
}

simulated function UpdateMaterial(bool HasEnoughAmmo)
{
	local LinearColor Value;

	Value = HasEnoughAmmo ? AmmoReadyMaterialColor : NoAmmoMaterialColor;
	if ( WeaponMIC == None && WeapMesh != None )
	{
		WeaponMIC = WeapMesh.CreateAndSetMaterialInstanceConstant(`PARASITEIMPLANTER_MIC_INDEX);
	}

	WeaponMIC.SetVectorParameterValue('Vector_GlowColor', Value);
}

defaultproperties
{
	NoAmmoMaterialColor=(R=0.0f,G=0.0f,B=0.0f)
    AmmoReadyMaterialColor=(R=0.08f,G=1.0f,B=0.08f)
}
