Exemple #1
0
        private Window(string jsonData) : base()
        {
            Instance = this;
            Nodes    = new();

            StyleSheet.Load("/ui/visual-programming/Window.scss");

            AddClass("fullscreen");
            AddClass("visualprogramming");

            Header.NavigationHeader.OnCreateWindowHeader = (header) =>
            {
                Button saveButton = new("", "save", () => Save());
                saveButton.AddClass("save");

                header.AddChild(saveButton);

                Button loadButton = new("", "folder_open", () => Load());
                loadButton.AddClass("load");

                header.AddChild(loadButton);

                BuildButton = new("", "play_arrow", () => Build());
                BuildButton.AddClass("play");

                header.AddChild(BuildButton);

                Button resetButton = new("", "delete", () => Reset());
                resetButton.AddClass("reset");

                header.AddChild(resetButton);
            };

            Header.NavigationHeader.Reload();

            Content.SetPanelContent((panelContent) =>
            {
                Workspace = new()
                {
                    Parent = panelContent
                };
                Sidebar = new(panelContent);

                LoadNodesFromStackJson(jsonData);

                foreach (Node node in Nodes)
                {
                    if (node is MainNode mainNode)
                    {
                        MainNode = mainNode;

                        break;
                    }
                }

                if (MainNode == null)
                {
                    MainNode = AddNode <MainNode>();
                    MainNode.Display();

                    Log.Warning("Missing main node in default visual programming stack");
                }
            });
        }
Exemple #2
0
        private void LoadNodesFromStackJson(string jsonData)
        {
            jsonData = jsonData.Replace("LibraryName", "StackNodeName").Replace("NodeReference", "LibraryName");

            List <object> jsonDataList = JsonSerializer.Deserialize <List <object> >(jsonData);

            foreach (object stackNode in jsonDataList)
            {
                Dictionary <string, object> saveStackNode = JsonSerializer.Deserialize <Dictionary <string, object> >((JsonElement)stackNode);

                if (!saveStackNode.TryGetValue("LibraryName", out object libraryName))
                {
                    continue;
                }

                Type type = Utils.GetTypeByLibraryName <Node>(libraryName.ToString());

                if (type == null)
                {
                    continue;
                }

                Node node = Utils.GetObjectByType <Node>(type);

                if (node == null)
                {
                    continue;
                }

                node.LoadFromJsonData(saveStackNode);
                AddNode(node);
            }

            foreach (Node node in Nodes)
            {
                if (node is MainNode mainNode)
                {
                    MainNode = mainNode;
                }

                // connect nodes
                foreach (string id in node.ConnectionInputIds)
                {
                    if (id == null)
                    {
                        continue;
                    }

                    Node idNode = Node.GetById(id);

                    if (idNode == null)
                    {
                        continue;
                    }

                    idNode.ConnectWithNode(node);
                }

                node.Display();
            }

            Log.Debug($"Loaded: '{jsonData}'");
        }