424 lines
11 KiB
Ucode
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"
|
|
} |