Skip to content

Commit 1a0c866

Browse files
committed
Progress indicator highlight for module tabs receiving SV data
1 parent 0c2719f commit 1a0c866

File tree

1 file changed

+86
-4
lines changed

1 file changed

+86
-4
lines changed

lua/blobsprofiler/client/cl_blobsprofiler.lua

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,7 +1140,7 @@ concommand.Add("blobsprofiler", function(ply, cmd, args, argStr)
11401140
blobsProfiler.Log(blobsProfiler.L_DEBUG, "Module panel setup for module: " .. moduleName .. " (".. luaState ..")")
11411141

11421142
local moduleTab = vgui.Create(usePanelType, statePanel)
1143-
statePanel:AddSheet( moduleName, moduleTab, moduleData.Icon )
1143+
local moduleSheet = statePanel:AddSheet( moduleName, moduleTab, moduleData.Icon )
11441144

11451145
if luaState == "Client" and moduleData.UpdateRealmData and moduleData.PreloadClient then
11461146
blobsProfiler.Log(blobsProfiler.L_DEBUG, "Preloading client data for module: ".. moduleName)
@@ -1172,7 +1172,7 @@ concommand.Add("blobsprofiler", function(ply, cmd, args, argStr)
11721172
if not firstSubModule[moduleName] then firstSubModule[moduleName] = {name=subModuleName, data=subModuleData} end
11731173

11741174
local subModuleTab = vgui.Create("DPanel", moduleTab)
1175-
moduleTab:AddSheet( subModuleName, subModuleTab, subModuleData.Icon )
1175+
local subModuleSheet = moduleTab:AddSheet( subModuleName, subModuleTab, subModuleData.Icon )
11761176

11771177
if luaState == "Client" and subModuleData.PreloadClient and subModuleData.UpdateRealmData then
11781178
blobsProfiler.Log(blobsProfiler.L_DEBUG, "Preloading client data for ".. moduleName .." submodule: ".. subModuleName)
@@ -1225,6 +1225,34 @@ concommand.Add("blobsprofiler", function(ply, cmd, args, argStr)
12251225
subModuleData.ClientTab = subModuleTab
12261226
elseif luaState == "Server" then
12271227
subModuleData.ServerTab = subModuleTab
1228+
1229+
subModuleSheet.Tab.PaintOver = function(s,w,h)
1230+
if blobsProfiler.Modules[moduleName].childrenReceiving and blobsProfiler.Modules[moduleName].childrenReceiving[moduleName .. "." .. subModuleName] then
1231+
local recvTbl = blobsProfiler.Modules[moduleName].childrenReceiving[moduleName .. "." .. subModuleName]
1232+
local recvChunks = recvTbl.receivedChunks and #recvTbl.receivedChunks or 0
1233+
local totChunks = recvTbl.totalChunks or 1
1234+
local perc = recvChunks / totChunks
1235+
1236+
local dynamicH = (moduleTab.GetActiveTab and moduleTab:GetActiveTab() == s) and h-7 or h -- this is SO dumb
1237+
local startY = (moduleTab.GetActiveTab and moduleTab:GetActiveTab() == s) and 0 or 1
1238+
1239+
draw.RoundedBoxEx(4, 0, startY, perc * w, dynamicH, Color(255,255,0,50), true, true)
1240+
elseif blobsProfiler.Modules[moduleName].SubModules[subModuleName].flashyUpdate then
1241+
if (moduleTab.GetActiveTab and moduleTab:GetActiveTab() == s) then -- TODO: DPanel subModuleTabs will never stop flashing
1242+
blobsProfiler.Modules[moduleName].SubModules[subModuleName].flashyUpdate = nil
1243+
return
1244+
end
1245+
1246+
local flashState = math.floor(CurTime() / 0.35) % 2 == 0
1247+
1248+
if flashState then
1249+
local dynamicH = (moduleTab.GetActiveTab and moduleTab:GetActiveTab() == s) and h-7 or h -- this is SO dumb
1250+
local startY = (moduleTab.GetActiveTab and moduleTab:GetActiveTab() == s) and 0 or 1
1251+
1252+
draw.RoundedBoxEx(4, 0, startY, w, dynamicH, Color(0,255,0,50), true, true)
1253+
end
1254+
end
1255+
end
12281256
end
12291257
moduleTab:OnActiveTabChanged(nil, moduleTab:GetActiveTab())
12301258
end
@@ -1285,6 +1313,38 @@ concommand.Add("blobsprofiler", function(ply, cmd, args, argStr)
12851313
moduleData.ClientTab = moduleTab
12861314
elseif luaState == "Server" then
12871315
moduleData.ServerTab = moduleTab
1316+
1317+
moduleSheet.Tab.PaintOver = function(s,w,h)
1318+
-- 'Total' indicator progress bar of all submodules progress
1319+
if blobsProfiler.Modules[moduleName].childrenReceiving then
1320+
local totRecv = 0
1321+
local totChunks = 1
1322+
1323+
for moduleN, moduleRD in pairs(blobsProfiler.Modules[moduleName].childrenReceiving) do
1324+
totRecv = totRecv + (moduleRD.receivedChunks and #moduleRD.receivedChunks or 0)
1325+
totChunks = totChunks + (moduleRD.totalChunks or 1)
1326+
end
1327+
1328+
local totalPerc = totRecv / totChunks
1329+
1330+
local dynamicH = (statePanel.GetActiveTab and statePanel:GetActiveTab() == s) and h-7 or h -- this is SO dumb
1331+
local startY = (statePanel.GetActiveTab and statePanel:GetActiveTab() == s) and 0 or 1
1332+
draw.RoundedBoxEx(4, 0, startY, totalPerc * w, dynamicH, Color(255,255,0,50), true, true)
1333+
elseif blobsProfiler.Modules[moduleName].flashyUpdate then
1334+
if (statePanel.GetActiveTab and statePanel:GetActiveTab() == s) then -- TODO: DPanel subModuleTabs will never stop flashing
1335+
blobsProfiler.Modules[moduleName].flashyUpdate = nil
1336+
return
1337+
end
1338+
1339+
local flashState = math.floor(CurTime() / 0.35) % 2 == 0
1340+
1341+
if flashState then
1342+
local dynamicH = (statePanel.GetActiveTab and statePanel:GetActiveTab() == s) and h-7 or h -- this is SO dumb
1343+
local startY = (statePanel.GetActiveTab and statePanel:GetActiveTab() == s) and 0 or 1
1344+
draw.RoundedBoxEx(4, 0, startY, w, dynamicH, Color(0,255,0,50), true, true)
1345+
end
1346+
end
1347+
end
12881348
end
12891349
end
12901350

@@ -1368,14 +1428,20 @@ local function handleSVDataUpdate(rawModuleName, dataTable)
13681428
blobsProfiler.Log(blobsProfiler.L_DEBUG, "requestData module: ".. rawModuleName)
13691429

13701430
if #moduleSplit == 2 then -- ew
1371-
subModule = moduleSplit[2]
1431+
subModule = moduleSplit[2]
1432+
1433+
if blobsProfiler.Modules[moduleName].childrenReceiving[moduleName .. "." .. subModule] then
1434+
blobsProfiler.Modules[moduleName].childrenReceiving[moduleName .. "." .. subModule] = nil
1435+
end
13721436
end
1373-
1437+
13741438
if not subModule then
13751439
if blobsProfiler.Modules[moduleName] then
13761440
blobsProfiler.SetRealmData("Server", moduleName, dataTable)
13771441
blobsProfiler.Modules[moduleName].retrievingData = false
13781442

1443+
blobsProfiler.Modules[moduleName].flashyUpdate = true
1444+
13791445
if blobsProfiler.Modules[moduleName].BuildPanel then
13801446
blobsProfiler.Modules[moduleName].BuildPanel("Server", blobsProfiler.Modules[moduleName].ServerTab)
13811447
blobsProfiler.Log(blobsProfiler.L_DEBUG, "Module.BuildPanel completed for module "..moduleName.. " (Server)")
@@ -1386,6 +1452,9 @@ local function handleSVDataUpdate(rawModuleName, dataTable)
13861452
blobsProfiler.SetRealmData("Server", rawModuleName, dataTable)
13871453
blobsProfiler.Modules[moduleName].SubModules[subModule].retrievingData = false
13881454

1455+
blobsProfiler.Modules[moduleName].flashyUpdate = true
1456+
blobsProfiler.Modules[moduleName].SubModules[subModule].flashyUpdate = true
1457+
13891458
if blobsProfiler.Modules[moduleName].SubModules[subModule].BuildPanel then
13901459
blobsProfiler.Modules[moduleName].SubModules[subModule].BuildPanel("Server", blobsProfiler.Modules[moduleName].SubModules[subModule].ServerTab)
13911460
blobsProfiler.Log(blobsProfiler.L_DEBUG, "Module.BuildPanel completed for ".. moduleName .." submodule ".. subModule.. " (Server)")
@@ -1402,6 +1471,9 @@ net.Receive("blobsProfiler:requestData", function()
14021471
local currentChunk = net.ReadUInt(16)
14031472
local chunkData = net.ReadData(blobsProfiler.svDataChunkSize)
14041473

1474+
local moduleSplit = string.Explode(".", moduleName)
1475+
local moduleParent = moduleSplit[1]
1476+
14051477
if not blobsProfiler.chunkModuleData[moduleName] then
14061478
blobsProfiler.chunkModuleData[moduleName] = {
14071479
totalChunks = totalChunks,
@@ -1415,11 +1487,21 @@ net.Receive("blobsProfiler:requestData", function()
14151487

14161488
table.insert(blobsProfiler.chunkModuleData[moduleName].receivedChunks, chunkData)
14171489

1490+
blobsProfiler.Modules[moduleParent].childrenReceiving = blobsProfiler.Modules[moduleParent].childrenReceiving or {}
1491+
blobsProfiler.Modules[moduleParent].childrenReceiving[moduleName] = blobsProfiler.chunkModuleData[moduleName]
1492+
14181493
if #blobsProfiler.chunkModuleData[moduleName].receivedChunks == totalChunks then
14191494
local fullData = table.concat(blobsProfiler.chunkModuleData[moduleName].receivedChunks)
14201495
blobsProfiler.chunkModuleData[moduleName] = util.JSONToTable(util.Decompress(fullData))
14211496

14221497
handleSVDataUpdate(moduleName, blobsProfiler.chunkModuleData[moduleName])
1498+
1499+
blobsProfiler.chunkModuleData[moduleName] = nil
1500+
blobsProfiler.Modules[moduleParent].childrenReceiving[moduleName] = nil
1501+
1502+
if table.Count(blobsProfiler.Modules[moduleParent].childrenReceiving) == 0 then
1503+
blobsProfiler.Modules[moduleParent].childrenReceiving = nil
1504+
end
14231505
end
14241506
end)
14251507

0 commit comments

Comments
 (0)