271 lines
7.9 KiB
Ucode
271 lines
7.9 KiB
Ucode
//=============================================================================
|
|
// Welder Inventory class
|
|
//=============================================================================
|
|
class Welder extends KFMeleeGun
|
|
dependson(KFVoicePack);
|
|
|
|
#exec OBJ LOAD FILE=KF_Weapons_Trip_T.utx
|
|
|
|
var () float AmmoRegenRate;
|
|
|
|
var float AmmoRegenCount;
|
|
|
|
// Scripted Nametag vars
|
|
|
|
var ScriptedTexture ScriptedScreen;
|
|
var Shader ShadedScreen;
|
|
var Material ScriptedScreenBack;
|
|
|
|
//Font/Color/stuff
|
|
var Font NameFont;
|
|
var font SmallNameFont; // Used when the name is to big too fit
|
|
var color NameColor; // Colors
|
|
var Color BackColor;
|
|
|
|
var float ScreenWeldPercent;
|
|
var bool bNoTarget; // Not close enough to door to get reading
|
|
var int FireModeArray;
|
|
|
|
// Speech
|
|
var bool bJustStarted;
|
|
var float LastWeldingMessageTime;
|
|
var float WeldingMessageDelay;
|
|
|
|
function byte BestMode()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
simulated function float RateSelf()
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
simulated function Destroyed()
|
|
{
|
|
Super.Destroyed();
|
|
if( ScriptedScreen!=None )
|
|
{
|
|
ScriptedScreen.SetSize(256,256);
|
|
ScriptedScreen.FallBackMaterial = None;
|
|
ScriptedScreen.Client = None;
|
|
Level.ObjectPool.FreeObject(ScriptedScreen);
|
|
ScriptedScreen = None;
|
|
}
|
|
if( ShadedScreen!=None )
|
|
{
|
|
ShadedScreen.Diffuse = None;
|
|
ShadedScreen.Opacity = None;
|
|
ShadedScreen.SelfIllumination = None;
|
|
ShadedScreen.SelfIlluminationMask = None;
|
|
Level.ObjectPool.FreeObject(ShadedScreen);
|
|
ShadedScreen = None;
|
|
skins[3] = None;
|
|
}
|
|
}
|
|
|
|
// Destroy this stuff when the level changes
|
|
simulated function PreTravelCleanUp()
|
|
{
|
|
if( ScriptedScreen!=None )
|
|
{
|
|
ScriptedScreen.SetSize(256,256);
|
|
ScriptedScreen.FallBackMaterial = None;
|
|
ScriptedScreen.Client = None;
|
|
Level.ObjectPool.FreeObject(ScriptedScreen);
|
|
ScriptedScreen = None;
|
|
}
|
|
|
|
if( ShadedScreen!=None )
|
|
{
|
|
ShadedScreen.Diffuse = None;
|
|
ShadedScreen.Opacity = None;
|
|
ShadedScreen.SelfIllumination = None;
|
|
ShadedScreen.SelfIlluminationMask = None;
|
|
Level.ObjectPool.FreeObject(ShadedScreen);
|
|
ShadedScreen = None;
|
|
skins[3] = None;
|
|
}
|
|
}
|
|
|
|
simulated function InitMaterials()
|
|
{
|
|
if( ScriptedScreen==None )
|
|
{
|
|
ScriptedScreen = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
|
|
ScriptedScreen.SetSize(256,256);
|
|
ScriptedScreen.FallBackMaterial = ScriptedScreenBack;
|
|
ScriptedScreen.Client = Self;
|
|
}
|
|
|
|
if( ShadedScreen==None )
|
|
{
|
|
ShadedScreen = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
|
|
ShadedScreen.Diffuse = ScriptedScreen;
|
|
ShadedScreen.SelfIllumination = ScriptedScreen;
|
|
skins[3] = ShadedScreen;
|
|
}
|
|
}
|
|
|
|
|
|
simulated function Tick(float dt)
|
|
{
|
|
local KFDoorMover LastDoorHitActor;
|
|
|
|
if (FireMode[0].bIsFiring)
|
|
FireModeArray = 0;
|
|
else if (FireMode[1].bIsFiring)
|
|
FireModeArray = 1;
|
|
else
|
|
bJustStarted = true;
|
|
|
|
if (WeldFire(FireMode[FireModeArray]).LastHitActor != none && VSize(WeldFire(FireMode[FireModeArray]).LastHitActor.Location - Owner.Location) <= (weaponRange * 1.5) )
|
|
{
|
|
bNoTarget = false;
|
|
LastDoorHitActor = KFDoorMover(WeldFire(FireMode[FireModeArray]).LastHitActor);
|
|
|
|
if(LastDoorHitActor != none)
|
|
{
|
|
ScreenWeldPercent = (LastDoorHitActor.WeldStrength / LastDoorHitActor.MaxWeld) * 100;
|
|
}
|
|
|
|
if( ScriptedScreen==None )
|
|
InitMaterials();
|
|
ScriptedScreen.Revision++;
|
|
if( ScriptedScreen.Revision>10 )
|
|
ScriptedScreen.Revision = 1;
|
|
|
|
if ( Level.Game != none && Level.Game.NumPlayers > 1 && bJustStarted && Level.TimeSeconds - LastWeldingMessageTime > WeldingMessageDelay )
|
|
{
|
|
if ( FireMode[0].bIsFiring )
|
|
{
|
|
bJustStarted = false;
|
|
LastWeldingMessageTime = Level.TimeSeconds;
|
|
if( Instigator != none && Instigator.Controller != none && PlayerController(Instigator.Controller) != none )
|
|
{
|
|
PlayerController(Instigator.Controller).Speech('AUTO', 0, "");
|
|
}
|
|
}
|
|
else if ( FireMode[1].bIsFiring )
|
|
{
|
|
bJustStarted = false;
|
|
LastWeldingMessageTime = Level.TimeSeconds;
|
|
if( Instigator != none && Instigator.Controller != none && PlayerController(Instigator.Controller) != none )
|
|
{
|
|
PlayerController(Instigator.Controller).Speech('AUTO', 1, "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (WeldFire(FireMode[FireModeArray]).LastHitActor == none || WeldFire(FireMode[FireModeArray]).LastHitActor != none && VSize(WeldFire(FireMode[FireModeArray]).LastHitActor.Location - Owner.Location) > (weaponRange * 1.5) && !bNoTarget )
|
|
{
|
|
if( ScriptedScreen==None )
|
|
InitMaterials();
|
|
ScriptedScreen.Revision++;
|
|
if( ScriptedScreen.Revision>10 )
|
|
ScriptedScreen.Revision = 1;
|
|
bNoTarget = true;
|
|
if( ClientState != WS_Hidden && Level.NetMode != NM_DedicatedServer && Instigator != none && Instigator.IsLocallyControlled() )
|
|
{
|
|
PlayIdle();
|
|
}
|
|
}
|
|
if ( AmmoAmount(0) < FireMode[0].AmmoClass.Default.MaxAmmo)
|
|
{
|
|
AmmoRegenCount += (dT * AmmoRegenRate );
|
|
ConsumeAmmo(0, -1*(int(AmmoRegenCount)));
|
|
AmmoRegenCount -= int(AmmoRegenCount);
|
|
}
|
|
}
|
|
|
|
simulated function float ChargeBar()
|
|
{
|
|
return FMin(1, (AmmoAmount(0))/(FireMode[0].AmmoClass.Default.MaxAmmo));
|
|
}
|
|
|
|
|
|
simulated event RenderTexture(ScriptedTexture Tex)
|
|
{
|
|
local int SizeX, SizeY;
|
|
|
|
Tex.DrawTile(0,0,Tex.USize,Tex.VSize,0,0,256,256,Texture'KillingFloorWeapons.Welder.WelderScreen',BackColor); // Draws the tile background
|
|
|
|
if(!bNoTarget && ScreenWeldPercent > 0 )
|
|
{
|
|
// Err for now go with a name in black letters
|
|
NameColor.R=(255 - (ScreenWeldPercent * 2));
|
|
NameColor.G=(0 + (ScreenWeldPercent * 2.55));
|
|
NameColor.B=(20 + ScreenWeldPercent);
|
|
NameColor.A=255;
|
|
Tex.TextSize(ScreenWeldPercent@"%",NameFont,SizeX,SizeY); // get the size of the players name
|
|
Tex.DrawText( (Tex.USize - SizeX) * 0.5, 85,ScreenWeldPercent@"%", NameFont, NameColor);
|
|
Tex.TextSize("Integrity:",NameFont,SizeX,SizeY);
|
|
Tex.DrawText( (Tex.USize - SizeX) * 0.5, 50,"Integrity:", NameFont, NameColor);
|
|
}
|
|
else
|
|
{
|
|
NameColor.R=255;
|
|
NameColor.G=255;
|
|
NameColor.B=255;
|
|
NameColor.A=255;
|
|
Tex.TextSize("-",NameFont,SizeX,SizeY); // get the size of the players name
|
|
Tex.DrawText( (Tex.USize - SizeX) * 0.5, 85,"-", NameFont, NameColor);
|
|
Tex.TextSize("Integrity:",NameFont,SizeX,SizeY);
|
|
Tex.DrawText( (Tex.USize - SizeX) * 0.5, 50,"Integrity:", NameFont, NameColor);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
simulated function PostBeginPlay()
|
|
{
|
|
Super.PostBeginPlay();
|
|
bNoTarget = true;
|
|
if( Level.NetMode==NM_DedicatedServer )
|
|
Return;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
skins(0)=Combiner'KF_Weapons_Trip_T.equipment.welder_cmb'
|
|
skins(1)=Shader'KillingFloorWeapons.Welder.FlameShader'
|
|
//skins(2)=Combiner'KF_Weapons_Trip_T.hands.hands_1stP_military_cmb';
|
|
|
|
AmmoRegenRate=40.000000
|
|
ScriptedScreenBack=FinalBlend'KillingFloorWeapons.Welder.WelderWindowFinal'
|
|
NameFont=Font'ROFonts.ROBtsrmVr24'//Font'UT2003Fonts.FontLarge' KFTODO: Replace this
|
|
SmallNameFont=Font'ROFonts.ROBtsrmVr12'//Font'UT2003Fonts.FontSmall' KFTODO: Replace this
|
|
weaponRange=90.000000
|
|
//WeaponIdleMovementAnim="IdleMoveSyringe"
|
|
Weight=0.000000
|
|
bKFNeverThrow=True
|
|
bAmmoHUDAsBar=True
|
|
FireModeClass(0)=Class'KFMod.WeldFire'
|
|
FireModeClass(1)=Class'KFMod.UnWeldFire'
|
|
AIRating=-2.000000
|
|
bMeleeWeapon=False
|
|
bShowChargingBar=True
|
|
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
|
Priority=5
|
|
InventoryGroup=5
|
|
GroupOffset=1
|
|
PickupClass=Class'KFMod.WelderPickup'
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.WelderAttachment'
|
|
IconCoords=(X1=169,Y1=39,X2=241,Y2=77)
|
|
ItemName="Welder"
|
|
Mesh=SkeletalMesh'KF_Weapons_Trip.Welder_Trip'
|
|
AmbientGlow=2
|
|
BackColor=(R=128,B=128,G=128,A=255)
|
|
|
|
DisplayFOV=75.000000
|
|
StandardDisplayFOV=75.0
|
|
|
|
HudImage=texture'KillingFloorHUD.WeaponSelect.Welder_unselected'
|
|
SelectedHudImage=texture'KillingFloorHUD.WeaponSelect.Welder'
|
|
|
|
WeldingMessageDelay=10.0
|
|
bConsumesPhysicalAmmo=false
|
|
SleeveNum=2
|
|
}
|