/// <summary> /// Finds a random free molecule of a specific species. /// </summary> /// <returns><c>true</c>, if random molecule for reaction was found, <c>false</c> otherwise.</returns> /// <param name="species">Species.</param> /// <param name="molecule">Molecule.</param> private bool FindRandomMoleculeForReaction(MoleculeSpecies species, out Molecule molecule) { ShortKeyDict <MoleculeSpecies, MoleculeSet> .Entry entry; if (collection.Find(species, out entry)) { MoleculeCollection free = entry.Value.Free; ulong c = free.Count; if (c == 0) { molecule = null; return(false); } uint i = (uint)(Random.value * c); if (i == free.Count) { i--; } // because Random.value's maximum is inclusive 1 foreach (var m in free) { if (i == 0) { molecule = m; return(true); } i--; } throw new System.Exception("should not be possible"); } else { molecule = null; return(false); } }
/// <summary> /// Initializes a new instance of the <see cref="CellUnity.MoleculeManager+MoleculeSet"/> class. /// </summary> /// <param name="species">Species of the MolculeSet</param> public MoleculeSet(MoleculeSpecies species) { Free = new MoleculeCollection(species.Name + " free"); Reacting = new MoleculeCollection(species.Name + " reacting"); }
public void Dispose() { current = null; collection = null; }
public Enumerator(MoleculeCollection collection) { this.collection = collection; }