XRoom_Unity/Assets/Photon/Fusion/Runtime/Statistics/FusionNetworkObjectStatsGraph.cs
2025-05-31 10:20:20 +03:30

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;
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;
TimeSpan bufferTimeSpan = TimeSpan.Zero;
TimeSpan refreshTimeSpan = TimeSpan.Zero;
switch (stat) {
case NetworkObjectStat.InBandwidth:
case NetworkObjectStat.OutBandwidth:
valueTextFormat = "{0:0} B";
bufferTimeSpan = TimeSpan.FromSeconds(1);
refreshTimeSpan = TimeSpan.FromMilliseconds(50);
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}";
bufferTimeSpan = TimeSpan.FromSeconds(1);
refreshTimeSpan = TimeSpan.FromMilliseconds(50);
break;
default:
valueTextFormat = "{0:0}";
break;
}
SetValueTextFormat(valueTextFormat);
SetValueTextMultiplier(valueTextMultiplier);
SetThresholds(threshold1, threshold2, threshold3);
SetIgnoreZeroValues(ignoreZeroOnAverage, ignoreZeroOnBuffer);
Initialize(bufferTimeSpan, refreshTimeSpan);
}
}
}