243 lines
5.4 KiB
Ucode
243 lines
5.4 KiB
Ucode
//=============================================================================
|
|
// KFGFxWidget_BossHealthBar
|
|
//=============================================================================
|
|
//
|
|
//=============================================================================
|
|
// Killing Floor 2
|
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
|
// - Zane Gholson 04/28/2016
|
|
//=============================================================================
|
|
|
|
class KFGFxWidget_BossHealthBar extends GFxObject;
|
|
|
|
var GFxObject bossNameTextField;
|
|
|
|
var KFInterface_MonsterBoss BossPawn;
|
|
var KFPawn_Scripted EscortPawn;
|
|
var float UpdateTickTime;
|
|
var float LastUpdateTime;
|
|
var array <int>BattlePhaseColors;
|
|
var KFPlayerController KFPC;
|
|
var bool bLastHideValue;
|
|
|
|
var byte LastState;
|
|
|
|
var string BossIconPath;
|
|
var string EscortIconPath;
|
|
|
|
struct SCompressedArmorInfo
|
|
{
|
|
var float Percentage;
|
|
var Texture2D IconTexture;
|
|
};
|
|
|
|
function InitializeHUD()
|
|
{
|
|
KFPC = KFPlayerController(GetPC());
|
|
bossNameTextField = GetObject("bossnameText");
|
|
}
|
|
|
|
function TickHud(float DeltaTime)
|
|
{
|
|
if(KFPC.bHideBossHealthBar != bLastHideValue)
|
|
{
|
|
bLastHideValue = KFPC.bHideBossHealthBar;
|
|
// hide boss health bar shouldn't affect the escort pawn
|
|
if(KFPC.bHideBossHealthBar && EscortPawn == none)
|
|
{
|
|
SetVisible(false);
|
|
}
|
|
else if(BossPawn != none || EscortPawn != none)
|
|
{
|
|
SetVisible(true);
|
|
}
|
|
}
|
|
|
|
// hide boss health bar shouldn't affect the escort pawn
|
|
if(KFPC.bHideBossHealthBar && EscortPawn == none)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(BossPawn != none)
|
|
{
|
|
if(KFPC != none &&
|
|
KFPC.WorldInfo.TimeSeconds - LastUpdateTime > UpdateTickTime)
|
|
{
|
|
UpdateBossHealth();
|
|
}
|
|
}
|
|
if (EscortPawn != none)
|
|
{
|
|
if (KFPC != none &&
|
|
KFPC.WorldInfo.TimeSeconds - LastUpdateTime > UpdateTickTime)
|
|
{
|
|
UpdateEscortPawnHealth();
|
|
}
|
|
}
|
|
}
|
|
|
|
function SetEscortPawn(KFPawn_Scripted NewPawn)
|
|
{
|
|
local string BossNameText;
|
|
|
|
if (NewPawn == none)
|
|
{
|
|
return;
|
|
}
|
|
EscortPawn = NewPawn;
|
|
BossNameText = EscortPawn.GetLocalizedName();
|
|
|
|
SetBossName(BossNameText);
|
|
UpdateEscortPawnHealth();
|
|
SetVisible(true);
|
|
SetEscortIcon();
|
|
}
|
|
|
|
function SetBossPawn(KFInterface_MonsterBoss NewBoss)
|
|
{
|
|
local string BossNameText;
|
|
|
|
if(NewBoss == none)
|
|
{
|
|
return;
|
|
}
|
|
BossPawn = NewBoss;
|
|
BossNameText = BossPawn.GetMonsterPawn().static.GetLocalizedName();
|
|
if(BossPawn.GetMonsterPawn().IsHumanControlled())
|
|
{
|
|
BossNameText = BossNameText $ "(" $ BossPawn.GetMonsterPawn().Controller.PlayerReplicationInfo $ ")";
|
|
}
|
|
|
|
SetBossName(BossNameText);
|
|
if(KFPC.bHideBossHealthBar)
|
|
{
|
|
return;
|
|
}
|
|
UpdateBossHealth();
|
|
UpdateBossBattlePhase(1);
|
|
SetBossIcon();
|
|
}
|
|
|
|
simulated function Deactivate()
|
|
{
|
|
EscortPawn = none;
|
|
BossPawn = none;
|
|
SetVisible(false);
|
|
}
|
|
|
|
function OnNamePlateHidden()
|
|
{
|
|
if(KFPC.bHideBossHealthBar && EscortPawn == none)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(BossPawn != none)
|
|
{
|
|
SetVisible(true);
|
|
}
|
|
else
|
|
{
|
|
SetVisible(false);
|
|
}
|
|
}
|
|
|
|
function SetBossName(string BossName)
|
|
{
|
|
if(bossNameTextField != none)
|
|
{
|
|
bossNameTextField.SetText(BossName);
|
|
}
|
|
}
|
|
|
|
simulated function SetBossIcon()
|
|
{
|
|
if (BossPawn != none)
|
|
{
|
|
SetString("iconPath", BossPawn.GetIconPath());
|
|
}
|
|
}
|
|
|
|
simulated function SetEscortIcon()
|
|
{
|
|
if (EscortPawn != none)
|
|
{
|
|
SetString("iconPath", EscortPawn.GetIconPath());
|
|
}
|
|
}
|
|
|
|
function UpdateEscortPawnHealth()
|
|
{
|
|
if (EscortPawn.CurrentState != LastState)
|
|
{
|
|
LastState = EscortPawn.CurrentState;
|
|
UpdateEscortPawnStateColor(EscortPawn.ScriptedCharArch.States[EscortPawn.CurrentState].PawnHealthBarColor);
|
|
}
|
|
SetFloat("currentHealthPercentValue", EscortPawn.GetHealthPercent());
|
|
}
|
|
|
|
function UpdateEscortPawnStateColor(Color PawnColor)
|
|
{
|
|
// RBG to Hex
|
|
SetInt("currentBattlePhaseColor", PawnColor.R << 16 | PawnColor.G << 8 | PawnColor.B);
|
|
}
|
|
|
|
function UpdateBossHealth()
|
|
{
|
|
SetFloat( "currentHealthPercentValue", BossPawn.GetHealthPercent() );
|
|
}
|
|
|
|
function UpdateBossBattlePhase(int BattlePhase)
|
|
{
|
|
SetInt( "currentBattlePhaseColor", BattlePhaseColors[Max(BattlePhase - 1, 0)] );
|
|
}
|
|
|
|
function UpdateBossShield(float NewShieldPercect)
|
|
{
|
|
SetFloat( "currentShieldPercecntValue",NewShieldPercect);
|
|
}
|
|
|
|
function UpdateArmorUI(const out SCompressedArmorInfo ArmorValues[3])
|
|
{
|
|
local int i;
|
|
local GFxObject DataProvider, DataObject;
|
|
|
|
DataProvider = CreateArray();
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
if (ArmorValues[i].IconTexture != none)
|
|
{
|
|
DataObject = CreateObject("Object");
|
|
DataObject.SetFloat("armorPercent", ArmorValues[i].Percentage);
|
|
if (ArmorValues[i].IconTexture != none)
|
|
{
|
|
DataObject.SetString("iconSource", "img://"$PathName(ArmorValues[i].IconTexture));
|
|
}
|
|
DataProvider.SetElementObject(i, DataObject);
|
|
}
|
|
}
|
|
|
|
SetObject("armorData", DataProvider);
|
|
}
|
|
|
|
function RemoveArmorUI()
|
|
{
|
|
local GFxObject DataProvider;
|
|
DataProvider = CreateArray();
|
|
DataProvider.SetVisible(false);
|
|
SetObject("armorData", DataProvider);
|
|
}
|
|
|
|
DefaultProperties
|
|
{
|
|
UpdateTickTime=0.1f
|
|
BattlePhaseColors.Add(0x00B862);//green
|
|
BattlePhaseColors.Add(0xFFB000);//yellow
|
|
BattlePhaseColors.Add(0xFF6000);//orange
|
|
BattlePhaseColors.Add(0xAD1611);//red
|
|
BattlePhaseColors.Add(0x000000);//dead
|
|
|
|
LastState=255
|
|
} |