Пример #1
0
        public void Work()
        {
            var manifest = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);

            var sourceObject = new RootModel()
            {
                FirstValue = "Lol",
                AChild     = new ChildModel()
                {
                },
                BChild   = null,
                Children = new ChildModel[]
                {
                    new ChildModel(),
                    null
                },
                MoreChildren = new Dictionary <string, ChildModel>()
                {
                    ["alpha"] = new ChildModel()
                    {
                    },
                    ["beta"] = null
                }
            };

            var editorSession = new EditorSession(manifest, sourceObject, new JsonSerializer());

            DrawTree(editorSession.Root);

            editorSession.Root["BChild"].SetValue(new ChildModel());
            editorSession.Root["BChild"].ApplyModifiedProperties();

            DrawTree(editorSession.Root);
        }
Пример #2
0
        public void WorkWithGenerics()
        {
            var manifest = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);

            var generic = new GenericModel()
            {
                Data = JObject.FromObject(new ChildModel()),
                Type = "ChildModel"
            };

            var editorSession = new EditorSession(manifest, generic, new JsonSerializer());

            DrawTree(editorSession.Root);
        }
Пример #3
0
        public EditorSessionFrame(IResource resource)
        {
            Resource = resource;

            JObject editorTarget;

            using (var editorTargetData = Resource.LoadStream())
                using (var sr = new StreamReader(editorTargetData))
                    using (var reader = new JsonTextReader(sr))
                    {
                        editorTarget = JObject.Load(reader);
                    }

            var manifest = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);

            string typeName = null;

            if (Resource.Tags.Contains("type-building"))
            {
                typeName = "BuildingTemplate";
            }
            else if (Resource.Tags.Contains("type-resource"))
            {
                typeName = "ResourceTemplate";
            }
            else if (Resource.Tags.Contains("type-buildingpack"))
            {
                typeName = "BuildingPackTemplate";
            }
            else if (Resource.Tags.Contains("gamerules"))
            {
                typeName = "GameRulesTemplate";
            }
            else
            {
                typeName = "ProceduralItemTemplate";
            }

            EditorSession = new EditorSession(manifest, editorTarget, typeName, serializer);

            EditorSession.OnChanged += () =>
            {
                HasUnsavedChanges = true;
            };

            var feature = EditorSession.Root.GetOrCreateFeature <FramedEditorSessionFeature>();

            feature.Frame = this;
        }
Пример #4
0
        public void Work()
        {
            var manifest = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);

            Console.Write(manifest.ToString());

            var sourceObject = new RootModel()
            {
                FirstValue = "Lol",
                AChild     = new ChildModel()
                {
                },
                BChild   = null,
                Children = new ChildModel[]
                {
                    new ChildModel(),
                    null
                },
                MoreChildren = new Dictionary <string, ChildModel>()
                {
                    ["alpha"] = new ChildModel()
                    {
                    },
                    ["beta"] = null
                }
            };

            var editorSession = new EditorSession(manifest, sourceObject, new JsonSerializer());

            DrawTree(editorSession.Root);

            var newChild = new ChildModel()
            {
                ChildFirstValue  = -10,
                ChildSecondValue = true
            };

            (editorSession.Root.Fields["AChild"].Value as EditorObject).PopulateObject(newChild);
            // (editorSession.Root.Fields["AChild"].Value as EditorEditableValue).ApplyModifiedProperties();

            TestContext.Error.WriteLine("===========");
            DrawTree(editorSession.Root);
        }
Пример #5
0
        private void HandleInput()
        {
            if (currentEvent.type == EventType.MouseUp)
            {
                switch (View.CurrentMode)
                {
                case BehaviourEditorView.ControlMode.NodeDragging:
                    currentEvent.Use();

                    foreach (string selectedNode in View.Selection)
                    {
                        var nodesField       = View.EditorObject.Fields["Nodes"];
                        var selectedNodeData = (nodesField.Value as EditorDictionary).KeyValuePairs[selectedNode].Value as EditorObject;
                        var editor           = selectedNodeData.Fields["Editor"].Value as EditorObject;
                        var editorPosition   = editor.Fields["Position"].Value as EditorObject;

                        var posX = editorPosition.Fields["x"].Value as EditorValue;
                        posX.ApplyModifiedProperties();

                        var posY = editorPosition.Fields["y"].Value as EditorValue;
                        posY.ApplyModifiedProperties();
                    }
                    View.CurrentMode = BehaviourEditorView.ControlMode.None;
                    break;

                case BehaviourEditorView.ControlMode.ViewDragging:
                    View.CurrentMode = BehaviourEditorView.ControlMode.None;
                    break;

                case BehaviourEditorView.ControlMode.CreatingConnection:
                    View.CurrentMode = BehaviourEditorView.ControlMode.None;
                    break;
                }
                Window.Repaint();
            }
            else if (currentEvent.type == EventType.KeyDown)
            {
                if (currentEvent.keyCode == KeyCode.Space)
                {
                    var position = new PackageNodePosition()
                    {
                        x = (int)currentEvent.mousePosition.x,
                        y = (int)currentEvent.mousePosition.y
                    };
                    var window = new BehaviourGraphAddNodeDropdown(BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain), (newNodeObject) =>
                    {
                        string newNodeType = (string)newNodeObject;

                        var graphEditorNodesField = View.EditorObject.Fields["Nodes"];
                        var graphEditorNodes      = graphEditorNodesField.Value as EditorDictionary;

                        string newId = LocalId.NewId().ToString();
                        graphEditorNodes.Add(newId);

                        var newNode  = graphEditorNodes.KeyValuePairs[newId];
                        var nodeData = new JObject();

                        /*newNode.SetValue(new SerializedNode()
                         * {
                         *      Type = newNodeType,
                         *      Data = nodeData,
                         *      Editor = new PackageNodeEditor()
                         *      {
                         *              Position = position
                         *      }
                         * });
                         * newNode.ApplyModifiedProperties();
                         */
                        Window.Repaint();
                    });

                    window.Show(new Rect(currentEvent.mousePosition.x, currentEvent.mousePosition.y, 0, 0));
                }
                else if (currentEvent.keyCode == KeyCode.Delete)
                {
                    var graphEditorNodesField = View.EditorObject.Fields["Nodes"];
                    var graphEditorNodes      = graphEditorNodesField.Value as EditorDictionary;

                    foreach (string node in View.Selection)
                    {
                        graphEditorNodes.Remove(node);
                    }
                }
            }
            else if (currentEvent.type == EventType.MouseDrag)
            {
                switch (View.CurrentMode)
                {
                case BehaviourEditorView.ControlMode.NodeDragging:
                    foreach (string selectedNode in View.Selection)
                    {
                        var nodesField       = View.EditorObject.Fields["Nodes"];
                        var selectedNodeData = (nodesField.Value as EditorDictionary).KeyValuePairs[selectedNode].Value as EditorObject;
                        var editor           = selectedNodeData.Fields["Editor"].Value as EditorObject;
                        var editorPosition   = editor.Fields["Position"].Value as EditorObject;

                        var posX = editorPosition.Fields["x"].Value as EditorValue;
                        posX.SetValue(posX.GetValue <int>() + ((int)currentEvent.delta.x));

                        var posY = editorPosition.Fields["y"].Value as EditorValue;
                        posY.SetValue(posY.GetValue <int>() + ((int)currentEvent.delta.y));
                    }
                    break;

                case BehaviourEditorView.ControlMode.ViewDragging:
                    View.PanPosition += currentEvent.delta;
                    break;
                }
                Window.Repaint();
            }
            else if (currentEvent.type == EventType.MouseDown)
            {
                if (Position.Contains(currentEvent.mousePosition))
                {
                    GUI.UnfocusWindow();
                    GUI.FocusControl("");

                    View.CurrentMode = BehaviourEditorView.ControlMode.ViewDragging;

                    currentEvent.Use();
                    Window.Repaint();
                }
            }
        }
Пример #6
0
        public static void Run()
        {
            var manifest = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);

            File.WriteAllText("Content/RPGCoreMath.bmfst", manifest.ToString());

            Console.WriteLine("Importing Graph...");

            var importPipeline = ImportPipeline.Create().Build();

            var proj = ProjectExplorer.Load("Content/Core", importPipeline);

            Console.WriteLine(proj.Definition.Properties.Name);
            Console.WriteLine($"\t\"{proj.Definition.Properties.Name}\"");
            foreach (var resource in ((IExplorer)proj).Resources)
            {
                Console.WriteLine($"\t{resource.FullName}");
            }

            var editorTargetResource = proj.Resources["Fireball/Main.json"];
            var editorTargetData     = editorTargetResource.Content.LoadStream();

            JObject editorTarget;

            var serializer = new JsonSerializer();

            using (var sr = new StreamReader(editorTargetData))
                using (var reader = new JsonTextReader(sr))
                {
                    editorTarget = JObject.Load(reader);
                }

            var editor = new EditorSession(manifest, editorTarget, "SerializedGraph", serializer);

            foreach (var node in (editor.Root.Fields["Nodes"].Value as EditorObject).Fields.Values)
            {
                var nodeData = (node.Value as EditorObject).Fields["Data"];

                foreach (var field in (nodeData.Value as EditorObject).Fields.Values)
                {
                    var editableValue = field.Value as EditorValue;

                    Console.WriteLine($"{field}");
                    if (field.Field.Name == "MaxValue")
                    {
                        editableValue.SetValue(editableValue.GetValue <int>() + 10);
                        editableValue.ApplyModifiedProperties();

                        editableValue.SetValue(editableValue.GetValue <int>());
                        editableValue.ApplyModifiedProperties();
                    }
                    else if (field.Field.Name == "ValueB")
                    {
                        Console.WriteLine(editableValue.GetValue <LocalPropertyId>());
                    }
                }
            }

            using (var file = editorTargetResource.Content.OpenWrite())
                using (var sr = new StreamWriter(file))
                    using (var jsonWriter = new JsonTextWriter(sr)
                    {
                        Formatting = Formatting.Indented
                    })
                    {
                        serializer.Serialize(jsonWriter, editorTarget);
                    }

            Console.WriteLine(new DirectoryInfo("Content/Temp").FullName);

            var consoleRenderer = new BuildConsoleRenderer();

            var buildPipeline = new BuildPipeline();

            buildPipeline.Exporters.Add(new BhvrExporter());
            buildPipeline.BuildActions.Add(consoleRenderer);

            consoleRenderer.DrawProgressBar(32);
            proj.ExportZippedToDirectory(buildPipeline, "Content/Temp");

            Console.WriteLine("Exported package...");
            var exportedPackage = PackageExplorer.LoadFromFileAsync("Content/Temp/Core.bpkg").Result;

            var fireballAsset = exportedPackage.Resources["Fireball/Main.json"];
            var data          = fireballAsset.Content.LoadStream();

            SerializedGraph packageItem;

            using (var sr = new StreamReader(data))
                using (var reader = new JsonTextReader(sr))
                {
                    packageItem = serializer.Deserialize <SerializedGraph>(reader);
                }

            Console.WriteLine("Imported: " + fireballAsset.Name);
            var unpackedGraph = packageItem.Unpack();

            Console.WriteLine("Running Simulation...");

            var player = new DemoPlayer();

            IGraphInstance instancedItem = unpackedGraph.Create();

            instancedItem.Setup();
            instancedItem.SetInput(player);
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(100);
                player.Health.Value -= 10;
            }
            instancedItem.Remove();

            var settings = new JsonSerializerSettings();

            settings.Converters.Add(new LocalIdJsonConverter());
            settings.Converters.Add(new SerializedGraphInstanceProxyConverter(null));

            string serializedGraph = JsonConvert.SerializeObject(instancedItem, settings);

            // var packedInstance = ((GraphInstance)instancedItem).Pack ();
            // string serializedGraph = packedInstance.AsJson ();
            Console.WriteLine(serializedGraph);

            var deserialized     = JsonConvert.DeserializeObject <SerializedGraphInstance>(serializedGraph);
            var unpackedInstance = deserialized.Unpack(unpackedGraph);

            unpackedInstance.SetInput(player);
            unpackedInstance.Setup();
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(100);
                player.Health.Value -= 20;
            }
            unpackedInstance.Remove();

            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(100);
                player.Health.Value -= 20;
            }
        }
Пример #7
0
        private void BuildProject(List <TreeViewItem> collection, IExplorer explorer, int depth, ref int id)
        {
            var newItem = new ContentTreeViewItem
            {
                displayName = explorer.Definition.Properties.Name,
                id          = id++,
                depth       = depth,
                icon        = ContentEditorResources.Instance.ProjectIcon,

                item = explorer
            };

            idToItemMapping[newItem.id] = newItem;
            collection.Add(newItem);

            collection.Add(new ContentTreeViewItem
            {
                displayName = "Dependancies",
                id          = id++,
                depth       = depth + 1,
                icon        = ContentEditorResources.Instance.DependanciesIcon,

                item = null
            });

            collection.Add(new ContentTreeViewItem
            {
                displayName = "Manifests",
                id          = id++,
                depth       = depth + 2,
                icon        = ContentEditorResources.Instance.ManifestDependancyIcon,

                item = null
            });

            var manifestItem         = BehaviourManifest.CreateFromAppDomain(AppDomain.CurrentDomain);
            var manifestTreeViewItem = new ContentTreeViewItem
            {
                displayName = "RPGCore 1.0.0",
                id          = id++,
                depth       = depth + 3,
                icon        = ContentEditorResources.Instance.ManifestDependancyIcon,

                item = manifestItem
            };

            idToItemMapping[manifestTreeViewItem.id] = manifestTreeViewItem;
            collection.Add(manifestTreeViewItem);

            collection.Add(new ContentTreeViewItem
            {
                displayName = "Projects",
                id          = id++,
                depth       = depth + 2,
                icon        = ContentEditorResources.Instance.ProjectDependancyIcon,

                item = null
            });

            BuildDirectory(collection, explorer.RootDirectory, depth + 1, ref id);
        }