//=============================================================================
// KFWeapAttach_Minigun
//=============================================================================
// A custom 3rd person weapon template for the Minigun
//=============================================================================
// Killing Floor 2
// Copyright (C) 2020 Tripwire Interactive LLC
//=============================================================================
class KFWeapAttach_Minigun extends KFWeaponAttachment
	native;

/* Custom anim tree with the control of the rotation of the barrel */
var AnimTree CustomAnimTree;

/* Flag that indicates that the minigun is in warming up */
var bool bWindUpModeActive;

/* The minigun is winded up and ready to fire */
var bool bWindUpReady;

/* Time used to wind up the weapon (also acts as the cooldown) */
var float WindUpActivationTime;

/* Control variable to check the current state of the wind up */
var transient float WindUpControlTime;

/* Rotation speed of the barrel when fully warmed up*/
var float WindUpRotationSpeed;

var CylinderRotationInfo CylinderRotInfo;

cpptext
{
	// cylinder is incrementally rotated
	virtual void TickSpecial( FLOAT DeltaSeconds );
};

// updates the cylynder rotation in Tick Special
native simulated function UpdateCylinderRotation( out CylinderRotationInfo RotInfo, float Degrees );

event PreBeginPlay()
{
	Super.PreBeginPlay();
	
	// Override the animtree.  Doing this here (before AttachTo) instead of in defaultprops 
	// avoids an undesired call to our owning Pawn's PostInitAnimTree
	if ( CustomAnimTree != None )
	{
		WeapMesh.SetAnimTreeTemplate(CustomAnimTree);
		WeapAnimNode = AnimNodeSequence(AnimTree(WeapMesh.Animations).Children[0].Anim);
		CylinderRotInfo.Control = SkelControlSingleBone( WeapMesh.FindSkelControl('CylinderControl') );
		if( CylinderRotInfo.Control != none )
		{
			CylinderRotInfo.Control.SetSkelControlActive( true );
		}
	}
}

simulated function UpdateWindUp(bool bActive)
{
	bWindUpModeActive = bActive;
}

defaultproperties
{
	// Wind Up variables
	WindUpActivationTime=0.7
	WindUpRotationSpeed=200

	// Weapon SkeletalMesh
	Begin Object Name=SkeletalMeshComponent0
		bForceRefPose=0
	End Object

	CustomAnimTree=AnimTree'WEP_Minigun_ARCH.WEP_Animtree_Minigun_3p'

	bHasLaserSight=false
}
