示例#1
0
        public IBehaviour Setup(Actor target)
        {
            INodeInstance[] behaviourTokens = new INodeInstance[Nodes.Length];

            int nodeCount = Nodes.Length;

            // Map and create tokens
            for (int i = 0; i < nodeCount; i++)
            {
                var node = Nodes[i];
                behaviourTokens[i] = node.Create();
            }

            var graphInstance = new GraphInstance(this, behaviourTokens);

            // Connect the token sockets
            for (int i = 0; i < nodeCount; i++)
            {
                Nodes[i].ConnectToken(graphInstance, behaviourTokens[i]);
            }

            // Setup tokens
            for (int i = 0; i < nodeCount; i++)
            {
                Nodes[i].Setup(graphInstance, behaviourTokens[i], target);
            }

            return(graphInstance);
        }
示例#2
0
        private static IVariableProperty <T> ToVariableProperty <T>(
            InputDataPort port
            , [NotNull] GraphInstance instance
            , [NotNull] GraphDefinition definition
            , [NotNull] Func <IVariableProperty <T> > createGraphVariable
            ) where T : unmanaged
        {
            var inputPortIndex = (int)port.Port.Index;

            Assert.IsTrue(inputPortIndex < definition.PortInfoTable.Count);
            var dataIndex = (int)definition.PortInfoTable[inputPortIndex].DataIndex;

            Assert.IsTrue(dataIndex < definition.DataPortTable.Count);
            var nodeIndex = (int)definition.DataPortTable[dataIndex].GetIndex();

            Assert.IsTrue(nodeIndex < definition.NodeTable.Count);
            var dataNode = definition.NodeTable[nodeIndex];

            if (dataNode is IVisualVariablePropertyNode propertyNode)
            {
                return(propertyNode.GetVariableProperty <T>(dataIndex, instance, definition));
            }

            if (dataNode is IVisualVariablePropertyNode <T> genericPropertyNode)
            {
                return(genericPropertyNode.GetVariableProperty(instance, definition));
            }

            if (dataNode is IConstantNode)
            {
                return(ToConstVariable <T>(instance, port));
            }

            return(createGraphVariable());
        }
        public void UpdateLogVariable()
        {
            GraphBuilder.VariableHandle varIndex = default;
            SetupTestGraphDefinitionMultipleFrames((b, inputs) =>
            {
                var constBool = b.AddNode(new ConstantBool {
                    Value = true
                });
                varIndex     = b.BindVariableToDataIndex("a");
                var onUpdate = b.AddNode(new OnUpdate());
                var log      = AddLogNode(b);

                b.CreateEdge(constBool.ValuePort, onUpdate.Enabled);
                b.CreateEdge(onUpdate.Output, log.Input);
                b.BindVariableToInput(varIndex, log.Messages.SelectPort(0));
            }, (manager, entity, index) =>
            {
                LogAssert.NoUnexpectedReceived();
                GraphInstance instance = GetGraphInstance(entity);
                instance.WriteValueToDataSlot(varIndex.DataIndex, 42);
            }, (manager, entity, index) =>
            {
                LogAssert.Expect(LogType.Log, "42");
            });
        }
示例#4
0
    public override IAnimGraphInstance Instantiate(EntityManager entityManager, Entity owner, PlayableGraph graph,
                                                   Entity animStateOwner)
    {
        var instance = new GraphInstance(entityManager, owner, graph, animStateOwner, this);

        return(instance);
    }
示例#5
0
        public void CustomGraphInstanceTest()
        {
            GraphType categoryType = GraphContext.Current.GetGraphType <Category>();

            GraphInstance instance = categoryType.Create("1");

            Assert.IsNotNull(instance);
        }
示例#6
0
        /// <summary>
        /// Creates a new instance of a Graph to be used in avaiable operations.
        /// </summary>
        private static void BuildGraphInstance()
        {
            string text = System.IO.File.ReadAllText(@"C:\VS-Workspaces\Projects\TW\Trains\TrainsAPI\CityConnections.txt");

            GraphInstance graph = GraphInstance.Instance;

            graph.BuildGraph(text);
        }
示例#7
0
 public override string FriendlyString()
 {
     if (GraphInstance != null && !GraphInstance.IsNull())
     {
         return(String.Format("{0}/{1}", GraphName, GraphInstance.Name));
     }
     return(String.Empty);
 }
示例#8
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.SuccessNode>(BuildImpl, null));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.SuccessNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
            }
        }
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.RunOnMainThreadNode>(BuildImpl, Children.ToBuilderNode(instance, definition)));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.RunOnMainThreadNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
            }
        }
示例#10
0
            /// <summary>
            /// Deletes an instance from the persistence store
            /// </summary>
            /// <param name="instance"></param>
            protected override void DeleteInstance(GraphInstance instance)
            {
                ISession session = sessionFactory.GetCurrentSession();

                using (ITransaction tx = session.BeginTransaction())
                {
                    session.Delete(instance.Instance.GetType().BaseType.ToString(), instance);
                    tx.Commit();
                }
            }
示例#11
0
        public int GetRouteDistance(string route)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance();
            }

            return(graph.Distance(route));
        }
示例#12
0
        public GraphRouteAlgorithmReturn GetShortestRoute(char startNode, char endNode)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance();
            }

            return(graph.ShortestRoute(startNode, endNode));
        }
示例#13
0
        public int GetAllRoutesMaxDistance(char startNode, char endNode, int maxDistance)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance();
            }

            return(graph.AllRoutesMaxDistance(startNode, endNode, maxDistance));
        }
示例#14
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.HasComponentNode>(BuildImpl, null));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.HasComponentNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                data.StableTypeHash = StableTypeHash;
            }
        }
示例#15
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.RepeatForeverNode>(BuildImpl, Children.ToBuilderNode(instance, definition)));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.RepeatForeverNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                data.BreakStates = BreakStates;
            }
        }
示例#16
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.DelayTimerNode>(BuildImpl, null));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.DelayTimerNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                @this.TimerSeconds.ToVariablePropertyReadWrite <System.Single>(instance, definition).Allocate(ref blobBuilder, ref data.TimerSeconds, self, builders);
            }
        }
示例#17
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.PrioritySelectorNode>(BuildImpl, Children.ToBuilderNode(instance, definition)));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.PrioritySelectorNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                blobBuilder.AllocateArray(ref data.Weights, Weights);
            }
        }
示例#18
0
        private static unsafe IVariableProperty <T> ToConstVariable <T>([NotNull] GraphInstance instance, InputDataPort port) where T : unmanaged
        {
            T     data;
            void *ptr   = &data;
            var   value = instance.ReadValue(port);

            Value.SetPtrToValue(ptr, value.Type, value);
            return(new CustomVariableProperty <T> {
                CustomValue = data
            });
        }
示例#19
0
        public IEnumerable <GraphRouteAlgorithmReturn> GetAllRoutesNumStops(char startNode, char endNode, int numStops)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance();
            }

            return(graph.AllRoutesNumStops(startNode, endNode, numStops));
        }
示例#20
0
        public HttpStatusCode PostGraph(string value)
        {
            if (value != null)
            {
                GraphInstance graph = GraphInstance.Instance;
                graph.BuildGraph(value);

                return(HttpStatusCode.Created);
            }
            return(HttpStatusCode.NotAcceptable);
        }
示例#21
0
            /// <summary>
            /// Persists an entity to the persistence store
            /// </summary>
            /// <param name="graphInstance"></param>
            protected override void SaveInstance(GraphInstance graphInstance)
            {
                ISession session = sessionFactory.GetCurrentSession();

                using (ITransaction tx = session.BeginTransaction())
                {
                    session.SaveOrUpdate(graphInstance.Instance.GetType().BaseType.ToString(), graphInstance.Instance);
                    tx.Commit();
                }

                this.OnSave(graphInstance);
            }
示例#22
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.DelayTimerNode>(BuildImpl, null));

            unsafe void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.DelayTimerNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                new DataPortReaderAndWriter(@this.IsLinkedTimerSeconds, @this.InputTimerSeconds, @this.OutputTimerSeconds).ToVariantReaderAndWriter <System.Single>(instance, definition).Allocate(ref blobBuilder, ref data.TimerSeconds, self, builders);
            }
        }
    }
示例#23
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.ModifyPriorityNode>(BuildImpl, null));

            void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.ModifyPriorityNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                data.PrioritySelectorIndex = PrioritySelectorIndex;
                data.WeightIndex           = WeightIndex;
                data.AddWeight             = AddWeight;
            }
        }
示例#24
0
        public int GetDistance(string route)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (graph.IsGraphBuilded())
            {
                return(graph.Distance(route));
            }
            else
            {
                throw new GraphNotBuildException();
            }
        }
示例#25
0
        public IEnumerable <GraphRouteAlgorithmReturn> GetAllRoutes(char startNode, char endNode, int maxStops)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (graph.IsGraphBuilded())
            {
                return(graph.AllRoutes(startNode, endNode, maxStops));
            }
            else
            {
                throw new GraphNotBuildException();
            }
        }
示例#26
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <EntitiesBT.Nodes.TimerNode>(BuildImpl, Children.ToBuilderNode(instance, definition)));

            unsafe void BuildImpl(BlobBuilder blobBuilder, ref EntitiesBT.Nodes.TimerNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                new DataPortReaderAndWriter(@this.IsLinkedCountdownSeconds, @this.InputCountdownSeconds, @this.OutputCountdownSeconds).ToVariantReaderAndWriter <System.Single>(instance, definition).Allocate(ref blobBuilder, ref data.CountdownSeconds, self, builders);
                data.BreakReturnState = BreakReturnState;
            }
        }
    }
示例#27
0
        public GraphRouteAlgorithmReturn GetShortestRoute(char startNode, char endNode)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (graph.IsGraphBuilded())
            {
                return(graph.ShortestRoute(startNode, endNode));
            }
            else
            {
                throw new GraphNotBuildException();
            }
        }
示例#28
0
        public int NumberOfTripsMaxStops(string inputRoutes, string route, int maxStops)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance(inputRoutes);
            }
            var nodes       = route.ToCharArray();
            var graphResult = graph.AllRoutesMaxStops(nodes[0], nodes[1], maxStops);

            return(graphResult.Count);
        }
示例#29
0
        public int ShortestRoute(string inputRoutes, string route)
        {
            GraphInstance graph = GraphInstance.Instance;

            if (!graph.IsGraphBuilded())
            {
                BuildGraphInstance(inputRoutes);
            }
            var nodes       = route.ToCharArray();
            var graphResult = graph.ShortestRoute(nodes[0], nodes[1]);

            return(graphResult.Value);
        }
示例#30
0
        public INodeDataBuilder GetBuilder(GraphInstance instance, GraphDefinition definition)
        {
            var @this = this;

            return(new VisualBuilder <TimerNode>(BuildImpl, Child.ToBuilderNode(instance, definition)));

            void BuildImpl(BlobBuilder blobBuilder, ref TimerNode data, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] builders)
            {
                data.BreakReturnState = @this.BreakReturnState;
                @this.CountdownSeconds.ToVariablePropertyReadWrite <float>(instance, definition)
                .Allocate(ref blobBuilder, ref data.CountdownSeconds, self, builders)
                ;
            }
        }
示例#31
0
            /// <summary>
            /// Deletes an instance from the persistence store
            /// </summary>
            /// <param name="instance"></param>
            protected override void DeleteInstance(GraphInstance instance)
            {
                ISession session = sessionFactory.GetCurrentSession();

                using (ITransaction tx = session.BeginTransaction())
                {
                    session.Delete(instance.Instance.GetType().BaseType.ToString(), instance);
                    tx.Commit();
                }
            }
示例#32
0
 public void RaiseOnSave(GraphInstance instance)
 {
     base.OnSave(instance);
 }
示例#33
0
 public InstanceTracker(object instance)
 {
     this.instance = new GraphInstance(instance);
 }
示例#34
0
 protected override void SaveInstance(GraphInstance graphInstance)
 {
     throw new NotImplementedException();
 }
示例#35
0
            /// <summary>
            /// Persists an entity to the persistence store
            /// </summary>
            /// <param name="graphInstance"></param>
            protected override void SaveInstance(GraphInstance graphInstance)
            {
                ISession session = sessionFactory.GetCurrentSession();

                using (ITransaction tx = session.BeginTransaction())
                {
                    session.SaveOrUpdate(graphInstance.Instance.GetType().BaseType.ToString(), graphInstance.Instance);
                    tx.Commit();
                }

                this.OnSave(graphInstance);
            }