Handling exceptions thrown at any point during coroutine update, not just at Coroutine.MoveNext, dirty workaround for a (rare?) pathfinding bug I haven't been able to reproduce

This commit is contained in:
Regalis
2016-07-21 21:20:21 +03:00
parent 8abea5c0c7
commit dd9b78f8ff
3 changed files with 37 additions and 30 deletions

View File

@@ -65,42 +65,42 @@ namespace Barotrauma
for (int i = Coroutines.Count-1; i>=0; i--)
{
if (Coroutines[i].Coroutine.Current != null)
try
{
WaitForSeconds wfs = Coroutines[i].Coroutine.Current as WaitForSeconds;
if (wfs != null)
if (Coroutines[i].Coroutine.Current != null)
{
if (!wfs.CheckFinished(unscaledDeltaTime)) continue;
}
else
{
switch ((CoroutineStatus)Coroutines[i].Coroutine.Current)
WaitForSeconds wfs = Coroutines[i].Coroutine.Current as WaitForSeconds;
if (wfs != null)
{
case CoroutineStatus.Success:
Coroutines.RemoveAt(i);
continue;
case CoroutineStatus.Failure:
DebugConsole.ThrowError("Coroutine ''" + Coroutines[i]+ "'' has failed");
break;
if (!wfs.CheckFinished(unscaledDeltaTime)) continue;
}
else
{
switch ((CoroutineStatus)Coroutines[i].Coroutine.Current)
{
case CoroutineStatus.Success:
Coroutines.RemoveAt(i);
continue;
case CoroutineStatus.Failure:
DebugConsole.ThrowError("Coroutine ''" + Coroutines[i]+ "'' has failed");
break;
}
}
}
Coroutines[i].Coroutine.MoveNext();
}
//try
//{
Coroutines[i].Coroutine.MoveNext();
//}
//catch (Exception e)
//{
// DebugConsole.ThrowError("Coroutine " + Coroutines[i].Name + " threw an exception: " + e.Message);
catch (Exception e)
{
DebugConsole.ThrowError("Coroutine " + Coroutines[i].Name + " threw an exception: " + e.Message);
//#if DEBUG
// throw e;
//#endif
// Coroutines.RemoveAt(i);
// }
Coroutines.RemoveAt(i);
}
}
}