1
0
KF2-Dev-Scripts/KFGame/Classes/KFGFxMoviePlayer_PlayerInfo.uc
2020-12-13 18:01:13 +03:00

206 lines
4.6 KiB
Ucode

//=============================================================================
// KFGFxMoviePlayer_PlayerInfo
//=============================================================================
// Player health, armor etc information shown above their heads
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// - Christian "schneidzekk" Schneider
//=============================================================================
class KFGFxMoviePlayer_PlayerInfo extends GFxMoviePlayer;
var KFPawn_Human MyKFPH;
var KFPlayerReplicationInfo MyKFPRI;
var GFxObject PartyMemberHudMC;
var GFxObject PlayerName;
var GFxObject IconMC;
var GFxObject Icon;
var GFxObject ArmorMeter;
var GFxObject HealthMeter;
var int LastPerkIndex;
var float LastHealthPct;
var int LastArmor;
var string LastPlayerName;
var bool bVisible;
var vector2d MovieSize;
var vector ScreenPosition;
function Init(optional LocalPlayer LocPlay)
{
super.Init(LocPlay);
SetViewScaleMode(SM_NoScale);
SetAlignment(Align_TopLeft);
LastPerkIndex = INDEX_NONE;
LastHealthPct = INDEX_NONE;
LastArmor = INDEX_NONE;
LastPlayerName = "";
}
/** Ties the GFxClikWidget variables to the .swf components and handles events */
event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
{
switch(WidgetName)
{
case ('partyMemberHud'):
if ( PartyMemberHudMC == none )
{
PartyMemberHudMC = Widget;
// default PartyMemberHudMC to invisible and make visible once it is in view
PartyMemberHudMC.SetVisible(false);
PlayerName = PartyMemberHudMC.GetObject("txtName");
}
break;
case ('iconSection'):
if ( IconMC == none )
{
IconMC = Widget;
Icon = IconMC.GetObject("icon");
}
break;
case ('armorMeterMC'):
if ( ArmorMeter == none )
{
ArmorMeter = Widget;
}
break;
case ('healthMeterMC'):
if ( HealthMeter == none )
{
HealthMeter = Widget;
}
break;
}
return true;
}
function TickHud(float DeltaTime)
{
if ( bVisible )
{
if ( MyKFPRI == none )
{
MyKFPRI = KFPlayerReplicationInfo(MyKFPH.PlayerReplicationInfo);
}
// SetPosition is an expensive call that takes up about 10 ms per tick
PartyMemberHudMC.SetPosition(ScreenPosition.X - GetMovieWitdth() / 2, ScreenPosition.Y - GetMovieHeight() / 2);
UpdatePerk();
UpdateHealth();
UpdateArmor();
UpdatePlayerName();
}
}
function SetVisible(bool bNewVisible)
{
if ( bVisible != bNewVisible )
{
PartyMemberHudMC.SetVisible(bNewVisible);
bVisible = bNewVisible;
}
}
function float GetMovieWitdth()
{
return MovieSize.X;
}
function float GetMovieHeight()
{
return MovieSize.Y;
}
function UpdatePerk()
{
if ( MyKFPRI != none )
{
Icon.SetString("source", "img://" $MyKFPRI.CurrentPerkClass.static.GetPerkIconPath());
}
}
function UpdateHealth()
{
local float HealthPct;
if ( MyKFPH == none )
{
LastHealthPct = 0;
IconMC.GotoAndStopI(100);
HealthMeter.GotoAndStopI(100);
return;
}
HealthPct = (100.f / float(MyKFPH.HealthMax)) * MyKFPH.Health;
if ( LastHealthPct != HealthPct )
{
LastHealthPct = HealthPct;
// The hud uses frame 1 as full health
IconMC.GotoAndStopI(Max(100 - LastHealthPct, 1));
HealthMeter.GotoAndStopI(Min(LastHealthPct, 100));
}
}
function UpdateArmor()
{
if ( MyKFPH == none )
{
LastArmor = 0;
ArmorMeter.GotoAndStopI(100);
}
else if ( LastArmor != MyKFPH.Armor )
{
LastArmor = MyKFPH.Armor;
// The hud uses frame 1 as full armor
ArmorMeter.GotoAndStopI(Min(LastArmor, 100));
}
}
function UpdatePlayerName()
{
if ( MyKFPRI == none )
{
LastPlayerName = "";
PlayerName.SetText("");
}
else if ( LastPlayerName != MyKFPRI.PlayerName )
{
LastPlayerName = MyKFPRI.PlayerName;
PlayerName.SetText(MyKFPRI.PlayerName);
}
}
function SetPlayerPawn(KFPawn_Human KFPH)
{
MyKFPH = KFPH;
MyKFPRI = KFPlayerReplicationInfo(KFPH.PlayerReplicationInfo);
}
/**
*Callbacks from AS
*/
function Callback_MovieSize(int MovieWith, int MovieHeight)
{
MovieSize.X = MovieWith;
MovieSize.Y = MovieHeight;
}
defaultproperties
{
Priority=0
bAutoPlay=true
//MovieInfo=SwfMovie'PartyMemberHUD_UI.PartyMemberHUD_SWF' swf not in use
bAllowFocus=false
bAllowInput=false
bDisplayWithHudOff=false
}