|
using System; |
|
|
|
namespace Unity.MLAgents |
|
{ |
|
internal class RecursionChecker : IDisposable |
|
{ |
|
private bool m_IsRunning; |
|
private string m_MethodName; |
|
|
|
public RecursionChecker(string methodName) |
|
{ |
|
m_MethodName = methodName; |
|
} |
|
|
|
public IDisposable Start() |
|
{ |
|
if (m_IsRunning) |
|
{ |
|
throw new UnityAgentsException( |
|
$"{m_MethodName} called recursively. " + |
|
"This might happen if you call EnvironmentStep() or EndEpisode() from custom " + |
|
"code such as CollectObservations() or OnActionReceived()." |
|
); |
|
} |
|
m_IsRunning = true; |
|
return this; |
|
} |
|
|
|
public void Dispose() |
|
{ |
|
|
|
m_IsRunning = false; |
|
} |
|
} |
|
} |
|
|