From f2c0d63a49bdf22fe16807e1d7ecadd1d61562a0 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 7 May 2021 23:58:19 +0200 Subject: [PATCH] Core - Don't fail entire frame on plugin fail --- src/Artemis.Core/Services/CoreService.cs | 40 ++++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs index 28f590376..f907bd0e8 100644 --- a/src/Artemis.Core/Services/CoreService.cs +++ b/src/Artemis.Core/Services/CoreService.cs @@ -119,11 +119,24 @@ namespace Artemis.Core.Services try { _frameStopWatch.Restart(); + + // Render all active modules + SKTexture texture = _rgbService.OpenRender(); + lock (_dataModelExpansions) { // Update all active modules, check Enabled status because it may go false before before the _dataModelExpansions list is updated foreach (BaseDataModelExpansion dataModelExpansion in _dataModelExpansions.Where(e => e.IsEnabled)) - dataModelExpansion.InternalUpdate(args.DeltaTime); + { + try + { + dataModelExpansion.InternalUpdate(args.DeltaTime); + } + catch (Exception e) + { + _updateExceptions.Add(e); + } + } } List modules; @@ -137,10 +150,16 @@ namespace Artemis.Core.Services // Update all active modules foreach (Module module in modules) - module.InternalUpdate(args.DeltaTime); - - // Render all active modules - SKTexture texture = _rgbService.OpenRender(); + { + try + { + module.InternalUpdate(args.DeltaTime); + } + catch (Exception e) + { + _updateExceptions.Add(e); + } + } SKCanvas canvas = texture.Surface.Canvas; canvas.Save(); @@ -152,7 +171,16 @@ namespace Artemis.Core.Services if (!ModuleRenderingDisabled) { foreach (Module module in modules.Where(m => m.IsActivated)) - module.InternalRender(args.DeltaTime, canvas, texture.ImageInfo); + { + try + { + module.InternalRender(args.DeltaTime, canvas, texture.ImageInfo); + } + catch (Exception e) + { + _updateExceptions.Add(e); + } + } } OnFrameRendering(new FrameRenderingEventArgs(canvas, args.DeltaTime, _rgbService.Surface));