private DataTree<AgentType> run(Boolean reset, bool liveUpdate, List<T.AgentSystem> systems)
{
int index = 0;
pts.Clear();
if (reset)
{
agentSystems.Clear();
foreach (T.AgentSystem system in systems)
{
agentSystems.Add(new T.AgentSystem(system));
foreach (EmitterType emitter in system.Emitters)
{
if (!emitter.ContinuousFlow)
{
for (int i = 0; i < emitter.NumAgents; i++)
{
agentSystems[index].addAgent(emitter);
}
}
}
index++;
}
}
else
{
if (liveUpdate)
{
if (systems.Count > agentSystems.Count)
{
//Find the system that is not in agentSystems and add it.
foreach (T.AgentSystem system in systems)
{
if (!agentSystems.Contains(system))
{
agentSystems.Add(new T.AgentSystem(system));
}
}
}
else if (systems.Count < agentSystems.Count)
{
foreach (T.AgentSystem agentSystem in agentSystems)
{
if (!systems.Contains(agentSystem))
{
agentSystems.Remove(agentSystem);
}
}
}
foreach (T.AgentSystem system in systems)
{
agentSystems[index].Emitters = systems[index].Emitters;
agentSystems[index].AgentsSettings = systems[index].AgentsSettings;
agentSystems[index].Forces = systems[index].Forces;
agentSystems[index].Environment = systems[index].Environment;
agentSystems[index].Behaviors = systems[index].Behaviors;
index++;
}
}
foreach (T.AgentSystem system in agentSystems)
{
system.run();
}
}
DataTree<AgentType> tree = new DataTree<AgentType>();
int counter = 0;
foreach (T.AgentSystem system in agentSystems)
{
foreach (AgentType agent in system.Agents)
{
tree.Add(agent, new GH_Path(counter));
}
counter++;
}
return tree;
}