//============================================================================= // KFGameViewportClient //============================================================================= // Class Description //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC // - Author 12/3/2012 //============================================================================= class KFGameViewportClient extends GameViewportClient native(UI); var array TripWireOfficialMaps; var array CommunityOfficialMaps; var LinearColor BackgroundColor; /** The message that the front ends pop up will display if there is a connection issue */ var string ErrorTitle; var string ErrorMessage; var string LastConnectionAttemptAddress; var localized array RandomLoadingStrings; var localized string OfficialCommunityString; var localized string TripWireOfficialString; var localized string CommunityCustomString; var FONT MessageFont; var float FontScale; /** Keep track of whether we have seen the Initial Interaction Screen. */ var bool bSeenIIS; var bool bNeedDisconnectMessage; var bool bNeedSignoutMessage; var bool bHandlePlayTogether; var bool bDownloadingContent; var string CurrentDownloadName; var int CurrentDownloadProgress; cpptext { virtual void ShowSpawnVolumes( ESetMode SetMode ); }; function NotifyConnectionError(EProgressMessageType MessageType, optional string Message=Localize("Errors", "ConnectionFailed", "Engine"), optional string Title=Localize("Errors", "ConnectionFailed_Title", "Engine") ) { local KFGameEngine KFGEngine; KFGEngine = KFGameEngine( Class'KFGameEngine'.static.GetEngine() ); // Don't override cached error messages until we've dealt with them if ( ErrorTitle == "" ) { // localize our strings ErrorTitle = class'KFLocalMessage'.static.getLocalized(Title); ErrorMessage = class'KFLocalMessage'.static.getLocalized(Message); KFGEngine.SetLastConnectionError(Message, Title); } super.NotifyConnectionError(MessageType, Message, Title); } event NotifyDownloadProgress ( EProgressMessageType ProgressType, string ProgressTitle, string ProgressDescription, bool SuppressPasswordRetry = false) { if(ProgressType == PMT_DownloadProgress ) { bDownloadingContent = true; CurrentDownloadName = ProgressTitle; CurrentDownloadProgress = int(float(ProgressDescription) * 100); } } event ClearDownloadInfo() { CurrentDownloadName = ""; CurrentDownloadProgress = 0; bDownloadingContent = false; } //Ported from RO2, storing last address that we attempted to connect to. event PreBrowse(string Address) { LastConnectionAttemptAddress = Address; } /** Returns the error message related to any disconnects */ function GetErrorMessage(out string outTitle, out string outMessage) { outTitle = ErrorTitle; outMessage = ErrorMessage; ErrorTitle = ""; ErrorMessage = ""; } /** * Displays the transition screen. * @param Canvas - The canvas to use for rendering. */ function DrawTransition(Canvas Canvas) { local string RandomLoadingString; switch(Outer.TransitionType) { case TT_Loading: RandomLoadingString = GetRandomLoadingMessage(); DrawTransitionMessage(Canvas,RandomLoadingString); break; } } function string GetRandomLoadingMessage() { return RandomLoadingStrings[Rand(RandomLoadingStrings.length)]; } /** * Print a centered transition message with a drop shadow. */ function DrawTransitionMessage(Canvas Canvas,string Message) { local String MapName; FontScale = float(Canvas.SizeY) / float(1080); MapName = KFGameEngine(Class'Engine'.static.GetEngine()).TransitionDescription; DrawMapInfo(Canvas, MapName); if(!class'WorldInfo'.static.IsConsoleBuild()) { if(bDownloadingContent) { DrawDownloadingString(Canvas); } if(MapName != "" && MapName != "KFMainMenu") { DrawCancelString(Canvas); } } Class'Engine'.static.AddOverlay(MessageFont, message, 0.15, 0.85, FontScale, FontScale, true); `if(`isdefined(ShippingPC) || `isdefined(FINAL_RELEASE)) return; `endif Super.DrawTransitionMessage(Canvas, Message); } function DrawDownloadingString(Canvas Canvas) { local string DownloadingString; DownloadingString = class'KFGFxWidget_BaseParty'.default.DownLoadingString @CurrentDownloadName @"-" @CurrentDownloadProgress$"%"; Class'Engine'.static.AddOverlay(MessageFont, DownloadingString, 0.12, 0.70, FontScale, FontScale, true); } function DrawCancelString(Canvas Canvas) { local string CancelString; CancelString = "F10 -"@class'KFCommon_LocalizedStrings'.default.CancelConnectionString; Class'Engine'.static.AddOverlay(MessageFont, CancelString, 0.12, 0.75, FontScale, FontScale, true); } function DrawMapInfo(Canvas Canvas, String MapName) { local KFMapSummary MapData; local String GameModeString; local array GamemModeStringArray; ParseStringIntoArray(KFGameEngine(Class'Engine'.static.GetEngine()).TransitionGameType, GamemModeStringArray, ".", true); if( GamemModeStringArray.Length > 0 ) { if(Caps(GamemModeStringArray[0]) == Caps("KFGameContent")) { GameModeString = Localize(GamemModeStringArray[1], "GameName", "KFGameContent" ); } else if( GamemModeStringArray.Length > 1 ) { GameModeString = GamemModeStringArray[1]; } } MapData = class'KFUIDataStore_GameResource'.static.GetMapSummaryFromMapName(MapName); if ( MapData == none ) { MapData = class'KFUIDataStore_GameResource'.static.GetMapSummaryFromMapName("KF-Default"); } if(MapData.DisplayName != "") { Class'Engine'.static.AddOverlay(MessageFont, Class'KFCommon_LocalizedStrings'.default.LoadingString, 0.12, 0.12, FontScale, FontScale, false); Class'Engine'.static.AddOverlay(MessageFont, MapData.DisplayName@"-"@GetAssociationIdentifier(MapData), 0.135, 0.15, FontScale, FontScale, false); if( GameModeString != "" ) { Class'Engine'.static.AddOverlay(MessageFont, GameModeString, 0.135, 0.18, FontScale, FontScale, false); } } } function string GetAssociationIdentifier(KFMapSummary MapData) { switch (MapData.MapAssociation) { case EAI_OfficialCustom: return OfficialCommunityString; case EAI_TripwireOfficial: return TripWireOfficialString; case EAI_Custom: return CommunityCustomString; default: return CommunityCustomString; } } DefaultProperties { TripWireOfficialMaps=("KF-BioticsLab","KF-BlackForest","KF-BurningParis","KF-Catacombs","KF-EvacuationPoint","KF-Farmhouse","KF-VolterManor","KF-Outpost","KF-Prison","KF-ZedLanding","KF-TheDescent","KF-Nuked","KF-TragicKingdom", "KF-Nightmare","KF-KrampusLair","KF-DieSector") CommunityOfficialMaps=("KF-ContainmentStation","KF-HostileGrounds","KF-InfernalRealm","KF-PowerCore_Holdout","KF-LockDown") //defaults MessageFont=Font'UI_Canvas_Fonts.Font_Main' FontScale=1.0f BackgroundColor=(R=1.0,G=1.0,B=1.0,A=1.0) }