protected virtual void SpawnSpecies(ComplexConcentration complexConcentration) { int amount = Mathf.RoundToInt(complexConcentration.concentration * container.volume * 6.022141e23f); if (amount < 1 || complexConcentration.moleculeCount < 1) { return; } MoleculeInitData initData = new MoleculeInitData(complexConcentration.complexPattern, CalculateMoleculeTransforms(complexConcentration.complexPattern), GetRelevantBindReactions(complexConcentration.complexPattern), GetRelevantCollisionFreeReactions(complexConcentration.complexPattern)); Complex complex; for (int i = 0; i < amount; i++) { complex = new Complex(initData, this); //add all the new molecules as initial agents foreach (string moleculeName in complex.molecules.Keys) { foreach (Molecule molecule in complex.molecules[moleculeName]) { molecule.agentID = nextID; agents.Add(molecule.agentID, new AgentData(moleculeName, molecule.position, molecule.rotation)); molecules.Add(molecule.agentID, molecule); } } } }
public void SpawnMolecules(MoleculeInitData initData) { molecules = new Dictionary <string, List <Molecule> >(); foreach (string moleculeName in initData.complexPattern.moleculePatterns.Keys) { if (!molecules.ContainsKey(moleculeName)) { molecules.Add(moleculeName, new List <Molecule>()); } for (int i = 0; i < initData.complexPattern.moleculePatterns[moleculeName].Count; i++) { molecules[moleculeName].Add(new Molecule(initData.complexPattern.moleculePatterns[moleculeName][i], initData.moleculeTransforms[moleculeName][i], this)); } } ConnectBoundComponents(); InitReactions(initData.relevantBindReactions, initData.relevantCollisionFreeReactions); }
public Complex(MoleculeInitData initData, Reactor _reactor) { reactor = _reactor; SpawnMolecules(initData); Init(reactor.container.GetRandomPointInBounds(0.1f), Random.rotation); }