1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFSM_PlayerHusk_FireBallAttack.uc
2020-12-13 18:01:13 +03:00

198 lines
5.2 KiB
Ucode

//=============================================================================
// KFSM_Husk_FireBallAttack
//=============================================================================
// Player-controlled Husk fireball attack
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class KFSM_PlayerHusk_FireBallAttack extends KFSM_PlaySingleAnim;
/** Cached reference to pawn */
var KFPawn_ZedHusk_Versus MyHuskPawn;
/** Time when the special move started */
var float HoldStartTime;
/** Set to true when wind up anim ahs finished */
var bool bReadyToFire;
/** Anims */
var name WindUpAnimName;
var name FireHeldAnimName;
/** VFX */
var ParticleSystem LoopingMuzzleEffect;
var ParticleSystemComponent MuzzlePSC;
var name MuzzleFXSocketName;
function SpecialMoveStarted( bool bForced, name PrevMove )
{
super.SpecialMoveStarted( bForced, PrevMove );
MyHuskPawn = KFPawn_ZedHusk_Versus( KFPOwner );
HoldStartTime = MyHuskPawn.WorldInfo.TimeSeconds;
bReadyToFire = false;
// Spawn and attach our muzzle FX
if( MyHuskPawn.WorldInfo.MyEmitterPool != none )
{
MuzzlePSC = MyHuskPawn.WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment( LoopingMuzzleEffect, MyHuskPawn.Mesh, MuzzleFXSocketName, true );
}
PlayWindUpAnimation();
}
/** Overridden to do nothing */
function PlayAnimation() {}
/** Plays our wind up anim, starts the barrel spin skel controller */
function PlayWindUpAnimation()
{
bUseRootMotion = false;
PlaySpecialMoveAnim( WindUpAnimName, AnimStance, BlendInTime, BlendOutTime, 1.f );
}
/** Plays our looping hold animation */
function PlayFireHeldAnimation()
{
bReadyToFire = true;
PlaySpecialMoveAnim( FireHeldAnimName, AnimStance, BlendInTime, BlendOutTime, 1.f, true );
if( MyHuskPawn != none )
{
MyHuskPawn.SetFireLightEnabled( true );
}
}
/** Plays the fire animation */
function PlayFireAnimation()
{
bReadyToFire = false;
bPendingStopFire = false;
PlaySpecialMoveAnim( AnimName, AnimStance, BlendInTime, BlendOutTime, 1.f, false );
}
/** Plays subsequent animations in the barrage */
function AnimEndNotify(AnimNodeSequence SeqNode, float PlayedTime, float ExcessTime)
{
switch( SeqNode.AnimSeqName )
{
case WindUpAnimName:
if( bPendingStopFire )
{
PlayFireAnimation();
}
else
{
PlayFireHeldAnimation();
}
break;
case AnimName:
KFPOwner.EndSpecialMove();
break;
}
}
/** Update looping muzzle effect size */
simulated function Tick( float DeltaTime )
{
local float Strength;
local vector2d StrengthRange;
super.Tick( DeltaTime );
if( MuzzlePSC != none )
{
StrengthRange = MyHuskPawn.GetFireballStrengthRange();
Strength = fClamp( (MyHuskPawn.WorldInfo.TimeSeconds - HoldStartTime) * MyHuskPawn.GetFireballStrengthPerSecond(), StrengthRange.X, StrengthRange.Y );
MuzzlePSC.SetFloatParameter( 'FX_Size', 1.f * (Strength / StrengthRange.Y) );
}
}
function SpecialMoveEnded(Name PrevMove, Name NextMove)
{
if( MuzzlePSC != none && MuzzlePSC.bIsActive )
{
MuzzlePSC.DeactivateSystem();
}
super.SpecialMoveEnded( PrevMove, NextMove );
}
/** Wait for a button release and fire */
function SpecialMoveFlagsUpdated()
{
if( KFPOwner.SpecialMoveFlags == FLAG_SpecialMoveButtonReleased )
{
bPendingStopFire = true;
if( bReadyToFire )
{
PlayFireAnimation();
}
}
else if( KFPOwner.SpecialMoveFlags == FLAG_SpecialMoveButtonPressed )
{
bPendingStopFire = false;
}
else
{
super.SpecialMoveFlagsUpdated();
}
}
/* Called on some player-controlled moves when a firemode input has been pressed */
function SpecialMoveButtonRetriggered()
{
KFPOwner.DoSpecialMove( KFPOwner.SpecialMove, true,, FLAG_SpecialMoveButtonPressed );
if( KFPOwner.Role < ROLE_Authority && KFPOwner.IsLocallyControlled() )
{
KFPOwner.ServerDoSpecialMove( KFPOwner.SpecialMove, true,, FLAG_SpecialMoveButtonPressed );
}
}
/** Called on some player-controlled moves when a firemode input has been released */
function SpecialMoveButtonReleased()
{
KFPOwner.DoSpecialMove( KFPOwner.SpecialMove, true,, FLAG_SpecialMoveButtonReleased );
if( KFPOwner.Role < ROLE_Authority && KFPOwner.IsLocallyControlled() )
{
KFPOwner.ServerDoSpecialMove( KFPOwner.SpecialMove, true,, FLAG_SpecialMoveButtonReleased );
}
}
DefaultProperties
{
// SpecialMove
Handle=KFSM_PlayerHusk_FireBallAttack
bDisableSteering=false
bDisableMovement=true
bDisableTurnInPlace=true
bCanBeInterrupted=true
CustomTurnInPlaceAnimRate=2.f
// Animation
WindUpAnimName=Player_Shoot_Start
FireHeldAnimName=Player_Shoot_Loop
AnimName=Player_Shoot_End
AnimStance=EAS_FullBody
bUseRootMotion=false
// VFX
LoopingMuzzleEffect=ParticleSystem'ZED_Husk_EMIT.FX_Husk_muzzleflash_Loop_01'
MuzzleFXSocketName=EMPDisruptSocket
// Camera
bUseCustomThirdPersonViewOffset=true
CustomThirdPersonViewOffset={(
OffsetHigh=(X=-135,Y=75,Z=40),
OffsetLow=(X=-180,Y=75,Z=50),
OffsetMid=(X=-120,Y=60,Z=0),
)}
ViewOffsetInterpTime=0.3f
CustomCameraFOV=60.f
CameraFOVTransitionTime=0.4f
}