Prepare for v1.0.0 release (#2)

* Replace sh_stats.gnut with pulse.gnut

* Add menu_stats_utility.nut

* Add menu_stats_overview.nut

---------

Co-authored-by: legonzaur <legonzaur@live.fr>
This commit is contained in:
okvdai
2023-04-20 18:54:49 +02:00
committed by GitHub
co-authored by legonzaur
parent edae30d4bc
commit e8cbfeb3cc
7 changed files with 1267 additions and 528 deletions
@@ -0,0 +1,187 @@
//TODO: Kills Per Minute stat
global function InitViewStatsWeaponsMenu
struct
{
var menu
GridMenuData gridData
bool isGridInitialized = false
array<ItemDisplayData> allPilotWeapons
} file
void function InitViewStatsWeaponsMenu()
{
var menu = GetMenu( "ViewStats_Weapons_Menu" )
file.menu = menu
Hud_SetText( Hud_GetChild( file.menu, "MenuTitle" ), "#STATS_PILOT_WEAPONS" )
file.gridData.rows = 5
file.gridData.columns = 1
//file.gridData.numElements // Set in OnViewStatsWeapons_Open after itemdata exists
file.gridData.pageType = eGridPageType.VERTICAL
file.gridData.tileWidth = 224
file.gridData.tileHeight = 112
file.gridData.paddingVert = 6
file.gridData.paddingHorz = 6
Grid_AutoAspectSettings( menu, file.gridData )
file.gridData.initCallback = WeaponButton_Init
file.gridData.getFocusCallback = WeaponButton_GetFocus
//file.gridData.clickCallback = WeaponButton_Activate
AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnViewStatsWeapons_Open )
AddMenuFooterOption( file.menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
}
void function OnViewStatsWeapons_Open()
{
//UI_SetPresentationType( ePresentationType.NO_MODELS )
UI_SetPresentationType( ePresentationType.STORE_WEAPON_SKINS )
// Get Pilot weapon list
file.allPilotWeapons = GetVisibleItemsOfType( eItemTypes.PILOT_PRIMARY )
file.allPilotWeapons.extend( GetVisibleItemsOfType( eItemTypes.PILOT_SECONDARY ) )
file.allPilotWeapons.sort( SortItemsAlphabetically )
//file.allPilotWeapons.extend( GetVisibleItemsOfType( eItemTypes.PILOT_ORDNANCE ) )
//file.allPilotWeapons.extend( GetVisibleItemsOfType( eItemTypes.PILOT_SPECIAL ) )
file.gridData.numElements = file.allPilotWeapons.len()
if ( !file.isGridInitialized )
{
GridMenuInit( file.menu, file.gridData )
file.isGridInitialized = true
}
file.gridData.currentPage = 0
Grid_InitPage( file.menu, file.gridData )
Hud_SetFocused( Grid_GetButtonForElementNumber( file.menu, 0 ) )
UpdateStatsForWeapon( file.allPilotWeapons[ 0 ].ref )
}
bool function WeaponButton_Init( var button, int elemNum )
{
string ref = file.allPilotWeapons[ elemNum ].ref
int itemType = GetItemType( ref )
var rui = Hud_GetRui( button )
asset image = GetImage( itemType, ref )
RuiSetImage( rui, "buttonImage", image )
Hud_SetEnabled( button, true )
Hud_SetVisible( button, true )
return true
}
void function WeaponButton_GetFocus( var button, int elemNum )
{
//if ( IsControllerModeActive() )
UpdateStatsForWeapon( file.allPilotWeapons[ elemNum ].ref )
}
//void function WeaponButton_Activate( var button, int elemNum )
//{
// if ( !IsControllerModeActive() )
// UpdateStatsForWeapon( file.allPilotWeapons[ elemNum ].ref )
//}
void function UpdateStatsForWeapon( string weaponRef )
{
//Sliced names are to be removed afterwards
string slicedName = ""
if(weaponRef.find("mp_weapon")){
slicedName = weaponRef.slice(10)
}
entity player = GetUIPlayer()
if ( player == null )
return
RunMenuClientFunction( "UpdateStoreWeaponModelSkin", weaponRef, 0 )
// Name
Hud_SetText( Hud_GetChild( file.menu, "WeaponName" ), GetItemName( weaponRef ) )
// Locked info
var lockLabel = GetElementsByClassname( file.menu, "LblWeaponLocked" )[0]
if ( IsItemLocked( player, weaponRef ) )
{
Hud_SetText( lockLabel, "#LOUADOUT_UNLOCK_REQUIREMENT_LEVEL", GetUnlockLevelReq( weaponRef ) )
Hud_Show( lockLabel )
}
else
{
Hud_Hide( lockLabel )
}
// Get required data needed for some calculations
//float hoursUsed = GetPlayerStatFloat( player, "weapon_stats", "hoursUsed", weaponRef )
string timeUsed = StatToTimeString( "weapon_stats", "hoursUsed", weaponRef )
int shotsHit = GetPlayerStatInt( player, "weapon_stats", "shotsHit", weaponRef )
int headshots = GetPlayerStatInt( player, "weapon_stats", "headshots", weaponRef )
int crits = GetPlayerStatInt( player, "weapon_stats", "critHits", weaponRef )
string headShotsValue = Localize( "#STATS_NOT_APPLICABLE" )
bool headshotWeapon = GetWeaponInfoFileKeyField_Global( weaponRef, "allow_headshots" ) == true
if ( headshotWeapon )
headShotsValue = string( headshots )
string critHitsValue = Localize( "#STATS_NOT_APPLICABLE" )
bool critHitWeapon = GetWeaponInfoFileKeyField_Global( weaponRef, "critical_hit" ) == true
if ( critHitWeapon )
critHitsValue = string( crits )
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_USED" ), timeUsed )
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_HEADER_SHOTS_HIT" ), string( shotsHit ) )
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_HEADER_HEADSHOTS" ), headShotsValue )
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_HEADER_CRITICAL_HITS" ), critHitsValue )
string nextUnlockRef = GetNextUnlockForWeaponLevel( player, weaponRef, WeaponGetRawLevel( player, weaponRef ) + 1 )
if ( nextUnlockRef != "" )
{
var rui = Hud_GetRui( Hud_GetChild( file.menu, "NextUnlock" ) )
if ( nextUnlockRef == "random" )
{
RuiSetString( rui, "unlockName", "" )
RuiSetImage( rui, "unlockImage", $"rui/menu/common/unlock_random" )
}
else
{
ItemDisplayData displayData
if ( IsSubItemType( GetItemType( nextUnlockRef ) ) )
displayData = GetItemDisplayData( nextUnlockRef, weaponRef )
else
displayData = GetItemDisplayData( nextUnlockRef )
RuiSetString( rui, "unlockName", displayData.name )
RuiSetImage( rui, "unlockImage", displayData.image )
vector aspect = GetItemImageAspect( nextUnlockRef )
float mult = 1.0
if ( aspect.x > aspect.y )
mult = 120.0 / aspect.x
else
mult = 120.0 / aspect.y
aspect.x *= mult
aspect.y *= mult
RuiSetFloat2( rui, "unlockImageSize", aspect )
}
//printt( displayData.image )
}
// Total Kills Stats
SetStatsLabelValue( file.menu, "KillsValue0", getWeaponKillsFromToneApi(weaponRef) )
SetStatsLabelValue( file.menu, "KillsValue1", getWeaponKillsFromToneApi(weaponRef) )
SetStatsLabelValue( file.menu, "KillsValue2", GetPlayerStatInt( player, "weapon_kill_stats", "titansTotal", weaponRef ) )
SetStatsLabelValue( file.menu, "KillsValue3", GetPlayerStatInt( player, "weapon_kill_stats", "ai", weaponRef ) )
}