/// <summary>
        /// Creates a new <see cref="Cell"/> instance using its location and state from an environment.
        /// </summary>
        /// <param name="location">The location of the state to be created.</param>
        /// <param name="environment">It is used to get the <see cref="Cell"/>`s state.</param>
        /// <returns>The initialized <see cref="Cell"/> object.</returns>
        public static Cell Create(Point location, CAEnvironment environment)
        {
            var c = new Cell(location);
            var key = c.GetKey();

            if (environment.States.Contains(key))
            {
                c.State = true;
            }

            return c;
        }
        /// <summary>
        /// Gets and sets the new <see cref="Cell.State"/> of particular <see cref="Cell"/>.
        /// </summary>
        /// <param name="cell">The <see cref="Cell"/>, which <see cref="Cell.State"/> is pregenerated.</param>
        public bool SetCellState(Cell cell)
        {
            long key = cell.GetKey();
            if (_rule.CanBeActivated(cell, _neighbourhood.GetNeighbours(cell.Location, this)))
            {
                cell.State = true;
                if (!StatesNew.Contains(key))
                {
                    StatesNew.Add(key);
                }
            }
            else
            {
                cell.State = false;
                if (StatesNew.Contains(key))
                {
                    StatesNew.Remove(key);
                }
            }

            return cell.State;
        }