382 lines
11 KiB
Ucode
382 lines
11 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
*/
|
|
|
|
class MobileHUDExt extends MobileHUD native;
|
|
|
|
/** Texture to use for 'tap-to-move' screen space effect */
|
|
var Texture2D TapToMoveTexture;
|
|
|
|
/** Last time that we were asked to draw the tap to move effect */
|
|
var float LastTapToMoveEffectTime;
|
|
var Vector2D TapToMoveEffectPos;
|
|
|
|
var bool bFlashJoysticks;
|
|
var float FlashTime;
|
|
|
|
/** The font to use for displaying benchmark results */
|
|
var font BenchmarkFont;
|
|
|
|
/** Background texture for displaying the benchmark results */
|
|
var Texture2D BenchmarkBackground;
|
|
var TextureUVs BenchmarkBackgroundUVs;
|
|
|
|
var float BenchmarkResolutionScale;
|
|
var int BenchmarkFeatureLevel;
|
|
|
|
native function UpdateBenchmarkInformation();
|
|
|
|
/** Starts drawing a transparent circle at the specified location for a brief moment (with animation) */
|
|
function StartTapToMoveEffect( float X, float Y )
|
|
{
|
|
// Store time that we were asked to draw the effect. This effectively "turns on" the effect.
|
|
LastTapToMoveEffectTime = WorldInfo.RealTimeSeconds;
|
|
TapToMoveEffectPos.X = X;
|
|
TapToMoveEffectPos.Y = Y;
|
|
}
|
|
|
|
|
|
/** Draws the tap to move effect if we need to */
|
|
function ConditionallyDrawTapToMoveEffect()
|
|
{
|
|
local float EffectDuration;
|
|
local float EffectSize;
|
|
local float EffectOpacity;
|
|
local float FadeInPercent;
|
|
local float FadeOutPercent;
|
|
|
|
local float EffectProgress;
|
|
local float AnimatedSize;
|
|
local float AnimatedOpacity;
|
|
|
|
// How long the effect should last
|
|
EffectDuration = 0.25;
|
|
FadeInPercent = 0.1;
|
|
FadeOutPercent = 0.6;
|
|
|
|
// How big the effect should be
|
|
EffectSize = 64.0;
|
|
|
|
// Maximum opacity of the effect
|
|
EffectOpacity = 0.3;
|
|
|
|
// Is it time to draw the effect?
|
|
if( WorldInfo.RealTimeSeconds - LastTapToMoveEffectTime < EffectDuration )
|
|
{
|
|
EffectProgress = FClamp( ( WorldInfo.RealTimeSeconds - LastTapToMoveEffectTime ) / EffectDuration, 0.0, 1.0 );
|
|
EffectProgress = FInterpEaseIn( 0.0, 1.0, EffectProgress, 1.5 );
|
|
|
|
AnimatedSize = EffectSize * 0.15 + EffectSize * EffectProgress * 0.85;
|
|
|
|
AnimatedOpacity = EffectOpacity;
|
|
|
|
// Fade in over the first bit of the effect
|
|
if( EffectProgress < FadeInPercent )
|
|
{
|
|
AnimatedOpacity *= ( EffectProgress / FadeInPercent );
|
|
}
|
|
|
|
// Fade out over the tail end of the effect
|
|
if( EffectProgress > ( 1.0 - FadeOutPercent ) )
|
|
{
|
|
AnimatedOpacity *= 1.0 - ( EffectProgress - ( 1.0 - FadeOutPercent ) ) / FadeOutPercent;
|
|
}
|
|
|
|
|
|
Canvas.SetPos( TapToMoveEffectPos.X - AnimatedSize * 0.5, TapToMoveEffectPos.Y - AnimatedSize * 0.5 );
|
|
Canvas.SetDrawColor( 255, 255, 255, AnimatedOpacity * 255.0 );
|
|
Canvas.DrawTile( TapToMoveTexture, AnimatedSize, AnimatedSize, 0.0, 0.0, TapToMoveTexture.GetSurfaceWidth(), TapToMoveTexture.GetSurfaceHeight() );
|
|
}
|
|
}
|
|
|
|
function bool ShowMobileHud()
|
|
{
|
|
// Show the mobile HUD if we are allowed to and if we don't have the HUD disabled via cinematic mode.
|
|
return bShowMobileHud && bShowHud;
|
|
}
|
|
|
|
function PostRender()
|
|
{
|
|
local CastlePC PC;
|
|
|
|
Instigator = PlayerOwner.Pawn;
|
|
|
|
super.PostRender();
|
|
|
|
PC = CastlePC(PlayerOwner);
|
|
|
|
if (PC.bIsInAttractMode)
|
|
{
|
|
PostRenderAttractMode();
|
|
}
|
|
|
|
// Display benchmark information
|
|
if (PC.bIsInBenchmarkMode)
|
|
{
|
|
// If the benchmark loop has completed, then display the results of the benchmark loop
|
|
if( PC.bBenchmarkLoopCompleted )
|
|
{
|
|
PostRenderBenchmarkModeCompleted();
|
|
}
|
|
else
|
|
{
|
|
PostRenderBenchmarkModeRunning();
|
|
}
|
|
}
|
|
|
|
if ( bShowHud && !PC.bIsInAttractMode)
|
|
return;
|
|
|
|
// Draw the tap to move HUD animation, if we need to
|
|
ConditionallyDrawTapToMoveEffect();
|
|
|
|
}
|
|
|
|
function PostRenderAttractMode()
|
|
{
|
|
local float Scale,w,h;
|
|
|
|
Scale = Canvas.ClipX / 960;
|
|
w = 124 * Scale;
|
|
h = w * 1.193548387096774;
|
|
Canvas.SetPos(Canvas.ClipX - 192*Scale, Canvas.ClipY - 171*Scale);
|
|
Canvas.DrawColor = WhiteColor;
|
|
Canvas.DrawTile(Texture2D'CastleUI.menus.T_CastleMenu2',w,h,0,1518,248,296);
|
|
|
|
}
|
|
|
|
function PostRenderBenchmarkModeCompleted()
|
|
{
|
|
local CastlePC PC;
|
|
local int fps, ScreenCenterX, BGTop, BGWidth, BGHeight, ScaledWindowWidth, ScaledWindowHeight;
|
|
local float StringWidth, StringHeight, TextScale;
|
|
local string PerformanceString;
|
|
|
|
UpdateBenchmarkInformation();
|
|
|
|
Canvas.Font = BenchmarkFont;
|
|
|
|
PC = CastlePC(PlayerOwner);
|
|
TextScale = 1.5f;
|
|
|
|
ScreenCenterX = PC.ViewportSize.X / 2;
|
|
BGTop = PC.ViewportSize.Y * 0.28;
|
|
BGWidth = PC.ViewportSize.Y * 1.0;
|
|
BGHeight = PC.ViewportSize.Y * 0.55;
|
|
|
|
// Draw background
|
|
Canvas.SetPos(ScreenCenterX - BGWidth/2, BGTop);
|
|
Canvas.DrawTile(BenchmarkBackground, BGWidth, BGHeight, BenchmarkBackgroundUVs.U, BenchmarkBackgroundUVs.V, BenchmarkBackgroundUVs.UL, BenchmarkBackgroundUVs.VL);
|
|
|
|
// Draw benchmark results header
|
|
Canvas.DrawColor = WhiteColor;
|
|
Canvas.StrLen( "Benchmark Results", StringWidth, StringHeight );
|
|
Canvas.SetPos( ScreenCenterX - StringWidth/2 * TextScale, BGTop + BGHeight * 0.1 );
|
|
Canvas.DrawText( "Benchmark Results", true, TextScale, TextScale );
|
|
|
|
// Draw result fields here
|
|
fps = 10 * PC.BenchmarkNumFrames / PC.BenchmarkElapsedTime;
|
|
Canvas.StrLen( "Average FPS: " $ (fps/10) $ "." $ (fps%10), StringWidth, StringHeight );
|
|
Canvas.SetPos( ScreenCenterX - StringWidth/2 * TextScale, BGTop + (BGHeight * 0.25) );
|
|
Canvas.DrawText( "Average FPS: " $ (fps/10) $ "." $ (fps%10), false, TextScale, TextScale );
|
|
|
|
// Draw benchmark information
|
|
ScaledWindowWidth = SizeX * BenchmarkResolutionScale;
|
|
ScaledWindowHeight = SizeY * BenchmarkResolutionScale;
|
|
Canvas.StrLen( "Resolution: " $ ScaledWindowWidth $ "x" $ ScaledWindowHeight, StringWidth, StringHeight );
|
|
Canvas.SetPos( ScreenCenterX - StringWidth/2 * TextScale, BGTop + (BGHeight * 0.4) );
|
|
Canvas.DrawText( "Resolution: " $ ScaledWindowWidth $ "x" $ ScaledWindowHeight, false, TextScale, TextScale );
|
|
|
|
Canvas.StrLen( "Performance Level: ", StringWidth, StringHeight );
|
|
Canvas.SetPos( ScreenCenterX - StringWidth/2 * TextScale, BGTop + (BGHeight * 0.55) );
|
|
Canvas.DrawText( "Performance Level: ", false, TextScale, TextScale );
|
|
|
|
switch (BenchmarkFeatureLevel)
|
|
{
|
|
case 1:
|
|
PerformanceString = "High Quality";
|
|
break;
|
|
case 0:
|
|
default:
|
|
PerformanceString = "High Performance";
|
|
break;
|
|
}
|
|
|
|
Canvas.StrLen( PerformanceString, StringWidth, StringHeight );
|
|
Canvas.SetPos( ScreenCenterX - StringWidth/2 * TextScale, BGTop + (BGHeight * 0.7) );
|
|
Canvas.DrawText( PerformanceString, false, TextScale, TextScale );
|
|
}
|
|
|
|
function PostRenderBenchmarkModeRunning()
|
|
{
|
|
local CastlePC PC;
|
|
local float Scale;
|
|
local int fps, ScreenCenterX;
|
|
local float StringWidth, StringHeight, MaxFPSWidth, FpsY;
|
|
|
|
Canvas.Font = BenchmarkFont;
|
|
|
|
PC = CastlePC(PlayerOwner);
|
|
Scale = PC.PauseMenu.Scale;
|
|
|
|
ScreenCenterX = PC.ViewportSize.X / 2;
|
|
|
|
// Draw the frame rate of the current frame
|
|
fps = 1 / WorldInfo.DeltaSeconds;
|
|
|
|
|
|
Canvas.StrLen( "Benchmarking...", StringWidth, StringHeight );
|
|
|
|
Canvas.SetPos( ScreenCenterX - (StringWidth / 2), PC.PauseMenu.Height );
|
|
Canvas.DrawColor = WhiteColor;
|
|
Canvas.DrawText( "Benchmarking...", false );
|
|
|
|
// Draw fps information
|
|
Canvas.StrLen( "100", MaxFPSWidth, StringHeight );
|
|
Canvas.StrLen( fps, StringWidth, StringHeight );
|
|
|
|
FpsY = PC.ViewportSize.Y - StringHeight * Scale - 20 * Scale;
|
|
Canvas.SetPos( 30 * Scale - StringWidth + MaxFPSWidth, FpsY );
|
|
Canvas.DrawText( fps, false );
|
|
|
|
Canvas.SetPos( 45 * Scale + MaxFPSWidth, FpsY );
|
|
Canvas.DrawText( "FPS", false );
|
|
}
|
|
|
|
function DrawMobileZone_Slider(MobileInputZone Zone)
|
|
{
|
|
local TextureUVs UVs;
|
|
local Texture2D Tex;
|
|
local float Ofs,Scale;
|
|
|
|
// First, look up the Texture
|
|
|
|
Tex = SliderImages[int(Zone.SlideType)];
|
|
UVs = SliderUVs[int(Zone.SlideType)];
|
|
|
|
// Now, figure out where we have to draw.
|
|
|
|
|
|
Scale = CastlePC(PlayerOwner).PauseMenu.Scale;
|
|
Ofs = 16 *Scale;
|
|
|
|
Canvas.SetPos(Zone.CurrentLocation.X, Zone.CurrentLocation.Y-Ofs);
|
|
Canvas.DrawTile(Tex,Zone.ActiveSizeX, Zone.ActiveSizeY, UVs.U, UVs.V, UVs.UL, UVs.VL);
|
|
}
|
|
|
|
function DrawMobileZone_Joystick(MobileInputZone Zone)
|
|
{
|
|
local int X, Y, Width, Height;
|
|
local Color LineColor;
|
|
local float ClampedX, ClampedY, Scale;
|
|
local Color TempColor;
|
|
local float FlashScale;
|
|
|
|
|
|
if (bFlashJoysticks)
|
|
{
|
|
FlashScale = FInterpEaseOut(3.0,1.0,FlashTime/0.75,2);
|
|
FlashTime += RenderDelta;
|
|
if (FlashTime > 0.75)
|
|
{
|
|
bFlashJoysticks = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FlashScale = 1.0;
|
|
}
|
|
|
|
if (JoystickBackground != none)
|
|
{
|
|
Width = Zone.ActiveSizeX * FlashScale;
|
|
Height = Zone.ActiveSizeY * FlashScale;
|
|
|
|
X = Zone.CurrentCenter.X - (Width /2);
|
|
Y = Zone.CurrentCenter.Y - (Height /2);
|
|
|
|
Canvas.SetPos(X,Y);
|
|
Canvas.DrawTile(JoystickBackground, Width, Height, JoystickBackgroundUVs.U, JoystickBackgroundUVs.V, JoystickBackgroundUVs.UL, JoystickBackgroundUVs.VL);
|
|
}
|
|
|
|
// Draw the Hat
|
|
|
|
if (JoystickHat != none)
|
|
{
|
|
// Compute X and Y clamped to the size of the zone for the joystick
|
|
ClampedX = Zone.CurrentLocation.X - Zone.CurrentCenter.X;
|
|
ClampedY = Zone.CurrentLocation.Y - Zone.CurrentCenter.Y;
|
|
Scale = 1.0f;
|
|
if ( ClampedX != 0 || ClampedY != 0 )
|
|
{
|
|
Scale = Min( Zone.ActiveSizeX, Zone.ActiveSizeY ) / ( 2.0 * Sqrt(ClampedX * ClampedX + ClampedY * ClampedY) );
|
|
Scale = FMin( 1.0, Scale );
|
|
}
|
|
ClampedX = ClampedX * Scale + Zone.CurrentCenter.X;
|
|
ClampedY = ClampedY * Scale + Zone.CurrentCenter.Y;
|
|
|
|
if (Zone.bRenderGuides)
|
|
{
|
|
TempColor = Canvas.DrawColor;
|
|
LineColor.R = 128;
|
|
LineColor.G = 128;
|
|
LineColor.B = 128;
|
|
LineColor.A = 255;
|
|
Canvas.Draw2DLine(Zone.CurrentCenter.X, Zone.CurrentCenter.Y, ClampedX, ClampedY, LineColor);
|
|
Canvas.DrawColor = TempColor;
|
|
|
|
}
|
|
|
|
// The size of the indicator will be a fraction of the background's total size
|
|
Width = Zone.ActiveSizeX * 0.65 * FlashScale;
|
|
Height = Zone.ActiveSizeY * 0.65 * FlashScale;
|
|
|
|
Canvas.SetPos( ClampedX - Width / 2, ClampedY - Height / 2);
|
|
Canvas.DrawTile(JoystickHat, Width, Height, JoystickHatUVs.U, JoystickHatUVs.V, JoystickHatUVs.UL, JoystickHatUVs.VL);
|
|
}
|
|
}
|
|
|
|
function FlashSticks()
|
|
{
|
|
bFlashJoysticks = true;
|
|
FlashTime = 0;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
JoystickBackground=Texture2D'MobileResources.T_MobileControls_texture'
|
|
JoystickBackgroundUVs=(U=0,V=0,UL=126,VL=126)
|
|
JoystickHat=Texture2D'MobileResources.T_MobileControls_texture'
|
|
JoystickHatUVs=(U=128,V=0,UL=78,VL=78)
|
|
|
|
ButtonImages(0)=Texture2D'MobileResources.HUD.MobileHUDButton3'
|
|
ButtonImages(1)=Texture2D'MobileResources.HUD.MobileHUDButton3'
|
|
ButtonUVs(0)=(U=0,V=0,UL=32,VL=32)
|
|
ButtonUVs(1)=(U=0,V=0,UL=32,VL=32)
|
|
|
|
TrackballBackground=none
|
|
TrackballTouchIndicator=Texture2D'MobileResources.T_MobileControls_texture'
|
|
TrackballTouchIndicatorUVs=(U=160,V=0,UL=92,VL=92)
|
|
|
|
ButtonFont = Font'EngineFonts.SmallFont'
|
|
ButtonCaptionColor=(R=0,G=0,B=0,A=255);
|
|
|
|
SliderImages(0)=Texture2D'CastleUI.menus.T_CastleMenu2'
|
|
SliderImages(1)=Texture2D'CastleUI.menus.T_CastleMenu2'
|
|
SliderImages(2)=Texture2D'CastleUI.menus.T_CastleMenu2'
|
|
SliderImages(3)=Texture2D'CastleUI.menus.T_CastleMenu2'
|
|
SliderUVs(0)=(U=1282,V=440,UL=322,VL=150)
|
|
SliderUVs(1)=(U=1282,V=440,UL=322,VL=150)
|
|
SliderUVs(2)=(U=1282,V=440,UL=322,VL=150)
|
|
SliderUVs(3)=(U=1282,V=440,UL=322,VL=150)
|
|
|
|
LastTapToMoveEffectTime=-99999.0
|
|
|
|
TapToMoveTexture=Texture2D'CastleHUD.HUD_TouchToMove'
|
|
|
|
BenchmarkFont=Font'UI_Fonts.MultiFonts.MF_LargeFont'
|
|
|
|
BenchmarkBackground=Texture2D'CastleUIExt.T_CastleMenu2Ext'
|
|
BenchmarkBackgroundUVs=(U=19,V=335,UL=996,VL=322)
|
|
}
|