haxis/Source/UnrealProject/GUI/Menu/SplashScreenItem.cpp

105 lines
2.0 KiB
C++

// Project Lab - NHTV Igad
#include "UnrealProject.h"
#include "SplashScreenItem.h"
#include "MediaTexture.h"
USplashScreenItem::USplashScreenItem(const FObjectInitializer& init)
: Super(init)
{
duration = 2.0f;
fadeDuration = 0.5f;
m_lifetime = 0.0f;
fadeEnabled = true;
}
void USplashScreenItem::NativeConstruct()
{
if(duration <= 0.0f)
{
GWWARNING(L"Splash screen duration is zero! " + GetName());
duration = 1.0f;
}
if(fadeDuration * 2.0f > duration)
{
GWWARNING(L"Splash screen fade time is greater than duration! " + GetName());
fadeDuration = duration * 0.25f;
}
m_started = false;
Super::NativeConstruct();
}
void USplashScreenItem::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
if(m_started)
m_lifetime += InDeltaTime;
Super::NativeTick(MyGeometry, InDeltaTime);
}
void USplashScreenItem::OnStarted_Implementation()
{
}
void USplashScreenItem::OnEnd_Implementation()
{
}
void USplashScreenItem::Skip()
{
if((m_lifetime + fadeDuration) < duration)
{
m_lifetime = duration - fadeDuration;
}
}
void USplashScreenItem::Start()
{
if(!m_started)
{
m_started = true;
m_lifetime = 0.0f;
OnStarted();
}
}
void USplashScreenItem::End()
{
if(m_started)
{
OnEnd();
m_started = false;
}
}
FVector2D USplashScreenItem::GetMediaSize(UMediaTexture* mediaTexture) const
{
if(!mediaTexture)
return FVector2D();
return FVector2D(mediaTexture->GetSurfaceWidth(), mediaTexture->GetSurfaceHeight());
}
float USplashScreenItem::GetFade() const
{
float base = GetFadeOut();
if(m_lifetime < fadeDuration)
{
base *= m_lifetime / fadeDuration;
}
return base;
}
float USplashScreenItem::GetFadeOut() const
{
if((duration - m_lifetime) < fadeDuration)
{
return FMath::Min((duration - m_lifetime) / fadeDuration, 1.0f);
}
else
{
return 1.0f;
}
}
float USplashScreenItem::GetRate() const
{
return FMath::Clamp(m_lifetime / duration, 0.0f, 1.0f);
}