void DrawPackageStatistics() { float x = Overlay.Managed.CellsWide - 20; float y = Overlay.Managed.CellsTall - 8; float dx = 1.0f; // bar spacing float w = 1.0f; // width of bars int maxbits = 0; var stats = m_NetworkClient.counters.packageContentStats; var last = m_NetworkClient.counters.packagesIn; for (var i = last; i > 0 && i > last - stats.Length; --i) { var s = stats[i % stats.Length]; if (s == null) { continue; } var barx = x + (i - last) * dx; for (int j = 0, c = s.Count; j < c; ++j) { var stat = s[j]; DebugOverlay.DrawRect(barx, y - (stat.sectionStart + stat.sectionLength) * bitheight, w, stat.sectionLength * bitheight, stat.color); } var lastStat = s[s.Count - 1]; if (lastStat.sectionStart + lastStat.sectionLength > maxbits) { maxbits = lastStat.sectionStart + lastStat.sectionLength; } } int maxbytes = (maxbits + 7) / 8; int step = Mathf.Max(1, maxbytes >> 4) * 16; for (var i = 0; i <= maxbytes; i += step) { Overlay.Managed.Write((int)(x - 4), (int)(y - i * 8 * bitheight - 0.5f), "{0:###}b", i); } bitheight = Mathf.Min(0.01f, 10.0f / maxbits); }