157 lines
4.0 KiB
Ucode
157 lines
4.0 KiB
Ucode
|
//=============================================================================
|
||
|
// KFWeapAttach_HuskCannon
|
||
|
//=============================================================================
|
||
|
//
|
||
|
//=============================================================================
|
||
|
// Killing Floor 2
|
||
|
// Copyright (C) 2017 Tripwire Interactive LLC
|
||
|
//=============================================================================
|
||
|
class KFWeapAttach_HuskCannon extends KFWeaponAttachment;
|
||
|
|
||
|
var transient ParticleSystemComponent ChargingPSC;
|
||
|
var ParticleSystem ChargingEffect;
|
||
|
var ParticleSystem ChargedEffect;
|
||
|
var bool bIsCharging;
|
||
|
var bool bIsFullyCharged;
|
||
|
|
||
|
var float StartFireTime;
|
||
|
|
||
|
var int ChargeLevel;
|
||
|
|
||
|
var const ParticleSystem MuzzleFlashEffectL1;
|
||
|
var const ParticleSystem MuzzleFlashEffectL2;
|
||
|
var const ParticleSystem MuzzleFlashEffectL3;
|
||
|
|
||
|
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 float ChargeRTPC;
|
||
|
|
||
|
if(bIsCharging && !bIsFullyCharged)
|
||
|
{
|
||
|
ChargeRTPC = FMin(class'KFWeap_HuskCannon'.default.MaxChargeTime, WorldInfo.TimeSeconds - StartFireTime) / class'KFWeap_HuskCannon'.default.MaxChargeTime;
|
||
|
|
||
|
if (ChargeRTPC >= 1.f)
|
||
|
{
|
||
|
bIsFullyCharged = true;
|
||
|
ChargingPSC.SetTemplate(ChargedEffect);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
|
||
|
ChargeLevel = GetChargeFXLevel();
|
||
|
|
||
|
if (ChargingPSC != none)
|
||
|
{
|
||
|
ChargingPSC.DeactivateSystem();
|
||
|
}
|
||
|
|
||
|
return Super.ThirdPersonFireEffects(HitLocation, P, ThirdPersonAnimRateByte);
|
||
|
}
|
||
|
|
||
|
simulated function CauseMuzzleFlash(byte FiringMode)
|
||
|
{
|
||
|
if (MuzzleFlash == None && MuzzleFlashTemplate != None)
|
||
|
{
|
||
|
AttachMuzzleFlash();
|
||
|
}
|
||
|
|
||
|
switch (ChargeLevel)
|
||
|
{
|
||
|
case 1:
|
||
|
MuzzleFlash.MuzzleFlash.ParticleSystemTemplate = MuzzleFlashEffectL1;
|
||
|
MuzzleFlash.MuzzleFlash.PSC.SetTemplate(MuzzleFlashEffectL1);
|
||
|
break;
|
||
|
case 2:
|
||
|
MuzzleFlash.MuzzleFlash.ParticleSystemTemplate = MuzzleFlashEffectL2;
|
||
|
MuzzleFlash.MuzzleFlash.PSC.SetTemplate(MuzzleFlashEffectL2);
|
||
|
break;
|
||
|
case 3:
|
||
|
MuzzleFlash.MuzzleFlash.ParticleSystemTemplate = MuzzleFlashEffectL3;
|
||
|
MuzzleFlash.MuzzleFlash.PSC.SetTemplate(MuzzleFlashEffectL3);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
Super.CauseMuzzleFlash(FiringMode);
|
||
|
}
|
||
|
|
||
|
// Should generally match up with KFWeap_HuskCannon::GetChargeFXLevel
|
||
|
function int GetChargeFXLevel()
|
||
|
{
|
||
|
local int MaxCharges;
|
||
|
local int Charges;
|
||
|
|
||
|
MaxCharges = int(class'KFWeap_HuskCannon'.default.MaxChargeTime / class'KFWeap_HuskCannon'.default.ValueIncreaseTime);
|
||
|
Charges = Min((WorldInfo.TimeSeconds - StartFireTime) / class'KFWeap_HuskCannon'.default.ValueIncreaseTime, MaxCharges);
|
||
|
|
||
|
if (Charges <= 1)
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
else if (Charges < MaxCharges)
|
||
|
{
|
||
|
return 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 3;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
MuzzleFlashTemplate=KFMuzzleFlash'WEP_HuskCannon_ARCH.Wep_HuskCannon_MuzzleFlash_3P'
|
||
|
|
||
|
MuzzleFlashEffectL1=ParticleSystem'WEP_HuskCannon_EMIT.FX_Huskcannon_MuzzleFlash_L1_3P'
|
||
|
MuzzleFlashEffectL2=ParticleSystem'WEP_HuskCannon_EMIT.FX_Huskcannon_MuzzleFlash_L2_3P'
|
||
|
MuzzleFlashEffectL3=ParticleSystem'WEP_HuskCannon_EMIT.FX_Huskcannon_MuzzleFlash_L3_3P'
|
||
|
|
||
|
ChargingEffect=ParticleSystem'WEP_HuskCannon_EMIT.FX_Huskcannon_Charging_01'
|
||
|
ChargedEffect=ParticleSystem'WEP_HuskCannon_EMIT.FX_Huskcannon_Charged_01'
|
||
|
}
|