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

78 lines
2.4 KiB
Ucode

class WeaponAttachment extends InventoryAttachment
native
nativereplication;
var byte FlashCount; // when incremented, draw muzzle flash for current frame
var byte FiringMode; // replicated to identify what type of firing/reload animations to play
var byte SpawnHitCount; // when incremented, spawn hit effect at mHitLocation
var bool bAutoFire; // When set to true.. begin auto fire sequence (used to play looping anims)
var float FiringSpeed; // used by human animations to determine the appropriate speed to play firing animations
var vector mHitLocation; // used for spawning hit effects client side
var bool bMatchWeapons; // for team beacons (link gun potential links)
var color BeaconColor; // if bMatchWeapons, what color team beacon should be
var class<Actor> SplashEffect;
replication
{
// Things the server should send to the client.
reliable if( bNetDirty && (!bNetOwner || bDemoRecording || bRepClientDemo) && (Role==ROLE_Authority) )
FlashCount, FiringMode, bAutoFire;
reliable if ( bNetDirty && (Role==ROLE_Authority) )
mHitLocation, SpawnHitCount;
}
/*
ThirdPersonEffects called by Pawn's C++ tick if FlashCount incremented
becomes true
OR called locally for local player
*/
simulated event ThirdPersonEffects()
{
// spawn 3rd person effects
// have pawn play firing anim
if ( Instigator != None )
{
if ( FiringMode == 1 )
Instigator.PlayFiring(1.0,'1');
else
Instigator.PlayFiring(1.0,'0');
}
}
simulated function CheckForSplash()
{
local Actor HitActor;
local vector HitNormal, HitLocation;
if ( !Level.bDropDetail && (Level.DetailMode != DM_Low) && (SplashEffect != None) && !Instigator.PhysicsVolume.bWaterVolume )
{
// check for splash
bTraceWater = true;
HitActor = Trace(HitLocation,HitNormal,mHitLocation,Instigator.Location,true);
bTraceWater = false;
if ( (FluidSurfaceInfo(HitActor) != None) || ((PhysicsVolume(HitActor) != None) && PhysicsVolume(HitActor).bWaterVolume) )
Spawn(SplashEffect,,,HitLocation,rot(16384,0,0));
}
}
/* UpdateHit
- used to update properties so hit effect can be spawn client side
*/
function UpdateHit(Actor HitActor, vector HitLocation, vector HitNormal);
defaultproperties
{
bReplicateInstigator=true
FiringSpeed=+1.0
bActorShadows=true
BeaconColor=(G=255,A=255)
NetUpdateFrequency=8
CullDistance=4000.0
// _RO_
bBlockHitPointTraces=False
}