301 lines
7.5 KiB
Ucode
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
|
|
}
|