public static Level GetNextLevel(Level currentLevel)
        {
            Level mate1, mate2;
            _history.Add(currentLevel);

            _currentGenerationIndex = 0;
            _currentGenerationNumber++;
            _difficultyThreshold = GetPreviousDifficulty();
            SelectRandomMates(out mate1, out mate2);

            Level child = new Level(mate1, mate2);
            child.MoveLevelRight(currentLevel);
            //_currentLevelSetup.Print(_currentGenerationIndex);
            _currentGenerationIndex++;

            return child;
        }
        static void SelectRandomMates(out Level mate1, out Level mate2)
        {
            int index = random.Next(0, _history.Count - 1);
            mate1 = _history[index];

            index = random.Next(0, _history.Count - 1);
            mate2 = _history[index];
        }
 public Level(Level mum, Level dad)
 {
     CreateChildSpawners(LevelObjectType.GroundEnemy, mum, dad);
     GenerateLandscape();
 }
 private void CreateChildSpawners(LevelObjectType type, Level mum, Level dad)
 {
     SpawnerGroup dadSpawners = dad.GetSpawners(type);
     SpawnerGroup mumSpawners = mum.GetSpawners(type);
     SpawnerGroup newSpawners = new SpawnerGroup(mumSpawners);
     newSpawners.BuildFromParents(mumSpawners, dadSpawners);
     m_spawners[(int)type] = newSpawners;
 }
        public void MoveLevelRight(Level left)
        {
            float offset = left.TotalLevelWidth;
            for (int i = 0; i < m_levelObjects.Length; ++i)
                if (m_levelObjects[i] != null)
                    for (int j = 0; j < m_levelObjects[i].Count; ++j)
                        m_levelObjects[i][j].Transform.PosX += offset;

            m_house.Transform.PosX += offset;
        }
        public void BuildNextLevel()
        {
            if (m_currentLevel == null)
            {
                m_currentLevel = new Level();
            }
            else
            {
                m_currentLevel.Clear();
                m_nextLevel.MoveLevelLeft();
                m_currentLevel = m_nextLevel;
            }

             m_nextLevel = LevelGenerator.GetNextLevel(m_currentLevel);
        }