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

424 lines
11 KiB
Ucode

class KFGFxDailyObjectivesContainer extends KFGFxObject_Container
dependson (KFOnlineStatsWrite);
var localized string TitleString;
var localized string OverviewString;
var localized string SubtitleString;
var localized string KnifeString;
var string IconURL;
var KFPlayerController KFPC;
var array<string>ObjectiveIconURLs;
var const int NUM_OF_DAILIES;
enum E_DailyIcon
{
DI_Character,
DI_Map,
DI_PerkXP,
DI_Versus,
DI_Weapon,
DI_ZED
};
struct ObjectiveProgress
{
var bool bComplete;
var int NumericValue;
structdefaultproperties
{
NumericValue = INDEX_NONE;
}
};
var array<ObjectiveProgress> ObjectiveStatusList;
function Initialize( KFGFxObject_Menu NewParentMenu )
{
super.Initialize( NewParentMenu );
KFPC = KFPlayerController(GetPC());
LocalizeMenu();
PopulateData();
}
function LocalizeMenu()
{
local GFxObject TextObject;
TextObject = CreateObject("Object");
// Localize static text
TextObject.SetString("title", default.TitleString);
TextObject.SetString("overview", default.OverviewString);
TextObject.SetString("subtitle", default.SubtitleString);
SetObject("localizedText", TextObject);
}
function bool PopulateData(optional bool bForceRefresh)
{
local GFxObject DataObject;
local GFxObject DataProvider; //array containing the data objects
local int i;
DataProvider = CreateArray();
for (i = 0; i < NUM_OF_DAILIES; i++)
{
DataObject = CreateObject("Object");
if(DataObject != none) //somehow this is none on Xbone
{
MakeDailyDataObject(KFPC.GetDailyObjective(i), i, KFPC, DataObject);
if (DataObject == none)
{
continue;
}
DataProvider.SetElementObject(i, DataObject);
}
}
SetObject("dailyObjectiveData", DataProvider);
return HasObjectiveStatusChanged();
}
static function GFxObject MakeDailyDataObject(DailyEventInformation EventInfo, int Index, KFPlayerController MyKFPC, out GFxObject RefDataObject)
{
local bool bProgressObjective;
bProgressObjective = IsProgressObjective(EventInfo);
RefDataObject.SetString("label", FormTitleForObjective( EventInfo));
RefDataObject.SetString("description", FormDescriptionForObjective( EventInfo));
RefDataObject.SetString("iconPath", GetIconForObjective( EventInfo));
RefDataObject.SetBool("complete", MyKFPC.IsDailyObjectiveComplete(Index));
RefDataObject.SetBool("showProgress", bProgressObjective);
if(bProgressObjective)
{
RefDataObject.SetFloat("progress", FClamp(Float(MyKFPC.GetCurrentDailyValue(Index)) / Float(MyKFPC.GetMaxDailyValue(Index)), 0, 1) );
RefDataObject.SetString("textValue", MyKFPC.GetCurrentDailyValue(Index) $"/" $MyKFPC.GetMaxDailyValue(Index));
if (MyKFPC.GetCurrentDailyValue(Index) == INDEX_NONE || MyKFPC.GetMaxDailyValue(Index) == INDEX_NONE)
{
return none;
}
}
else
{
RefDataObject.SetFloat("progress", 0);
RefDataObject.SetString("textValue", "");
}
RefDataObject.SetString("rewardText", class'KFMission_LocalizedStrings'.default.RewardString);
RefDataObject.SetInt("reward", class'KFOnlineStatsWrite'.static.GetDailyEventReward());
return RefDataObject;
}
function static string GetIconForObjective( DailyEventInformation EventInfo )
{
switch (EventInfo.ObjectiveType)
{
case DOT_WeaponDamage:
return "img://"$default.ObjectiveIconURLs[DI_Weapon];
case DOT_PerkXP:
switch (EventInfo.SecondaryType)
{
case DOST_KillZeds:
return "img://"$default.ObjectiveIconURLs[DI_ZED];
case DOST_PlayPerk:
return "img://"$default.ObjectiveIconURLs[DI_PerkXP];
case DOST_KillBoss:
return "img://"$default.ObjectiveIconURLs[DI_ZED];
}
break;
case DOT_Maps:
switch (EventInfo.SecondaryType)
{
case DOST_VersusDamage:
return "img://"$default.ObjectiveIconURLs[DI_Versus];
case DOST_VersusKills:
return "img://"$default.ObjectiveIconURLs[DI_Versus];
case DOST_MapCompletion:
return "img://"$default.ObjectiveIconURLs[DI_Map];
case DOST_CharacterCompletion:
return "img://"$default.ObjectiveIconURLs[DI_Character];
}
break;
}
return "";
}
function static bool IsProgressObjective( DailyEventInformation EventInfo )
{
switch (EventInfo.ObjectiveType)
{
case DOT_WeaponDamage:
return true;
case DOT_PerkXP:
switch (EventInfo.SecondaryType)
{
case DOST_KillZeds:
case DOST_PlayPerk:
return true;
}
break;
case DOT_Maps:
switch (EventInfo.SecondaryType)
{
case DOST_VersusDamage:
case DOST_VersusKills:
return true;
case DOST_MapCompletion:
case DOST_CharacterCompletion:
return false;
}
break;
}
return false;
}
function static string FormTitleForObjective( DailyEventInformation EventInfo )
{
local string NewString;
switch (EventInfo.ObjectiveType)
{
case DOT_WeaponDamage:
NewString = class'KFMission_LocalizedStrings'.default.DealDamageString;
break;
case DOT_PerkXP:
switch (EventInfo.SecondaryType)
{
case DOST_KillZeds:
NewString = class'KFMission_LocalizedStrings'.default.KillZedsString;
break;
case DOST_PlayPerk:
NewString = class'KFMission_LocalizedStrings'.default.EarnXPString;
break;
case DOST_KillBoss:
NewString = class'KFMission_LocalizedStrings'.default.KillBossString;
break;
}
break;
case DOT_Maps:
switch (EventInfo.SecondaryType)
{
case DOST_MapCompletion:
NewString = class'KFMission_LocalizedStrings'.default.CompleteMapString;
break;
case DOST_VersusDamage:
NewString = class'KFMission_LocalizedStrings'.default.DealVersusDamageString;
break;
case DOST_VersusKills:
NewString = class'KFMission_LocalizedStrings'.default.VersusKillsString;
break;
case DOST_CharacterCompletion:
NewString = class'KFMission_LocalizedStrings'.default.VersusCompletionString;
break;
}
break;
}
return NewString;
}
function static string FormDescriptionForObjective( DailyEventInformation EventInfo )
{
local string DescriptionString;
switch (EventInfo.ObjectiveType)
{
case DOT_WeaponDamage:
DescriptionString = GetWeaponStringForDT(EventInfo.ObjectiveClasses[0]);
break;
case DOT_PerkXP:
switch (EventInfo.SecondaryType)
{
case DOST_KillBoss:
DescriptionString = class'KFMission_LocalizedStrings'.default.KillBossDescriptionString;
break;
case DOST_KillZeds:
DescriptionString = GetKillsString(EventInfo.ObjectiveClasses[0]);
break;
case DOST_PlayPerk:
DescriptionString = GetPerkString(EventInfo.ObjectiveClasses[0]);
break;
}
break;
case DOT_Maps:
switch (EventInfo.SecondaryType)
{
case DOST_MapCompletion:
DescriptionString = GetMapString(EventInfo);
break;
case DOST_VersusDamage:
DescriptionString = GetVersusDamageString(EventInfo);
break;
case DOST_VersusKills:
DescriptionString = GetVersusKillsString(EventInfo);
break;
case DOST_CharacterCompletion:
DescriptionString = GetVersusCompleteString(EventInfo);
break;
}
break;
}
return DescriptionString;
}
function static string GetWeaponStringForDT(name WeaponName)
{
local string MyString;
if(WeaponName == 'KFWeap_Edged_Knife')
{
MyString = default.KnifeString;
}
else
{
MyString = Localize(string(WeaponName), "ItemName", "KFGameContent");
}
return MyString;
}
function static string GetPerkString(name PerkClassName)
{
local string MyString;
MyString = Localize(string(PerkClassName), "PerkName", "KFGame");
return MyString;
}
function static string GetKillsString(name ZedClassName)
{
local string MyString;
MyString = Localize("Zeds", String(ZedClassName), "KFGame");
return MyString;
}
//map and difficulty
function static string GetMapString(DailyEventInformation EventInfo)
{
local string MyString;
MyString = class'KFCommon_LocalizedStrings'.static.GetFriendlyMapName(string(EventInfo.ObjectiveClasses[0]) )
@"-" @class'KFCommon_LocalizedStrings'.static.GetDifficultyString( EventInfo.CompletionAmount );
return MyString;
}
function static string GetVersusDamageString(DailyEventInformation EventInfo)
{
local string MyString;
MyString = Localize("Zeds", String(EventInfo.ObjectiveClasses[0]), "KFGame");;
return MyString;
}
function static string GetVersusKillsString(DailyEventInformation EventInfo)
{
local string MyString;
MyString = Localize("Zeds", String(EventInfo.ObjectiveClasses[0]), "KFGame");
return MyString;
}
function static string GetVersusCompleteString(DailyEventInformation EventInfo)
{
local string MyString;
MyString = Localize(string(EventInfo.ObjectiveClasses[0]), "CharacterName", "KFCharacterInfo");
return MyString;
}
function bool HasObjectiveStatusChanged()
{
local int i;
local bool bHasChanged;
local bool bTempStatus;
local int tempNumericValue;
if(KFPC == none)
{
return false;
}
if(!KFPC.HasReadStats())
{
return true;
}
if(NUM_OF_DAILIES != ObjectiveStatusList.length)
{
ObjectiveStatusList.length = NUM_OF_DAILIES;
for (i = 0; i < NUM_OF_DAILIES; i++)
{
ObjectiveStatusList[i].bComplete = KFPC.IsDailyObjectiveComplete(i);
ObjectiveStatusList[i].numericValue = KFPC.GetCurrentDailyValue(i);
}
bHasChanged = true;
}
else
{
for (i = 0; i < NUM_OF_DAILIES; i++)
{
bTempStatus = KFPC.IsDailyObjectiveComplete(i);
tempNumericValue = KFPC.GetCurrentDailyValue(i);
if(ObjectiveStatusList[i].bComplete != bTempStatus || tempNumericValue != ObjectiveStatusList[i].numericValue)
{
bHasChanged = true;
ObjectiveStatusList[i].bComplete = bTempStatus;
ObjectiveStatusList[i].numericValue = tempNumericValue;
}
}
}
return bHasChanged;
}
DefaultProperties
{
NUM_OF_DAILIES = 3
ObjectiveIconURLs(DI_Character)="DailyObjective_UI.KF2_Dailies_Icon_Character"
ObjectiveIconURLs(DI_Map)="DailyObjective_UI.KF2_Dailies_Icon_Map"
ObjectiveIconURLs(DI_PerkXP)="DailyObjective_UI.KF2_Dailies_Icon_PerkLvl"
ObjectiveIconURLs(DI_Versus)="DailyObjective_UI.KF2_Dailies_Icon_VS"
ObjectiveIconURLs(DI_Weapon)="DailyObjective_UI.KF2_Dailies_Icon_Weapon"
ObjectiveIconURLs(DI_ZED)= "UI_PerkIcons_TEX.UI_PerkIcon_ZED"
IconURL="UI_PerkIcons_TEX.UI_PerkIcon_Berserker"
}