225 lines
6.7 KiB
Ucode
225 lines
6.7 KiB
Ucode
class ScrnAchievementEarnedMsg extends CriticalEventPlus
|
|
abstract;
|
|
|
|
var(Message) localized string EarnedString, InProgressString;
|
|
var texture BackGround;
|
|
var texture ProgressBarBackground;
|
|
var texture ProgressBarForeground;
|
|
|
|
var byte Align; // 0 - left, 1 - center, 2 - right
|
|
|
|
|
|
static function string GetString(
|
|
optional int Switch,
|
|
optional PlayerReplicationInfo RelatedPRI_1,
|
|
optional PlayerReplicationInfo RelatedPRI_2,
|
|
optional Object OptionalObject
|
|
)
|
|
{
|
|
local ScrnAchievements AchHandler;
|
|
local int AchIndex;
|
|
|
|
if ( !default.bComplexString ) {
|
|
AchHandler = ScrnAchievements(OptionalObject);
|
|
AchIndex = Switch;
|
|
if ( AchHandler == none || !AchHandler.IsUnlocked(AchIndex) )
|
|
return "";
|
|
|
|
return default.EarnedString $ ": " $ AchHandler.AchDefs[AchIndex].DisplayName;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
|
|
|
|
static function RenderComplexMessage(
|
|
Canvas C,
|
|
out float XL,
|
|
out float YL,
|
|
optional String MessageString,
|
|
optional int Switch,
|
|
optional PlayerReplicationInfo RelatedPRI_1,
|
|
optional PlayerReplicationInfo RelatedPRI_2,
|
|
optional Object OptionalObject // must be ScrnAchievementInfo
|
|
)
|
|
{
|
|
local float X,Y, MaxWidth, MaxHeight, TextX, TextY, IconY;
|
|
local ScrnPlayerController P;
|
|
local ScrnAchievements AchHandler;
|
|
local int AchIndex;
|
|
local bool bUnlocked;
|
|
local float TextWidth, TextHeight;
|
|
local float OrgX, ClipX; //dunno if it should be restored, but just in case
|
|
local byte Style;
|
|
local float BarHeight, BarWidth, BarTop, BarLeft;
|
|
local int CurProg, MaxProg;
|
|
|
|
// don't draw a message if it is fully transparent
|
|
if ( c.DrawColor.A < 10 )
|
|
return;
|
|
|
|
// log("RenderComplexMessage: "
|
|
// @ "RelatedPRI_1="$RelatedPRI_1
|
|
// @ "OptionalObject="$OptionalObject
|
|
// , 'ScrnBalance');
|
|
|
|
|
|
if ( RelatedPRI_1 != none )
|
|
P = ScrnPlayerController(RelatedPRI_1.Owner);
|
|
AchHandler = ScrnAchievements(OptionalObject);
|
|
AchIndex = Switch;
|
|
|
|
if ( P == none || AchHandler == none || AchHandler.AchDefs[AchIndex].CurrentProgress <= 0 )
|
|
return;
|
|
|
|
CurProg = AchHandler.AchDefs[AchIndex].CurrentProgress;
|
|
MaxProg = AchHandler.AchDefs[AchIndex].MaxProgress;
|
|
bUnlocked = CurProg >= MaxProg;
|
|
|
|
ClipX = c.ClipX;
|
|
OrgX = c.OrgX;
|
|
Style = C.Style;
|
|
|
|
//test max width
|
|
C.Font = P.myHUD.LoadFontStatic(6);
|
|
C.StrLen( AchHandler.AchDefs[AchIndex].DisplayName, TextWidth, TextHeight);
|
|
|
|
MaxWidth = max(256, TextWidth + 104);
|
|
MaxHeight = 120;
|
|
|
|
BarHeight = 16;
|
|
if ( !bUnlocked )
|
|
MaxHeight += BarHeight;
|
|
|
|
//X = C.CurX;
|
|
switch ( default.Align ) {
|
|
case 0: X = C.OrgX; break;
|
|
case 1: X = (c.ClipX - C.OrgX - MaxWidth)/2; break;
|
|
default: X = c.ClipX - MaxWidth;
|
|
}
|
|
Y = C.ClipY - MaxHeight;
|
|
|
|
//background
|
|
C.SetPos(X, Y);
|
|
C.DrawTileStretched(default.BackGround, MaxWidth, MaxHeight);
|
|
|
|
c.OrgX = X;
|
|
c.ClipX = MaxWidth - 8;
|
|
|
|
// achievement earnied title
|
|
if ( bUnlocked )
|
|
MessageString = default.EarnedString;
|
|
else
|
|
MessageString = default.InProgressString;
|
|
|
|
C.Font = P.myHUD.LoadFontStatic(7);
|
|
C.SetDrawColor(127, 127, 127, c.DrawColor.A);
|
|
C.StrLen(MessageString, TextWidth, TextHeight);
|
|
C.SetPos((MaxWidth - TextWidth)/2, Y + 7);
|
|
C.DrawTextClipped(MessageString);
|
|
|
|
// PROGRESS BAR
|
|
if ( !bUnlocked ) {
|
|
// if not unlocked, draw a progress bar
|
|
BarWidth = c.ClipX - 5;
|
|
BarLeft = X + 6;
|
|
BarTop = c.ClipY - BarHeight - 6;
|
|
|
|
C.Style = ERenderStyle.STY_Alpha;
|
|
C.SetDrawColor(255, 255, 255, c.DrawColor.A);
|
|
C.SetPos(BarLeft, BarTop); //seems like DrawTileStretched doesn't use clip and org values
|
|
C.DrawTileStretched(default.ProgressBarBackground, BarWidth, BarHeight);
|
|
|
|
C.SetPos(BarLeft+2, BarTop+2);
|
|
C.DrawTileStretched(default.ProgressBarForeground, BarWidth * (float(CurProg) / float(MaxProg)) - 4, BarHeight-4);
|
|
C.Style = Style;
|
|
|
|
|
|
MessageString = CurProg$" / "$MaxProg;
|
|
C.SetDrawColor(92, 92, 92, c.DrawColor.A);
|
|
C.Font = P.myHUD.LoadFontStatic(7);
|
|
C.StrLen(MessageString, TextWidth, TextHeight);
|
|
C.SetPos((c.ClipX-TextWidth)/2, BarTop + (BarHeight - TextHeight)/2 );
|
|
C.DrawTextClipped(MessageString);
|
|
}
|
|
|
|
|
|
|
|
IconY = Y + 40;
|
|
TextX = 88;
|
|
TextY = IconY;
|
|
|
|
// ICON
|
|
C.SetDrawColor(255, 255, 255, c.DrawColor.A);
|
|
C.Style = ERenderStyle.STY_Alpha;
|
|
C.SetPos(16, TextY); //top align with the achievement name
|
|
C.DrawIcon(AchHandler.GetIcon(AchIndex), 1.0);
|
|
C.Style = Style;
|
|
|
|
|
|
c.OrgX += TextX;
|
|
c.ClipX -= TextX;
|
|
|
|
// achievement name
|
|
C.SetPos(0, TextY);
|
|
if ( bUnlocked )
|
|
C.SetDrawColor(50, 192, 50, c.DrawColor.A);
|
|
else
|
|
C.SetDrawColor(127, 127, 127, c.DrawColor.A);
|
|
C.Font = P.myHUD.LoadFontStatic(6);
|
|
C.StrLen(AchHandler.AchDefs[AchIndex].DisplayName, TextWidth, TextHeight);
|
|
C.DrawTextClipped(AchHandler.AchDefs[AchIndex].DisplayName);
|
|
|
|
|
|
//description
|
|
C.SetDrawColor(192, 192, 192, c.DrawColor.A);
|
|
C.SetPos(0, TextY + TextHeight*1.1);
|
|
C.Font = P.myHUD.LoadFontStatic(8);
|
|
//to do set positions
|
|
C.DrawText(AchHandler.AchDefs[AchIndex].Description);
|
|
|
|
//restore original values
|
|
c.OrgX = OrgX;
|
|
c.ClipX = ClipX;
|
|
C.Style = Style;
|
|
}
|
|
|
|
static function ClientReceive(
|
|
PlayerController P,
|
|
optional int Switch,
|
|
optional PlayerReplicationInfo RelatedPRI_1,
|
|
optional PlayerReplicationInfo RelatedPRI_2,
|
|
optional Object OptionalObject
|
|
)
|
|
{
|
|
local ScrnHUD hud;
|
|
local string s;
|
|
|
|
s = P.ConsoleCommand("get ini:Engine.Engine.ViewportManager TextureDetailWorld");
|
|
default.bComplexString = InStr(s, "Low") == -1;
|
|
|
|
Super.ClientReceive(P,Switch,RelatedPRI_1,RelatedPRI_2,OptionalObject);
|
|
|
|
hud = ScrnHUD(P.MyHUD);
|
|
if ( hud != none && hud.bCoolHud && !hud.bCoolHudLeftAlign)
|
|
default.Align = 0 ; // align left, if hud is in center
|
|
else
|
|
default.Align = 1 ; // align right
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
EarnedString="Achievement Earned"
|
|
InProgressString="Achievement Progress"
|
|
Background=Texture'KF_InterfaceArt_tex.Menu.Med_border'
|
|
ProgressBarBackground=Texture'KF_InterfaceArt_tex.Menu.Innerborder'
|
|
ProgressBarForeground=Texture'InterfaceArt_tex.Menu.progress_bar'
|
|
Align=1
|
|
bComplexString=True
|
|
Lifetime=10
|
|
DrawColor=(G=255,R=255)
|
|
PosY=0.800000
|
|
FontSize=5
|
|
}
|