void AddComponent <T>(IGraphInstance ctx, Entity entity, T componentData) where T : struct, IComponentData
 {
     if (!ctx.EntityManager.HasComponent <T>(entity))
     {
         ctx.EntityManager.AddComponent <T>(entity);
     }
     ctx.EntityManager.SetComponentData(entity, componentData);
 }
Example #2
0
            public void Setup(IGraphInstance graph, Node parent, Actor target)
            {
                this.target = target;
                AiRandNode stats = (AiRandNode)parent;

                random.OnRequested += RandomRequested;

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("AiRandNode: Setup Behaviour on " + this.target);
            }
Example #3
0
            public void Setup(IGraphInstance graph, Node parent, Actor target)
            {
                this.target = target;
                RollNode stats = (RollNode)parent;

                int newValue = new Random().Next(stats.MinValue, stats.MaxValue);

                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("RollNode: Setup Behaviour on " + this.target + " with a value of " + newValue);

                output.Value = newValue;
            }
Example #4
0
            public void Setup(IGraphInstance graph, Node parent, Actor target)
            {
                this.target = target;
                AiOrNode stats = (AiOrNode)parent;

                graph.Connect(ref stats.RequirementA, out requirementA);
                graph.Connect(ref stats.RequirementB, out requirementB);

                Console.ForegroundColor = ConsoleColor.Gray;
                //Console.WriteLine("AiOrNode: Fetching A " + requirementA.Weight);
                //Console.WriteLine("AiOrNode: Fetching B " + requirementB.Weight);
            }
Example #5
0
            public void Setup(IGraphInstance graph, Node parent, Actor target)
            {
                this.target = target;

                StatsNode stats = (StatsNode)parent;

                valueA.OnAfterChanged        += Log;
                valueB.OnAfterChanged        += Log;
                target.Health.Handlers[this] += new LogOnChanged(this);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("StatsNode: Setup Behaviour on " + this.target);
            }
        public static Value ApplyBinMath(this IGraphInstance graphInstance, InputDataMultiPort inputPort, MathGeneratedFunction binFunction)
        {
            var dataCount = inputPort.DataCount;

            Value[] values = new Value[dataCount];
            for (uint i = 0; i < dataCount; i++)
            {
                values[i] = graphInstance.ReadValue(inputPort.SelectPort(i));
            }
            var mathDelegate = GetDelegate(binFunction);

            return(mathDelegate(values));
        }
Example #7
0
            public override void Setup(IGraphInstance graph, Actor target)
            {
                Target = target;

                ValueA.OnAfterChanged        += Log;
                ValueB.OnAfterChanged        += Log;
                target.Health.Handlers[this] += new LogOnChanged(this);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine($"StatsNode: Setup Behaviour on {target}");

                Console.WriteLine($"StatsNode: Connected to {graph.GetSource (ValueA)}");
                Console.WriteLine($"StatsNode: Connected to {graph.GetSource (ValueB)}");
            }
Example #8
0
            public override void Setup(IGraphInstance graph, Actor target)
            {
                Target = target;

                while (Seed == 0)
                {
                    Seed = new Random().Next();
                }

                int newValue = new Random(Seed).Next(Node.MinValue, Node.MaxValue);

                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("RollNode: Output set to " + newValue);

                Output.Value = newValue;
            }
Example #9
0
        public void Start()
        {
            var nodes = NodeManifest.Construct(
                new Type[] {
                typeof(AddNode),
                typeof(RollNode),
                typeof(OutputValueNode),
                typeof(ItemInputNode),
                typeof(GetStatNode),
                typeof(IterateNode),
            }
                );
            var types = TypeManifest.ConstructBaseTypes();

            var manifest = new BehaviourManifest()
            {
                Nodes = nodes,
                Types = types
            };

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

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

            var proj = ProjectExplorer.Load("Content/Tutorial");

            Console.WriteLine(proj.Name);
            Console.WriteLine("\t\"" + proj.Name + "\"");
            foreach (var resource in ((IPackageExplorer)proj).Resources)
            {
                Console.WriteLine("\t" + resource.FullName);
            }

            var editorTargetResource = proj.Resources["Tutorial Gamerules/Main.bhvr"];
            var editorTargetData     = editorTargetResource.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["Nodes"])
            {
                var nodeData = node["Data"];

                foreach (var field in nodeData)
                {
                    Console.WriteLine($"{field}");
                    if (field.Name == "MaxValue")
                    {
                        field.SetValue(field.GetValue <int> () + 10);
                        field.ApplyModifiedProperties();

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

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

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

            var consoleRenderer = new BuildConsoleRenderer();

            var buildPipeline = new BuildPipeline()
            {
                Exporters = new List <ResourceExporter> ()
                {
                    new BhvrExporter()
                },
                BuildActions = new List <IBuildAction> ()
                {
                    consoleRenderer
                }
            };

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

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

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

            SerializedGraph packageItem;

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

            Console.WriteLine("Imported: " + packageItem.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    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;
            }
        }
Example #10
0
 public abstract InputMap[] Inputs(IGraphInstance graph, object instance);
Example #11
0
 public abstract OutputMap[] Outputs(IGraphInstance graph, object instance);
Example #12
0
 public override OutputMap[] Outputs(IGraphInstance graph, Metadata instance) => null;
Example #13
0
 public abstract void Setup(IGraphInstance graph, INodeInstance metadata, Actor target);
Example #14
0
 public override void Setup(IGraphInstance graph, Actor target)
 {
 }
Example #15
0
 public override InputMap[] Inputs(IGraphInstance graph, Metadata instance) => new[]
 {
     graph.Connect(ref ValueA, out instance.valueA),
     graph.Connect(ref ValueB, out instance.valueB)
 };
Example #16
0
 public abstract void Setup(IGraphInstance graph, INodeInstance metadata);
Example #17
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;
            }
        }
Example #18
0
 public override InputMap[] Inputs(IGraphInstance graph, Metadata instance) => new[]
 {
     graph.Connect(ref RequirementA, out instance.requirementA),
     graph.Connect(ref RequirementB, out instance.requirementB)
 };
Example #19
0
 public override OutputMap[] Outputs(IGraphInstance graph, Metadata instance) => new[]
 {
     graph.Connect(ref Rand, out instance.random)
 };
Example #20
0
 public override OutputMap[] Outputs(IGraphInstance graph, Metadata instance) => new[]
 {
     graph.Connect(ref Output, out instance.output),
 };
Example #21
0
        public void Start()
        {
            var serializer = new JsonSerializer();

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

            var importPipeline = ImportPipeline.Create()
                                 .UseProcessor(new TagAllProjectResourceImporter())
                                 .Build();

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

            Console.WriteLine("Building project files...");
            RenderDirectory(projectExplorer.Archive.RootDirectory);

            var consoleRenderer = new BuildConsoleRenderer();

            var buildPipeline = new BuildPipeline();

            buildPipeline.BuildActions.Add(consoleRenderer);

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

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

            RenderDirectory(exportedPackage.Source);

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

            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);

            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;
            }
        }
Example #22
0
 public abstract void Setup(IGraphInstance graph, Actor target);