Make use of "Time" tab #16

This commit is contained in:
okvdai
2023-05-01 17:23:07 +02:00
parent b28fb1e6c7
commit 47d91497dd
3 changed files with 125 additions and 47 deletions
+31
View File
@@ -1,6 +1,7 @@
global function pulseInit global function pulseInit
global function GetWeaponStatsFromToneAPI global function GetWeaponStatsFromToneAPI
global function GetMapStatsFromToneAPI global function GetMapStatsFromToneAPI
global function GetGamemodeStatsFromToneAPI
global function getWeaponKillsFromToneAPI global function getWeaponKillsFromToneAPI
global function getNemesisWeaponFromToneAPI global function getNemesisWeaponFromToneAPI
global function getDWEFromToneAPI global function getDWEFromToneAPI
@@ -17,12 +18,14 @@ global table globalToneAPIMapDeathData = {}
global table globalToneAPIMapDistData = {} global table globalToneAPIMapDistData = {}
global table globalToneAPIMapKillData = {} global table globalToneAPIMapKillData = {}
global table globalToneAPIMapMDistData = {} global table globalToneAPIMapMDistData = {}
global table globalToneAPIGamemodeData = {}
global table< table > globalToneAPIGamemodeMapData = {} global table< table > globalToneAPIGamemodeMapData = {}
string prefix = "default" string prefix = "default"
string HTTPrequestURL = "default" string HTTPrequestURL = "default"
int weaponEntries = 0 int weaponEntries = 0
int mapEntries = 0 int mapEntries = 0
int gamemodeEntries = 0
int mapGamemodeEntries = 0 int mapGamemodeEntries = 0
void function pulseInit() void function pulseInit()
@@ -93,6 +96,34 @@ void function GetMapStatsFromToneAPI()
NSHttpRequest(getMapStats, onSuccess, onFailure) NSHttpRequest(getMapStats, onSuccess, onFailure)
} }
void function GetGamemodeStatsFromToneAPI()
{
print(prefix + "Getting gamemode data...")
gamemodeEntries = 0
HttpRequest getGamemodeStats
getGamemodeStats.method = HttpRequestMethod.GET
getGamemodeStats.url = HTTPrequestURL + "/gamemodes"
getGamemodeStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
{
print(prefix + "Gamemode data received, processing...")
table JSONForConversion = DecodeJSON(response.body)
foreach (var key, var value in JSONForConversion) {
table test = expect table(value)
globalToneAPIGamemodeData[string(key)] <- test.kills
gamemodeEntries += 1
}
print(prefix + "Gamemode data has been processed with a total of " + string(gamemodeEntries) + " entries.")
}
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
{
print(prefix + "Encountered an error getting gamemode data...")
}
NSHttpRequest(getGamemodeStats, onSuccess, onFailure)
}
void function fetchGamemodeStatsFromToneAPI(string mapName) void function fetchGamemodeStatsFromToneAPI(string mapName)
{ {
mapGamemodeEntries = 0 mapGamemodeEntries = 0
+1
View File
@@ -47,6 +47,7 @@ void function OnViewStats_Open()
} }
GetWeaponStatsFromToneAPI() GetWeaponStatsFromToneAPI()
GetMapStatsFromToneAPI() GetMapStatsFromToneAPI()
GetGamemodeStatsFromToneAPI()
UI_SetPresentationType( ePresentationType.DEFAULT ) UI_SetPresentationType( ePresentationType.DEFAULT )
//UpdateViewStatsKillsMenu() //UpdateViewStatsKillsMenu()
+92 -46
View File
@@ -7,6 +7,8 @@ const MAX_MODE_ROWS = 8
struct struct
{ {
var menu var menu
array<ItemDisplayData> allTitans
table<string, array<string> > titanStatLoadout
} file } file
void function InitViewStatsTimeMenu() void function InitViewStatsTimeMenu()
@@ -23,21 +25,68 @@ void function OnStatsTime_Open()
{ {
UI_SetPresentationType( ePresentationType.NO_MODELS ) UI_SetPresentationType( ePresentationType.NO_MODELS )
file.allTitans = GetVisibleItemsOfType( eItemTypes.TITAN )
var dataTable = GetDataTable( $"datatable/titan_properties.rpak" )
foreach ( titan in file.allTitans )
{
file.titanStatLoadout[ titan.ref ] <- []
int row = GetDataTableRowMatchingStringValue( dataTable, GetDataTableColumnByName( dataTable, "titanRef" ), titan.ref )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "primary" ) ) )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "ordnance" ) ) )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "special" ) ) )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "antirodeo" ) ) )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "coreAbility" ) ) )
file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "melee" ) ) )
}
UpdateViewStatsTimeMenu() UpdateViewStatsTimeMenu()
} }
float function GetTitanKills( string titanName)
{
float weaponKills = 0
foreach ( weaponRef in file.titanStatLoadout[ titanName ])
{
weaponKills += float(getWeaponKillsFromToneAPI(weaponRef))
}
return weaponKills
}
void function UpdateViewStatsTimeMenu() void function UpdateViewStatsTimeMenu()
{ {
entity player = GetUIPlayer() entity player = GetUIPlayer()
if ( player == null ) if ( player == null )
return return
//#########################################
float killsAsTitan = 0
float killsAsIon = GetTitanKills( "ion" )
killsAsTitan += killsAsIon
float killsAsScorch = GetTitanKills( "scorch" )
killsAsTitan += killsAsScorch
float killsAsNorthstar = GetTitanKills( "northstar" )
killsAsTitan += killsAsNorthstar
float killsAsRonin = GetTitanKills( "ronin" )
killsAsTitan += killsAsRonin
float killsAsTone = GetTitanKills( "tone" )
killsAsTitan += killsAsTone
float killsAsLegion = GetTitanKills( "legion" )
killsAsTitan += killsAsLegion
float killsAsMonarch = GetTitanKills( "vanguard" )
killsAsTitan += killsAsMonarch
//######################################### //#########################################
// Time By Class Pie Chart // Time By Class Pie Chart
//######################################### //#########################################
float hoursAsPilot = GetPlayerStatFloat( player, "time_stats", "hours_as_pilot" ) var totalPilotKills = 0
float hoursAsTitan = GetPlayerStatFloat( player, "time_stats", "hours_as_titan" )
foreach (var key, var value in globalToneAPIKillData) {
totalPilotKills += value
}
float hoursAsPilot = float(totalPilotKills)
float hoursAsTitan = killsAsTitan
array<PieChartEntry> classes array<PieChartEntry> classes
@@ -52,51 +101,41 @@ void function UpdateViewStatsTimeMenu()
PieChartData classTimeData PieChartData classTimeData
classTimeData.entries = classes classTimeData.entries = classes
classTimeData.labelColor = [ 255, 255, 255, 255 ] classTimeData.labelColor = [ 255, 255, 255, 255 ]
classTimeData.timeBased = true SetPieChartData( file.menu, "ClassPieChart", "KILLS BY CLASS", classTimeData )
SetPieChartData( file.menu, "ClassPieChart", "#STATS_HEADER_TIME_BY_CLASS", classTimeData )
//######################################### //#########################################
// Time By Chassis Pie Chart // Time By Chassis Pie Chart
//######################################### //#########################################
float hoursAsIon = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_ion" )
float hoursAsScorch = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_scorch" )
float hoursAsNorthstar = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_northstar" )
float hoursAsRonin = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_ronin" )
float hoursAsTone = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_tone" )
float hoursAsLegion = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_legion" )
float hoursAsMonarch = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_vanguard" )
array<PieChartEntry> titans array<PieChartEntry> titans
if ( hoursAsIon > 0 ) if ( killsAsIon > 0 )
AddPieChartEntry( titans, "#TITAN_ION", hoursAsIon, [200, 40, 40, 255] ) AddPieChartEntry( titans, "#TITAN_ION", killsAsIon, [200, 40, 40, 255] )
if ( hoursAsScorch > 0 ) if ( killsAsScorch > 0 )
AddPieChartEntry( titans, "#TITAN_SCORCH", hoursAsScorch, [223, 94, 0, 255] ) AddPieChartEntry( titans, "#TITAN_SCORCH", killsAsScorch, [223, 94, 0, 255] )
if ( hoursAsNorthstar > 0 ) if ( killsAsNorthstar > 0 )
AddPieChartEntry( titans, "#TITAN_NORTHSTAR", hoursAsNorthstar, [61, 117, 193, 255] ) AddPieChartEntry( titans, "#TITAN_NORTHSTAR", killsAsNorthstar, [61, 117, 193, 255] )
if ( hoursAsRonin > 0 ) if ( killsAsRonin > 0 )
AddPieChartEntry( titans, "#TITAN_RONIN", hoursAsRonin, [207, 191, 59, 255] ) AddPieChartEntry( titans, "#TITAN_RONIN", killsAsRonin, [207, 191, 59, 255] )
if ( hoursAsTone > 0 ) if ( killsAsTone > 0 )
AddPieChartEntry( titans, "#TITAN_TONE", hoursAsTone, [88, 172, 67, 255] ) AddPieChartEntry( titans, "#TITAN_TONE", killsAsTone, [88, 172, 67, 255] )
if ( hoursAsLegion > 0 ) if ( killsAsLegion > 0 )
AddPieChartEntry( titans, "#TITAN_LEGION", hoursAsLegion, [46, 188, 180, 255] ) AddPieChartEntry( titans, "#TITAN_LEGION", killsAsLegion, [46, 188, 180, 255] )
if ( hoursAsMonarch > 0 ) if ( killsAsMonarch > 0 )
AddPieChartEntry( titans, "#TITAN_VANGUARD", hoursAsMonarch, [151, 71, 175, 255] ) AddPieChartEntry( titans, "#TITAN_VANGUARD", killsAsMonarch, [151, 71, 175, 255] )
titans.sort( ComparePieChartEntryValues ) titans.sort( ComparePieChartEntryValues )
PieChartData chassisTimeData PieChartData chassisTimeData
chassisTimeData.entries = titans chassisTimeData.entries = titans
chassisTimeData.labelColor = [ 255, 255, 255, 255 ] chassisTimeData.labelColor = [ 255, 255, 255, 255 ]
chassisTimeData.timeBased = true SetPieChartData( file.menu, "ChassisPieChart", "KILLS BY TITAN", chassisTimeData )
SetPieChartData( file.menu, "ChassisPieChart", "#STATS_HEADER_TIME_BY_CHASSIS", chassisTimeData )
//######################################### //#########################################
// Time By Mode Pie Chart // Time By Mode Pie Chart
@@ -105,33 +144,40 @@ void function UpdateViewStatsTimeMenu()
array<string> gameModesArray = GetPersistenceEnumAsArray( "gameModes" ) array<string> gameModesArray = GetPersistenceEnumAsArray( "gameModes" )
array<PieChartEntry> modes array<PieChartEntry> modes
foreach ( modeName in gameModesArray ) int enumCount = PersistenceGetEnumCount( "gameModes" )
{ table< string, array<int> > customGamemodeList = {
string gameModePlaysVar = GetStatVar( "game_stats", "mode_played", modeName ) sns = [255, 178, 102, 255],
int playCount = player.GetPersistentVarAsInt( gameModePlaysVar ) fw = [147, 204, 57, 255],
if ( playCount > 0 ) gg = [14, 87, 132, 255]
AddPieChartEntry( modes, GameMode_GetName( modeName ), float( playCount ), GameMode_GetColor( modeName ) )
} }
for ( int modeId = 0; modeId < enumCount; modeId++ )
if ( modes.len() > 0 )
{ {
modes.sort( ComparePieChartEntryValues ) string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId )
if ( modeName in globalToneAPIGamemodeData )
if ( modes.len() > MAX_MODE_ROWS )
{ {
float otherValue float modePlayedTime = 0
for ( int i = MAX_MODE_ROWS-1; i < modes.len() ; i++ ) modePlayedTime = float(globalToneAPIGamemodeData[modeName])
otherValue += modes[i].numValue if ( modePlayedTime > 0 ) {
AddPieChartEntry( modes, GameMode_GetName( modeName ), modePlayedTime, GetGameModeDisplayColor( modeName ) )
modes.resize( MAX_MODE_ROWS-1 ) }
AddPieChartEntry( modes, "#GAMEMODE_OTHER", otherValue, [127, 127, 127, 255] ) }
}
foreach (string key, array<int> value in customGamemodeList)
{
if ( key in globalToneAPIGamemodeData)
{
float modePlayedTime = 0
modePlayedTime = float(globalToneAPIGamemodeData[key])
if ( modePlayedTime > 0 ) {
AddPieChartEntry( modes, key, modePlayedTime, value)
}
} }
} }
PieChartData modesPlayedData PieChartData modesPlayedData
modesPlayedData.entries = modes modesPlayedData.entries = modes
modesPlayedData.labelColor = [ 255, 255, 255, 255 ] modesPlayedData.labelColor = [ 255, 255, 255, 255 ]
SetPieChartData( file.menu, "ModesPieChart", "#GAME_MODES_PLAYED", modesPlayedData ) SetPieChartData( file.menu, "ModesPieChart", "KILLS BY GAMEMODE", modesPlayedData )
//######################################### //#########################################
// Time Stats // Time Stats