You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RizzeProjectile/Assets/Photon/Fusion/Runtime/Statistics/FusionNetworkObjectStatsGra...

92 lines
3.1 KiB
C#

namespace Fusion.Statistics {
using System;
using UnityEngine;
using UnityEngine.UI;
[Flags]
internal enum NetworkObjectStat{
InBandwidth = 1 << 0,
OutBandwidth = 1 << 1,
InPackets = 1 << 2,
OutPackets = 1 << 3,
AverageInPacketSize = 1 << 4,
AverageOutPacketSize = 1 << 5
}
public class FusionNetworkObjectStatsGraph : FusionStatsGraphBase {
[SerializeField] private Text _description;
private NetworkId _id;
private NetworkObjectStat _stat;
private FusionNetworkObjectStatsGraphCombine _combineParentGraph;
public override void UpdateGraph(NetworkRunner runner, FusionStatisticsManager statisticsManager, ref DateTime now) {
AddValueToBuffer(GetNetworkObjectStatValue(statisticsManager), ref now);
}
private float GetNetworkObjectStatValue(FusionStatisticsManager statisticsManager) {
if (statisticsManager.ObjectStatisticsManager.GetNetworkObjectStatistics(_id, out var snapshot)) {
switch (_stat) {
case NetworkObjectStat.InBandwidth:
return snapshot.InBandwidth;
case NetworkObjectStat.OutBandwidth:
return snapshot.OutBandwidth;
case NetworkObjectStat.InPackets:
return snapshot.InPackets;
case NetworkObjectStat.OutPackets:
return snapshot.OutPackets;
case NetworkObjectStat.AverageInPacketSize:
return snapshot.InBandwidth / Mathf.Max(1, snapshot.InPackets);
case NetworkObjectStat.AverageOutPacketSize:
return snapshot.OutBandwidth / Mathf.Max(1, snapshot.OutPackets);
}
}
return -1;
}
internal void SetupNetworkObjectStat(NetworkId id, NetworkObjectStat stat) {
_id = id;
_stat = stat;
_description.text = _stat.ToString();
string valueTextFormat;
float threshold1 = 0, threshold2 = 0, threshold3 = 0;
float valueTextMultiplier = 1;
bool ignoreZeroOnAverage = false, ignoreZeroOnBuffer = false;
int accumulateTimeMs = 0;
switch (stat) {
case NetworkObjectStat.InBandwidth:
case NetworkObjectStat.OutBandwidth:
valueTextFormat = "{0:0} B";
accumulateTimeMs = 1000;
_description.text += " (Per second)";
break;
case NetworkObjectStat.AverageInPacketSize:
case NetworkObjectStat.AverageOutPacketSize:
valueTextFormat = "{0:0} B";
ignoreZeroOnAverage = true;
ignoreZeroOnBuffer = true;
break;
case NetworkObjectStat.InPackets:
case NetworkObjectStat.OutPackets:
valueTextFormat = "{0:0}";
accumulateTimeMs = 1000;
_description.text += " (Per second)";
break;
default:
valueTextFormat = "{0:0}";
break;
}
SetValueTextFormat(valueTextFormat);
SetValueTextMultiplier(valueTextMultiplier);
SetThresholds(threshold1, threshold2, threshold3);
SetIgnoreZeroValues(ignoreZeroOnAverage, ignoreZeroOnBuffer);
Initialize(accumulateTimeMs);
}
}
}