rott/kf_sources/KFMod/Classes/DualiesAttachment.uc
2026-07-14 20:27:09 +07:00

301 lines
7.5 KiB
Ucode

class DualiesAttachment extends KFWeaponAttachment;
var bool bIsOffHand,bMyFlashTurn;
var bool bBeamEnabled;
var DualiesAttachment brother;
var () Mesh BrotherMesh;
var Actor TacShine;
var Effects TacShineCorona;
simulated function DoFlashEmitter()
{
if(bIsOffHand)
return;
if(bMyFlashTurn)
ActuallyFlash();
else if(brother != None)
brother.ActuallyFlash();
bMyFlashTurn = !bMyFlashTurn;
}
simulated function ActuallyFlash()
{
Super.DoFlashEmitter();
}
simulated function Destroyed()
{
if ( TacShineCorona != None )
TacShineCorona.Destroy();
if ( TacShine != None )
TacShine.Destroy();
Super.Destroyed();
}
// Overriden to support having two weapon attachments firing and playing anims
simulated event ThirdPersonEffects()
{
local PlayerController PC;
// Prevents tracers from spawning if player is using the flashlight function of the 9mm
if( FiringMode==1 )
return;
if ( (Level.NetMode == NM_DedicatedServer) || (Instigator == None) )
return;
// new Trace FX - Ramm
if (FiringMode == 0)
{
if ( OldSpawnHitCount != SpawnHitCount )
{
OldSpawnHitCount = SpawnHitCount;
GetHitInfo();
PC = Level.GetLocalPlayerController();
if ( ((Instigator != None) && (Instigator.Controller == PC)) || (VSize(PC.ViewTarget.Location - mHitLocation) < 4000) )
{
Spawn(class'ROBulletHitEffect',,, mHitLocation, Rotator(-mHitNormal));
CheckForSplash();
}
}
}
if ( FlashCount>0 )
{
if( KFPawn(Instigator)!=None )
{
// We don't really have alt fire, but use the alt fire anims as the left hand firing anims
if( bMyFlashTurn )
{
KFPawn(Instigator).StartFiringX(false,bRapidFire);
}
else
{
KFPawn(Instigator).StartFiringX(true,bRapidFire);
}
}
if( bDoFiringEffects )
{
PC = Level.GetLocalPlayerController();
if ( (Level.TimeSeconds - LastRenderTime > 0.2) && (Instigator.Controller != PC) )
return;
WeaponLight();
DoFlashEmitter();
SpawnTracer();
if( !bIsOffHand )
{
if( !bMyFlashTurn )
{
ThirdPersonShellEject();
}
else if( brother != None)
{
brother.ThirdPersonShellEject();
}
}
}
}
else
{
GotoState('');
if( KFPawn(Instigator)!=None )
KFPawn(Instigator).StopFiring();
}
}
simulated function ThirdPersonShellEject()
{
if ( (mShellCaseEmitter == None) && (Level.DetailMode != DM_Low) && !Level.bDropDetail )
{
mShellCaseEmitter = Spawn(mShellCaseEmitterClass);
if ( mShellCaseEmitter != None )
AttachToBone(mShellCaseEmitter, 'ShellPort');
}
if (mShellCaseEmitter != None)
mShellCaseEmitter.mStartParticles++;
}
simulated function vector GetTracerStart()
{
local Pawn p;
p = Pawn(Owner);
if ( (p != None) && p.IsFirstPerson() && p.Weapon != None )
{
return p.Weapon.GetEffectStart();
}
// 3rd person
if ( mMuzFlash3rd != None && bMyFlashTurn)
return mMuzFlash3rd.Location;
else
if ( brother != none && brother.mMuzFlash3rd != None && !bMyFlashTurn)
return brother.mMuzFlash3rd.Location;
// return Location;
}
simulated function UpdateTacBeam( float Dist )
{
local vector Sc;
local DualiesAttachment DA;
if( Mesh==BrotherMesh )
{
if( bBeamEnabled )
{
if (TacShine!=none )
TacShine.bHidden = True;
if (TacShineCorona!=none )
TacShineCorona.bHidden = True;
bBeamEnabled = False;
}
if( brother==None )
{
ForEach DynamicActors(Class'DualiesAttachment',DA)
{
if( DA!=Self && DA.Instigator==Instigator && DA.Mesh!=BrotherMesh )
{
brother = DA;
Break;
}
}
}
if( brother!=None )
brother.UpdateTacBeam(Dist);
Return;
}
if( !bBeamEnabled )
{
if (TacShine == none )
{
TacShine = Spawn(Class'Dualies'.Default.TacShineClass,Owner,,,);
AttachToBone(TacShine,'FlashLight');
TacShine.RemoteRole = ROLE_None;
}
else TacShine.bHidden = False;
if (TacShineCorona == none )
{
TacShineCorona = Spawn(class 'KFTacLightCorona',Owner,,,);
AttachToBone(TacShineCorona,'FlashLight');
TacShineCorona.RemoteRole = ROLE_None;
}
TacShineCorona.bHidden = False;
bBeamEnabled = True;
}
Sc = TacShine.DrawScale3D;
Sc.Y = FClamp(Dist/90.f,0.02,1.f);
if( TacShine.DrawScale3D!=Sc )
TacShine.SetDrawScale3D(Sc);
}
simulated function TacBeamGone()
{
local DualiesAttachment DA;
if( Mesh==BrotherMesh )
{
if( brother==None )
{
ForEach DynamicActors(Class'DualiesAttachment',DA)
{
if( DA!=Self && DA.Instigator==Instigator && DA.Mesh!=BrotherMesh )
{
brother = DA;
Break;
}
}
}
if( brother!=None )
brother.TacBeamGone();
Return;
}
if( bBeamEnabled )
{
if (TacShine!=none )
TacShine.bHidden = True;
if (TacShineCorona!=none )
TacShineCorona.bHidden = True;
bBeamEnabled = False;
}
}
defaultproperties
{
bMyFlashTurn=True
mTracerClass=Class'KFMod.KFNewTracer'
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
Mesh=SkeletalMesh'KF_Weapons3rd_Trip.Single9mm_3rd'
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdPistol'
BrotherMesh = Mesh 'KF_Weapons3rd_Trip.Dual9mm_3rd'
MovementAnims(0)=JogF_Dual9mm
MovementAnims(1)=JogB_Dual9mm
MovementAnims(2)=JogL_Dual9mm
MovementAnims(3)=JogR_Dual9mm
CrouchAnims(0)=CHwalkF_Dual9mm
CrouchAnims(1)=CHwalkB_Dual9mm
CrouchAnims(2)=CHwalkL_Dual9mm
CrouchAnims(3)=CHwalkR_Dual9mm
WalkAnims(0)=WalkF_Dual9mm
WalkAnims(1)=WalkB_Dual9mm
WalkAnims(2)=WalkL_Dual9mm
WalkAnims(3)=WalkR_Dual9mm
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_Dual9mm
TurnLeftAnim=TurnL_Dual9mm
CrouchTurnRightAnim=CH_TurnR_Dual9mm
CrouchTurnLeftAnim=CH_TurnL_Dual9mm
IdleRestAnim=Idle_Dual9mm//Idle_Rest
IdleCrouchAnim=CHIdle_Dual9mm
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_Dual9mm//Idle_Rifle
IdleHeavyAnim=Idle_Dual9mm//Idle_Biggun
IdleRifleAnim=Idle_Dual9mm//Idle_Rifle
IdleChatAnim=Idle_Dual9mm
FireAnims(0)=DualiesAttackRight
FireAnims(1)=DualiesAttackRight
FireAnims(2)=DualiesAttackRight
FireAnims(3)=DualiesAttackRight
FireAltAnims(0)=DualiesAttackLeft
FireAltAnims(1)=DualiesAttackLeft
FireAltAnims(2)=DualiesAttackLeft
FireAltAnims(3)=DualiesAttackLeft
FireCrouchAnims(0)=CHDualiesAttackRight
FireCrouchAnims(1)=CHDualiesAttackRight
FireCrouchAnims(2)=CHDualiesAttackRight
FireCrouchAnims(3)=CHDualiesAttackRight
FireCrouchAltAnims(0)=CHDualiesAttackLeft
FireCrouchAltAnims(1)=CHDualiesAttackLeft
FireCrouchAltAnims(2)=CHDualiesAttackLeft
FireCrouchAltAnims(3)=CHDualiesAttackLeft
HitAnims(0)=HitF_Dual9mmm
HitAnims(1)=HitB_Dual9mm
HitAnims(2)=HitL_Dual9mm
HitAnims(3)=HitR_Dual9mm
PostFireBlendStandAnim=Blend_Dual9mm
PostFireBlendCrouchAnim=CHBlend_Dual9mm
}