From 405d5b756cebf250cb8b8130c482913302a41f19 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 21 Aug 2021 15:33:55 +0200 Subject: [PATCH] Nodes - Serialize node storage ourselves to ignore exceptions --- src/Artemis.Core/Services/NodeService.cs | 10 +++++++++- src/Artemis.Core/VisualScripting/Interfaces/INode.cs | 2 +- src/Artemis.Core/VisualScripting/NodeScript.cs | 4 ++-- .../Entities/Profile/Nodes/NodeEntity.cs | 2 +- src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs | 3 +++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Artemis.Core/Services/NodeService.cs b/src/Artemis.Core/Services/NodeService.cs index fd09d8de5..82cf2d4f7 100644 --- a/src/Artemis.Core/Services/NodeService.cs +++ b/src/Artemis.Core/Services/NodeService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Reflection; using Artemis.Storage.Entities.Profile.Nodes; +using Newtonsoft.Json; using Ninject; using Ninject.Parameters; using SkiaSharp; @@ -73,7 +74,14 @@ namespace Artemis.Core.Services { node.X = entity.X; node.Y = entity.Y; - node.Storage = entity.Storage; + try + { + node.Storage = CoreJson.DeserializeObject(entity.Storage, true); + } + catch + { + // ignored + } } if (node is CustomViewModelNode customViewModelNode) diff --git a/src/Artemis.Core/VisualScripting/Interfaces/INode.cs b/src/Artemis.Core/VisualScripting/Interfaces/INode.cs index f17fd3352..5f415d987 100644 --- a/src/Artemis.Core/VisualScripting/Interfaces/INode.cs +++ b/src/Artemis.Core/VisualScripting/Interfaces/INode.cs @@ -12,7 +12,7 @@ namespace Artemis.Core public double X { get; set; } public double Y { get; set; } - public object Storage { get; set; } + public object? Storage { get; set; } public IReadOnlyCollection Pins { get; } public IReadOnlyCollection PinCollections { get; } diff --git a/src/Artemis.Core/VisualScripting/NodeScript.cs b/src/Artemis.Core/VisualScripting/NodeScript.cs index 8f675a56e..ba35ed922 100644 --- a/src/Artemis.Core/VisualScripting/NodeScript.cs +++ b/src/Artemis.Core/VisualScripting/NodeScript.cs @@ -96,7 +96,7 @@ namespace Artemis.Core continue; nodes.Add(entityNode.Id, node); } - + LoadConnections(nodes); _nodes.Clear(); @@ -179,7 +179,7 @@ namespace Artemis.Core Type = node.GetType().Name, X = node.X, Y = node.Y, - Storage = node.Storage, + Storage = CoreJson.SerializeObject(node.Storage, true), Name = node.Name, Description = node.Description, IsExitNode = node.IsExitNode diff --git a/src/Artemis.Storage/Entities/Profile/Nodes/NodeEntity.cs b/src/Artemis.Storage/Entities/Profile/Nodes/NodeEntity.cs index 6f33425f0..8a99bb8f0 100644 --- a/src/Artemis.Storage/Entities/Profile/Nodes/NodeEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/Nodes/NodeEntity.cs @@ -19,7 +19,7 @@ namespace Artemis.Storage.Entities.Profile.Nodes public bool IsExitNode { get; set; } public double X { get; set; } public double Y { get; set; } - public object Storage { get; set; } + public string Storage { get; set; } public List PinCollections { get; set; } } diff --git a/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs b/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs index 4d37fb320..c144e1847 100644 --- a/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs +++ b/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs @@ -88,6 +88,9 @@ namespace Artemis.VisualScripting.Nodes public override void Evaluate() { + if (Storage is double doubleValue) + Storage = (float) doubleValue; + Output.Value = Storage as float? ?? 0.0f; }