- funzioni di precollisione lama spostate in libreria apposita PreCollisionLib

- calcolo tempo esecuzione migliorato (TimeLib e riferimenti)
- idTempGroup ora è scritto nel Part per evitare di ricercarlo ogni volta
This commit is contained in:
luca.mazzoleni
2025-11-25 15:19:09 +01:00
parent 06a73a069f
commit 74a12a4a42
12 changed files with 368 additions and 287 deletions
+92 -40
View File
@@ -12,59 +12,111 @@ EgtOutLog( ' TimeLib started', 1)
TimeLib.__index = TimeLib
function TimeLib.new()
local self = setmetatable({}, TimeLib)
self.dStartTime = os.clock()
self.Checkpoints = {} -- each checkpoint stores first and last timestamps
return self
local TimeLibInstance = setmetatable({}, TimeLib)
TimeLibInstance.dStartTime = os.clock()
TimeLibInstance.Measurements = {}
return TimeLibInstance
end
-- reset timer
-- reset entire timer
function TimeLib:start()
self.dStartTime = os.clock()
self.Checkpoints = {}
self.Measurements = {}
end
-- setta un checkpoint con nome (default se non specificato)
function TimeLib:setCheckpoint( sName)
local sCpName = sName or "default"
local dNow = os.clock()
-- start elapsed measurement for a specific name
function TimeLib:startElapsed(sName)
local sMeasurementName = sName or "Default"
local dNow = os.clock()
if not self.Checkpoints[sCpName] then
self.Checkpoints[sCpName] = { dFirst = dNow, dLast = dNow }
else
self.Checkpoints[sCpName].dLast = dNow
end
if not self.Measurements[sMeasurementName] then
self.Measurements[sMeasurementName] = {
dStart = dNow,
dLast = 0,
dCumulative = 0,
dRecent = 0,
nCount = 0
}
else
self.Measurements[sMeasurementName].dStart = dNow
end
end
-- ritorna il tempo trascorso
-- se settato un checkpoint, ritorna anche il tempo di quel checkpoint, cumulativo (dal primo checkpoint settato con quel nome) e recente (dall'ultimo checkpoint settato)
function TimeLib:elapsed( sCheckpointName)
local dTotal = os.clock() - self.dStartTime
local sCpName = sCheckpointName or "default"
local Checkpoint = self.Checkpoints[sCpName]
-- stop elapsed measurement (increments count and updates cumulative)
function TimeLib:stopElapsed(sName)
local sMeasurementName = sName or "Default"
local dNow = os.clock()
local Measurement = self.Measurements[sMeasurementName]
if Checkpoint then
local dCumulative = os.clock() - Checkpoint.dFirst
local dRecent = os.clock() - Checkpoint.dLast
return dTotal, dCumulative, dRecent
else
return dTotal, nil, nil
end
if Measurement and Measurement.dStart then
local dDuration = dNow - Measurement.dStart
Measurement.dRecent = dDuration
Measurement.dCumulative = Measurement.dCumulative + dDuration
Measurement.dLast = dNow
Measurement.nCount = Measurement.nCount + 1
Measurement.dStart = nil
else
-- if stop called without start, initialize with zero
self.Measurements[sMeasurementName] = {
dStart = nil,
dLast = dNow,
dCumulative = 0,
dRecent = 0,
nCount = 0
}
end
end
-- log del tempo trascorso, come sopra
function TimeLib:logElapsed( sCheckpointName)
local dTotal, dCumulative, dRecent = self:elapsed( sCheckpointName)
local sCpName = sCheckpointName or "default"
-- reset elapsed for a specific measurement
function TimeLib:resetElapsed(sName)
local sMeasurementName = sName or "Default"
self.Measurements[sMeasurementName] = nil
end
if dCumulative then
EgtOutLog( string.format(
"%s time: recent %.3f, cumulative %.3f, total %.3f",
sCpName, dRecent, dCumulative, dTotal))
else
EgtOutLog( string.format("Total %.3f (no checkpoint '%s' set)",
dTotal, sCpName))
end
-- return elapsed times: total, cumulative, recent, count
function TimeLib:getElapsed(sName)
local dTotal = os.clock() - self.dStartTime
local sMeasurementName = sName or "Default"
local Measurement = self.Measurements[sMeasurementName]
if Measurement then
return dTotal, Measurement.dCumulative, Measurement.dRecent, Measurement.nCount
else
return dTotal, nil, nil, 0
end
end
-- log elapsed times for one measurement
function TimeLib:logElapsed(sName)
local dTotal, dCumulative, dRecent, nCount = self:getElapsed(sName)
local sMeasurementName = sName or "Default"
if dCumulative then
EgtOutLog(string.format(
"%s(#%d): recent %.3f, cumulative %.3f, total %.3f",
sMeasurementName, nCount, dRecent, dCumulative, dTotal))
else
EgtOutLog(string.format("Total %.3f (no '%s' measurement started)",
dTotal, sMeasurementName))
end
end
-- log elapsed times for all measurements
function TimeLib:logAllElapsed()
local dTotal = os.clock() - self.dStartTime
if next(self.Measurements) == nil then
EgtOutLog(string.format("Total %.3f (no measurements started)", dTotal))
return
end
for sMeasurementName, Measurement in pairs(self.Measurements) do
local dCumulative = Measurement.dCumulative
local dRecent = Measurement.dRecent
local nCount = Measurement.nCount
EgtOutLog(string.format(
"%s(#%d): recent %.3f, cumulative %.3f, total %.3f",
sMeasurementName, nCount, dRecent, dCumulative, dTotal))
end
end
return TimeLib