Files
UT2k4-Mod-UT2341/Sources/Classes/UT2341MinigunFire.uc
cclecle fa6404868c - correct readme
- make minigun work also on Netplay
- fix mutator
2022-12-10 13:32:31 +00:00

221 lines
5.3 KiB
Ucode

class UT2341MinigunFire extends MinigunFire;
var float WindDownModifier;
var() class<Emitter> NewFlashClass;
var Emitter NewFlashEmitter;
var Sound WindUpSound;
function InitEffects()
{
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (NewFlashClass != None) && ((NewFlashEmitter == None) || NewFlashEmitter.bDeleteMe) )
{
NewFlashEmitter = Weapon.Spawn(NewFlashClass);
Weapon.AttachToBone(NewFlashEmitter, 'Flash');
}
if ( (SmokeEmitterClass != None) && ((SmokeEmitter == None) || SmokeEmitter.bDeleteMe) )
{
SmokeEmitter = Weapon.Spawn(SmokeEmitterClass);
}
}
function DrawMuzzleFlash(Canvas Canvas)
{
// Draw smoke first
if (SmokeEmitter != None && SmokeEmitter.Base != Weapon)
{
SmokeEmitter.SetLocation( Weapon.GetEffectStart() );
Canvas.DrawActor( SmokeEmitter, false, false, Weapon.DisplayFOV );
}
if (NewFlashEmitter != None && NewFlashEmitter.Base != Weapon)
{
NewFlashEmitter.SetLocation( Weapon.GetEffectStart() );
Canvas.DrawActor( NewFlashEmitter, false, false, Weapon.DisplayFOV );
}
}
function FlashMuzzleFlash()
{
local rotator r;
r.Roll = Rand(65535);
Weapon.SetBoneRotation('Bone_Flash', r, 0, 1.f);
if (NewFlashEmitter != None)
NewFlashEmitter.Trigger(Weapon, Instigator);
}
simulated function DestroyEffects()
{
if (NewFlashEmitter != None)
NewFlashEmitter.Destroy();
if (SmokeEmitter != None)
SmokeEmitter.Destroy();
}
auto state Idle
{
function bool IsIdle()
{
return true;
}
function BeginState()
{
PlayAmbientSound(None);
StopRolling();
}
function EndState()
{
PlayAmbientSound(WindUpSound);
}
function StartFiring()
{
RollSpeed = 0;
FireTime = (RollSpeed/MaxRollSpeed) * WindUpTime;
GotoState('WindUp');
}
}
state WindUp
{
function BeginState()
{
ClientPlayForceFeedback(WindingForce); // jdf
}
function EndState()
{
if (ThisModeNum == 0)
{
if ( (Weapon == None) || !Weapon.GetFireMode(1).bIsFiring )
StopForceFeedback(WindingForce);
}
else
{
if ( (Weapon == None) || !Weapon.GetFireMode(0).bIsFiring )
StopForceFeedback(WindingForce);
}
}
function ModeTick(float dt)
{
FireTime += dt;
RollSpeed = (FireTime/WindUpTime) * MaxRollSpeed;
if ( !bIsFiring )
{
GotoState('WindDown');
return;
}
if (RollSpeed >= MaxRollSpeed)
{
RollSpeed = MaxRollSpeed;
FireTime = WindUpTime;
Gun.UpdateRoll(dt, RollSpeed, ThisModeNum);
GotoState('FireLoop');
return;
}
Gun.UpdateRoll(dt, RollSpeed, ThisModeNum);
}
function StopFiring()
{
GotoState('WindDown');
}
}
state WindDown
{
function BeginState()
{
ClientPlayForceFeedback(WindingForce); // jdf
}
function EndState()
{
StopForceFeedback(WindingForce);
}
function ModeTick(float dt)
{
local Controller C;
FireTime -= dt / WindDownModifier;
RollSpeed = (FireTime/WindUpTime) * MaxRollSpeed;
if (RollSpeed <= 0.f)
{
RollSpeed = 0.f;
FireTime = 0.f;
Gun.UpdateRoll(dt, RollSpeed, ThisModeNum);
GotoState('Idle');
}
C = Instigator.Controller;
if( ((C.bFire==1)&&(ThisModeNum == 0)) ||
((C.bAltFire==1)&&(ThisModeNum == 1)) )
{
//Restart same firing mode
UT2341Minigun(Weapon).ForceFiring(ThisModeNum);
Gun.UpdateRoll(dt, RollSpeed, ThisModeNum);
GotoState('WindUp');
}
else if(C.bAltFire==1)
{
//Switch to AltFire
UT2341MinigunAltFire(Weapon.GetFireMode(1)).RollSpeed = RollSpeed;
UT2341MinigunAltFire(Weapon.GetFireMode(1)).FireTime = FireTime;
UT2341Minigun(Weapon).ForceFiring(1);
UT2341MinigunAltFire(Weapon.GetFireMode(1)).GotoState('WindUp');
Gun.UpdateRoll(dt, RollSpeed, 1);
RollSpeed = 0.f;
FireTime = 0.f;
GotoState('Idle');
}
else if(C.bFire==1)
{
//Switch to Main Fire
UT2341MinigunFire(Weapon.GetFireMode(0)).RollSpeed = RollSpeed;
UT2341MinigunFire(Weapon.GetFireMode(0)).FireTime = FireTime;
//UT2341MinigunFire(Weapon.GetFireMode(0)).bIsFiring = True;
UT2341Minigun(Weapon).ForceFiring(0);
UT2341MinigunFire(Weapon.GetFireMode(0)).GotoState('WindUp');
Gun.UpdateRoll(dt, RollSpeed, 0);
RollSpeed = 0.f;
FireTime = 0.f;
GotoState('Idle');
}
Gun.UpdateRoll(dt, RollSpeed, ThisModeNum);
}
}
defaultproperties
{
WindDownModifier=12.000000
NewFlashClass=Class'UT2341WeaponsReducedv1a.FX_EnforcerMuzFlash'
WindUpSound=Sound'UT2341Weapons_Sounds.Minigun.M2WindUp'
BarrelRotationsPerSec=1.250000
WindingSound=Sound'UT2341Weapons_Sounds.Minigun.M2WindDown'
FiringSound=Sound'UT2341Weapons_Sounds.Minigun.M2RegFire'
WindUpTime=0.050000
DamageType=Class'UT2341WeaponsReducedv1a.DamType_MinigunBullet'
DamageMin=15
DamageMax=21
PreFireTime=0.100000
AmmoClass=Class'UT2341WeaponsReducedv1a.UT2341MinigunAmmo'
Spread=0.050000
}