public override bool React(MoleculeComponent[] components, ReactionCenter[] matchingReactionCenters) { if (components.Length > 0 && components[0] != null && matchingReactionCenters.Length > 0 && matchingReactionCenters[0] != null) { components = new MoleculeComponent[] { components[0], components[0].boundComponent }; matchingReactionCenters = new ReactionCenter[] { matchingReactionCenters[0], GetOtherReactionCenter(matchingReactionCenters[0]) }; Dictionary <string, List <Molecule> > molecules; Complex newComplex; for (int i = 0; i < components.Length; i++) { molecules = components[i].complex.GetMoleculesAtEndOfBond(components[i]); newComplex = reactor.MoveMoleculesToNewComplex(molecules); components[i].SetToProductState(definition.reactionCenters[i]); components[i].boundComponent = null; newComplex.SetToProductState(matchingReactionCenters[i]); newComplex.UpdateReactions(); SetProductColor(molecules); } return(true); } return(false); }
ReactionCenter GetOtherReactionCenter(ReactionCenter reactionCenter) { foreach (ReactionCenter rc in definition.reactionCenters) { if (rc != reactionCenter) { return(rc); } } return(null); }
protected void SetBindReactionCenters(BindReaction[] relevantBindReactions) { List <ReactionCenter> reactionCentersList = new List <ReactionCenter>(); foreach (BindReaction reaction in relevantBindReactions) { ReactionCenter reactionCenter = reaction.GetReactionCenterForComponent(this); if (reactionCenter != null) { reactionCentersList.Add(reactionCenter); } } bindReactionCenters = reactionCentersList.ToArray(); couldReactOnCollision = bindReactionCenters.Length > 0; }
public void SetToProductState(ReactionCenter reactionCenter) { reactionCenter.productComplex.SetStateOfComplex(molecules); ConnectBoundComponents(); }
public void SetToProductState(ReactionCenter reactionCenter) { reactionCenter.productComponent.SetStateOfComponent(this); stateWasUpdated = true; molecule.SetToProductState(reactionCenter.productMolecule); }