/// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.LeftStatement"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public LeftStatement(FileIOManager reader, int depthIn)
        {
            this.depth = depthIn;

            byte nextByte = reader.ReadByte();

            if (nextByte == StatementTypeEnum.LeftMethodCall)
            {
                this.leftMethodCall = new LeftMethodCall(reader, depthIn + 1);
            }
            else if (nextByte == StatementTypeEnum.Assignment)
            {
                this.assignment = new Assignment(reader, depthIn + 1);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextByte,
                    reader,
                    new List <byte>()
                {
                    StatementTypeEnum.LeftMethodCall, StatementTypeEnum.Assignment
                });
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.LeftStatement"/> class.
        /// </summary>
        public LeftStatement(int depthIn)
        {
            this.depth = depthIn;

            double nextDouble = CommonHelperMethods.GetRandomDouble0To1();

            if (nextDouble < 0.5)
            {
                MethodSignature signature = RegistrationManager.SelectLeftMethodAtRandom();
                this.leftMethodCall = new LeftMethodCall(signature, depthIn + 1);
            }
            else
            {
                this.assignment = new Assignment(depthIn + 1);
            }
        }
        /// <summary>
        /// Will possibly mutate this section of logic.
        /// </summary>
        public void PossiblyMutate()
        {
            if (GeneticLogicRoot.RollMutateDice())
            {
                MethodSignature signature = RegistrationManager.SelectLeftMethodAtRandom();
                this.leftMethodCall = new LeftMethodCall(signature, this.depth + 1);
                this.assignment     = null;
                return;
            }

            if (GeneticLogicRoot.RollMutateDice())
            {
                this.leftMethodCall = null;
                this.assignment     = new Assignment(this.depth + 1);
                return;
            }

            // Note: Method calls and variables are possibly replaced, but not themselves mutated.
            if (this.assignment != null)
            {
                this.assignment.PossiblyMutate();
            }
        }