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