public AIStatus Process(AIBaseNode node)
        {
            Load(node);
            if (node.AIInitialized == false)
            {
                node.OnInit();
                node.AIInitialized = true;
            }
            AIStatus status = node.OnProcess();

            switch (status)
            {
            case AIStatus.Running:
                Save(node);
                return(status);

            case AIStatus.Failure:
            case AIStatus.Success:
                node.AIInitialized = false;
                Save(node);
                return(status);
            }
            Save(node);
            return(status);
        }
 public override AIStatus OnProcess()
 {
     while (currentNodeIndex < nodes.Count) {
         NodePort port = GetOutputPort("nodes " + currentNodeIndex);
         if (port == null || !port.IsConnected) {
             currentNodeIndex++;
             continue;
         }
         AIBaseNode node = (port.Connection.node as AIBaseNode);
         if (node == null) {
             currentNodeIndex++;
             continue;
         }
         AIStatus status = (graph as AIGraph).Process(node);
         switch (status) {
             case AIStatus.Failure:
                 return status;
             case AIStatus.Success:
                 currentNodeIndex++;
                 continue;
             case AIStatus.Running:
                 return status;
         }
     }
     return AIStatus.Success;
 }
 public void Tick(AIContext context)
 {
     if (startNode == null)
     {
         startNode = nodes.Find(x => x is AIBaseNode && x.Inputs.All(y => !y.IsConnected)) as AIBaseNode;
     }
     this.context = context;
     AIStatus status = Process(startNode);
 }
 private void Save(AIBaseNode node)
 {
     FieldInfo[] props = node.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
     foreach (FieldInfo prop in props)
     {
         AISerializedVariable v = prop.GetCustomAttribute <AISerializedVariable>();
         if (v == null)
         {
             continue;
         }
         context[node.GetInstanceID() + prop.Name] = prop.GetValue(node);
     }
 }
 private void Abort()
 {
     for (int i = 0; i < nodes.Count; i++)
     {
         NodePort port = GetOutputPort("nodes " + i);
         if (port == null || !port.IsConnected)
         {
             continue;
         }
         AIBaseNode node = (port.Connection.node as AIBaseNode);
         if (node == null)
         {
             continue;
         }
         (graph as AIGraph).Deinitialize(node);
     }
 }
        public override AIStatus OnProcess()
        {
            while (currentNodeIndex < nodes.Count)
            {
                AIBaseNode node   = (GetOutputPort("nodes " + currentNodeIndex).Connection.node as AIBaseNode);
                AIStatus   status = (graph as AIGraph).Process(node);
                switch (status)
                {
                case AIStatus.Failure:
                    currentNodeIndex++;
                    continue;

                case AIStatus.Success:
                case AIStatus.Running:
                    return(status);
                }
            }
            return(AIStatus.Failure);
        }
Пример #7
0
        public override AIStatus OnProcess()
        {
            for (int i = 0; i < nodes.Count; i++)
            {
                NodePort port = GetOutputPort("nodes " + i);
                if (port == null || !port.IsConnected)
                {
                    continue;
                }
                AIBaseNode node = (port.Connection.node as AIBaseNode);
                if (node == null)
                {
                    continue;
                }
                if (((1 << i) & successMask) == 1)
                {
                    continue;
                }
                AIStatus status = (graph as AIGraph).Process(node);
                switch (status)
                {
                case AIStatus.Failure:
                    Abort();
                    return(status);

                case AIStatus.Success:
                    successMask |= (1 << i);
                    continue;

                case AIStatus.Running:
                    continue;
                }
            }
            // See if we're all done.
            for (int i = 0; i < nodes.Count; i++)
            {
                if ((successMask & (1 << i)) == 0)
                {
                    return(AIStatus.Running);
                }
            }
            return(AIStatus.Success);
        }
        public override AIStatus OnProcess()
        {
            AIBaseNode node   = (GetOutputPort("output").Connection.node as AIBaseNode);
            AIStatus   status = (graph as AIGraph).Process(node);

            switch (status)
            {
            case AIStatus.Failure:
                return(AIStatus.Success);

            case AIStatus.Success:
                return(AIStatus.Success);

            case AIStatus.Running:
                return(status);

            default:
                return(status);
            }
        }
 private void Load(AIBaseNode node)
 {
     FieldInfo[] props = node.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
     foreach (FieldInfo prop in props)
     {
         AISerializedVariable v = prop.GetCustomAttribute <AISerializedVariable>();
         if (v == null)
         {
             continue;
         }
         if (context.ContainsKey(node.GetInstanceID() + prop.Name))
         {
             prop.SetValue(node, context[node.GetInstanceID() + prop.Name]);
         }
         else
         {
             Type type = prop.FieldType;
             var  d    = type.IsValueType ? Activator.CreateInstance(type) : null;
             prop.SetValue(node, d);
         }
     }
 }
Пример #10
0
        public override AIStatus OnProcess()
        {
            while (currentRepeat < repeats)
            {
                AIBaseNode node   = (GetOutputPort("output").Connection.node as AIBaseNode);
                AIStatus   status = (graph as AIGraph).Process(node);
                switch (status)
                {
                case AIStatus.Running:
                    return(status);

                case AIStatus.Success:
                    currentRepeat++;
                    continue;

                case AIStatus.Failure:
                    currentRepeat++;
                    hadFailure = true;
                    continue;
                }
            }
            return(hadFailure ? AIStatus.Failure : AIStatus.Success);
        }
 public void Deinitialize(AIBaseNode node)
 {
     Load(node);
     if (!node.AIInitialized)
     {
         return;
     }
     node.OnInterrupt();
     node.AIInitialized = false;
     Save(node);
     foreach (NodePort p in node.Outputs)
     {
         if (!p.IsConnected)
         {
             continue;
         }
         AIBaseNode n = (p.Connection.node as AIBaseNode);
         if (!n)
         {
             continue;
         }
         Deinitialize(n);
     }
     foreach (NodePort p in node.DynamicOutputs)
     {
         if (!p.IsConnected)
         {
             continue;
         }
         AIBaseNode n = (p.Connection.node as AIBaseNode);
         if (!n)
         {
             continue;
         }
         Deinitialize(n);
     }
 }
 private void Init()
 {
     startNode = null;
 }