Class SS_HUDElement_BetterSubtitles extends Hat_HUDElement;

var String Text;
var Font Font;
var Vector2D Position;
var float Scale, ShadowAlpha, BorderWidth, VerticalSize, BorderQuality;
var bool Shadow;
var TextAlign Alignment;
var Color TextColor, BorderColor;

var bool bFadeOut, bShuttingDown;
var float Opacity, FadeSpeed, LifeTime;
var SS_SeqAct_SubtitleManager KismetSubtitle;

function OnOpenHUD(HUD H, optional String command)
{
    Text = command;
}

function bool Render(HUD H)
{
    local float x, y, s;

	if(!Super.Render(H)) return false;
    
    H.Canvas.SetDrawColor(TextColor.R, TextColor.G, TextColor.B, TextColor.A * Opacity);
    
    H.Canvas.Font = (Font != None ? Font : Class'Hat_FontInfo'.static.GetDefaultFont("abcdefghijkmnlopqrstuvwxyzABCDEFGHIJKMNLOPQRSTUVWXYZ"));

    x = H.Canvas.ClipX * Position.X;
    y = H.Canvas.ClipY * Position.Y;
    s = FMin(H.Canvas.ClipY,H.Canvas.ClipX)/1080.0f * Scale;

    DrawBorderedText(H.Canvas, Text, x, y, s, Shadow, Alignment, ShadowAlpha, BorderWidth, BorderColor, VerticalSize, BorderQuality);

    return true;
}

function bool Tick(HUD H, float d)
{
    if(!Super.Tick(H,d)) return false;

    if(Lifetime > 0)
    {
        LifeTime = FMax(LifeTime - d, 0.0f);
        if(LifeTime <= 0 && KismetSubtitle != None)
            KismetSubtitle.PrepareToDestroy();
    }

    if(FadeSpeed > 0)
        Opacity = FClamp(Opacity + (bFadeOut ? -1.0f : 1.0f) * (1.0f/FadeSpeed) * d, 0.0f, 1.0f);
    else
        Opacity = bFadeOut ? 0 : 1;

    if(bShuttingDown && bFadeOut && Opacity <= 0)
    {
        if(KismetSubtitle != None)
            SetTimer(H, 0.01f, false, 'OnExpiring', KismetSubtitle);
        CloseHUD(H, Class);
    }
    return true;
}

defaultproperties
{
    Font = None;
    Position = (X = 0.5f, Y = 0.8f);
    Scale = 1.0f;
    Shadow = false;
    ShadowAlpha = 0.5f;
    Alignment = TextAlign_Center;
    VerticalSize = -1;
    BorderWidth = 4;
    BorderQuality = 1;
    TextColor = (R = 255, G = 255, B = 255, A = 255);
}