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);
 }
예제 #3
0
        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;
        }
예제 #4
0
 public void SetToProductState(ReactionCenter reactionCenter)
 {
     reactionCenter.productComplex.SetStateOfComplex(molecules);
     ConnectBoundComponents();
 }
예제 #5
0
 public void SetToProductState(ReactionCenter reactionCenter)
 {
     reactionCenter.productComponent.SetStateOfComponent(this);
     stateWasUpdated = true;
     molecule.SetToProductState(reactionCenter.productMolecule);
 }