1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFGFxTutorialContainer.uc
2020-12-13 18:01:13 +03:00

129 lines
3.8 KiB
Ucode

//=============================================================================
// KFGFxTutorialContainer
//=============================================================================
// This is the UC representation for the GFxObject in the Tutorial Movie Player
//=============================================================================
// Killing Floor 2
// Copyright (C) 2016 Tripwire Interactive LLC
// - Zane Gholson 4/21/2016
//=============================================================================
class KFGFxTutorialContainer extends KFGFxObject_Menu
dependson(KFTutorialSectionInfo);
var const string ControllerStringPrefix;
var localized string BackString;
var localized string NextString;
var localized string DoneString;
var localized string SkipString;
var KFTutorialSectionInfo TutorialArch;
var string KeyReplaceString;
var KFPlayerInput KFPI;
function InitMenu( )
{
KFPI = KFPlayerInput(GetPC().PlayerInput);
LocalizeText();
if(GetPC().WorldInfo.IsConsoleBuild())
{
UpdateUsingGamePad(true);
}
else if(KFPI != none)
{
UpdateUsingGamePad(KFPI.bUsingGamepad);
}
}
function UpdateUsingGamePad(bool bValue)
{
SetBool("bUsingGamepad", bValue);
}
function LocalizeText()
{
local GFxObject LocalizedObject;
LocalizedObject = CreateObject( "Object" );
LocalizedObject.SetString("back", BackString);
LocalizedObject.SetString("next", NextString);
LocalizedObject.SetString("done", DoneString);
LocalizedObject.SetString("skip", SkipString);
SetObject("localizedText", LocalizedObject);
}
function SetPopUpData(const out Array<STutorialSlide> TutorialArray)
{
local GFxObject DataObject;
local GFxObject DataProvider;
local int i, j;
local string DescriptionString;
local KeyBind BoundKey;
local array<string> KeyStrings;
DataProvider = CreateArray();
for (i = 0; i < TutorialArray.length; i++)
{
DescriptionString = Localize("KFTutorial", TutorialArray[i].DescriptionKey, "KFGameContent");
if(KFPI != none)
{
// For each %x% relace with a variable length key name from KeyGBAs
for (j = 0; j < TutorialArray[i].KeyGBAs.Length; ++j)
{
// If we have multiple GBA's iterate for each
KFPI.GetKeyBindFromCommand(BoundKey, TutorialArray[i].KeyGBAs[j], false);
KeyStrings[j] = KFPI.GetBindDisplayName(BoundKey);
if(class'Actor'.static.Len(KeyStrings[j]) - class'Actor'.static.Len(ControllerStringPrefix) > 1)
{
//Image Replacing a string in AS3 cannot take a substring larger than 15 characters. We remove the prefix for controllers
//because these are common accross all controller inputs.
class'Actor'.static.ReplaceText(KeyStrings[j], ControllerStringPrefix, "" );
}
}
ReplaceTextArray(DescriptionString, KeyReplaceString, KeyStrings);
}
DataObject = CreateObject("Object");
DataObject.SetString("title", Localize("KFTutorial", TutorialArray[i].TitleKey, "KFGameContent") );
DataObject.SetString("description", DescriptionString);
if(TutorialArray[i].UIImage != none)
{
DataObject.SetString("image", "img://" $PathName(TutorialArray[i].UIImage));
}
DataProvider.SetElementObject(i, DataObject);
}
SetObject("data",DataProvider);
}
/** Like replace text, but takes an array of "with" strings */
static function ReplaceTextArray(out string Text, string Replace, array<string> With)
{
local int i, j;
local string Input;
Input = Text;
Text = "";
i = InStr(Input, Replace);
while(i != -1)
{
Text = Text $ Left(Input, i) $ With[j];
if ( j < (With.Length - 1) )
j++;
Input = Mid(Input, i + Len(Replace));
i = InStr(Input, Replace);
}
Text = Text $ Input;
}
DefaultProperties
{
KeyReplaceString="%x%"
ControllerStringPrefix="XboxTypeS_"
}