Advance standalone admission, finite artillery and native validation
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
// One finite response per delivered observation at this battery. Cancellation
|
||||
// does not turn the same radio message into new ammunition authorization.
|
||||
class ERR_MortarReportLedger
|
||||
{
|
||||
protected ref map<int, float> m_Attempts = new map<int, float>();
|
||||
|
||||
bool Available(int messageId, float observedAt, float now)
|
||||
{
|
||||
if (messageId <= 0 || observedAt < 0 || now < observedAt || now - observedAt > ERR_MortarPrediction.MAX_REPORT_AGE_MS) return false;
|
||||
for (int i = m_Attempts.Count() - 1; i >= 0; i--)
|
||||
if (now - m_Attempts.GetElement(i) > ERR_MortarPrediction.MAX_REPORT_AGE_MS) m_Attempts.Remove(m_Attempts.GetKey(i));
|
||||
return !m_Attempts.Contains(messageId) && m_Attempts.Count() < 128;
|
||||
}
|
||||
bool Claim(int messageId, float observedAt, float now)
|
||||
{
|
||||
if (!Available(messageId, observedAt, now)) return false;
|
||||
m_Attempts.Insert(messageId, observedAt);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user