public override bool UpdateNewFormula(Formula formula)
        {
            if (formula.atomCount[(int)Symbol.H] > 0)
            {
                currentValue = Math.Min(currentValue + formula.score * 0.01f, pHscale.MaxPhValue);
                return true;
            }

            return false;
        }
        public override bool UpdateNewFormula(Formula formula)
        {
            if (formula.strFormula == tutFormula)
            {
                if (index == instructions.Count) IsLevelUp = true;
                else NextMsg();

                return true;
            }

            return false;
        }
        public override bool UpdateNewFormula(Formula formula)
        {
            if (formula != null && formula.numberOfRings > 0)
            {
                numberOfRings += 1;

                if (numberOfRings == totalRings) IsLevelUp = true;

                return true;
            }

            return false;
        }
        public override bool UpdateNewFormula(Formula formula)
        {
            for (int i = 0; i < reactFor.Count; i++)
            {
                if (reactFor[i].strFormula == formula.strFormula && ticked[i] == false)
                {
                    tickPos.Add(new Vector2(200 + 150 * i, 500));
                    ticked[i] = true;

                    if (tickPos.Count == reactFor.Count) GetNewReactionFormulas();
                    return true;
                }
            }

            return false;
        }
        public override bool UpdateNewFormula(Formula formula)
        {
            int c = 0;
            for (int i = 0; i < formula.atomCount.Length; i++)
                c += formula.atomCount[i];

            if (c == MaxAtoms)
            {
                count += 1;
                if (count == maxCount) IsLevelUp = true;

                return true;
            }

            return false;
        }
        public override bool UpdateNewFormula(Formula formula)
        {
            int total = 0;
            for (int i = 0; i < formula.atomCount.Length; i++)
            {
                total += formula.atomCount[i];
            }

            if (total >= a)
            {
                if (a >= max) { IsLevelUp = true; return true; }

                a += 2; return true;
            }

            return false;
        }
        void CheckMolecularity(GameTime gameTime)
        {
            foreach (Atom a in atoms)
            {
                if (a.IsMolecularityChecked) continue;

                bool canBeMolecule = true;
                int twiceNumberOfBonds = 0, numberOfRings = 0;
                int[] atomCount = new int[gameContent.symbolCount];
                Vector2 averagePosition = new Vector2();

                List<Atom> molecule = new List<Atom>();
                molecule.Add(a);

                for (int i = 0; i < molecule.Count; i++)
                {
                    molecule[i].IsMolecularityChecked = true;

                    if (molecule[i].eye != EyeState.Sleep) canBeMolecule = false;

                    twiceNumberOfBonds += molecule[i].bondedAtoms.Count;
                    atomCount[(int)molecule[i].symbol] += 1;
                    averagePosition += molecule[i].body.Position;

                    foreach (Atom em in molecule[i].bondedAtoms)
                    {
                        if (molecule.IndexOf(em) > i) numberOfRings += 1;
                        if (!em.IsMolecularityChecked && !molecule.Contains(em))
                            molecule.Add(em);
                    }
                }

                // Form a molecule
                if (canBeMolecule)
                {
                    Cue cue = gameContent.soundBank.GetCue("bop"); cue.Play();

                    averagePosition *= (float)gameContent.scale / molecule.Count;

                    Formula f = new Formula(atomCount, twiceNumberOfBonds, numberOfRings,
                        levelComponent != null? levelComponent.bonusType : BonusType.None,
                        averagePosition, gameContent);

                    formulas.Add(f);

                    // Destroy
                    foreach (Atom am in molecule) am.Remove();

                    if (levelComponent != null)
                    {
                        if (levelComponent.UpdateNewFormula(f)) Score += f.score;
                        else f.strScore = "";
                    }
                }
            }
        }
 public virtual bool UpdateNewFormula(Formula formula)
 {
     return false;
 }
        public override bool UpdateNewFormula(Formula formula)
        {
            currentTemp = Math.Max(currentTemp - formula.score * 1, 0);

            return true;
        }