//=============================================================================
// KFWeapAttach_MineRec
//=============================================================================
//
//=============================================================================
// Killing Floor 2
// Copyright (C) 2017 Tripwire Interactive LLC
// fferrando@saber3d
//=============================================================================
class KFWeapAttach_Mine_Reconstructor extends KFWeaponAttachment;

var transient ParticleSystemComponent ChargingPSC;
var ParticleSystem ChargingEffect;
var ParticleSystem ChargedEffect;
var bool bIsCharging;
var bool bIsFullyCharged;

var repnotify float StartFireTime;

var int ChargeLevel;

var float FXScalingFactorByCharge;
var float ChargeRTPC;

simulated function StartFire()
{
	StartFireTime = WorldInfo.TimeSeconds;
	bIsCharging = true;
	
	if (ChargingPSC == none)
	{
		ChargingPSC = new(self) class'ParticleSystemComponent';

		if (WeapMesh != none)
		{
			WeapMesh.AttachComponentToSocket(ChargingPSC, 'MuzzleFlash');
		}
		else
		{
			AttachComponent(ChargingPSC);
		}
	}
	else
	{
		ChargingPSC.ActivateSystem();
	}

	if (ChargingPSC != none)
	{
		ChargingPSC.SetTemplate(ChargingEffect);
	}
}

simulated event Tick(float DeltaTime)
{
	local vector vec;

	if(bIsCharging && !bIsFullyCharged)
	{
		ChargeRTPC = FMin(class'KFWeap_Mine_Reconstructor'.default.MaxChargeTime, WorldInfo.TimeSeconds - StartFireTime) / class'KFWeap_Mine_Reconstructor'.default.MaxChargeTime;

		if (ChargeRTPC >= 1.f)
		{

			bIsFullyCharged = true;
			vec.X = FMin(1.0f, ChargeRTPC);
			vec.Y = FMin(1.0f, ChargeRTPC);
			vec.Z = FMin(1.0f, ChargeRTPC);
			ChargingPSC.SetVectorParameter( name("BlobCharge"), vec);
			//ChargingPSC.SetTemplate(ChargedEffect);
		}

		if( ChargingPSC != none && !bIsFullyCharged)
		{
			//ChargingPSC.SetScale( FXScalingFactorByCharge );
			//FXScalingFactorByCharge = FMin(Lerp(class'KFWeap_Mine_Reconstructor'.default.MinScale, class'KFWeap_Mine_Reconstructor'.default.MaxScale, WorldInfo.TimeSeconds - StartFireTime / class'KFWeap_Mine_Reconstructor'.default.MaxChargeTime), class'KFWeap_Mine_Reconstructor'.default.MaxScale);
			vec.X =ChargeRTPC;
			vec.Y =ChargeRTPC;
			vec.Z =ChargeRTPC;
			ChargingPSC.SetVectorParameter( name("BlobCharge"), vec);
		}
	}

	Super.Tick(DeltaTime);
}

simulated function FirstPersonFireEffects(Weapon W, vector HitLocation)
{
	super.FirstPersonFireEffects(W, HitLocation);
	if (ChargingPSC != none)
	{
		ChargingPSC.DeactivateSystem();
	}
}

simulated function bool ThirdPersonFireEffects(vector HitLocation, KFPawn P, byte ThirdPersonAnimRateByte)
{
	bIsCharging = false;
	bIsFullyCharged = false;
	ChargeRTPC=0;
	if (ChargingPSC != none)
	{
		ChargingPSC.DeactivateSystem();
	}

	return Super.ThirdPersonFireEffects(HitLocation, P, ThirdPersonAnimRateByte);
}

simulated function CauseMuzzleFlash(byte FiringMode)
{
	if (MuzzleFlash == None && MuzzleFlashTemplate != None)
	{
		AttachMuzzleFlash();
	}

	Super.CauseMuzzleFlash(FiringMode);
}

defaultproperties
{
	ChargeRTPC=0
	MuzzleFlashTemplate=KFMuzzleFlash'WEP_Mine_Reconstructor_Arch.Wep_Mine_Reconstructor_MuzzleFlash_3P'

	ChargingEffect=ParticleSystem'WEP_Mine_Reconstructor_EMIT.FX_Bile_BlobCharge_01'
	ChargedEffect=ParticleSystem'WEP_Mine_Reconstructor_EMIT.FX_Mine_Reconstructor_FullCharge'
}
