public EnvSegment RandSegment(EDifficultyLevel _difficulty) { EnvSegment[] l_source = GetArray(_difficulty); BitArray l_usage = GetUsage(_difficulty); int l_randIndex = Random.Range(0, l_source.Length); //if not used yet, then return if (!l_usage[l_randIndex]) { l_usage[l_randIndex] = true; return(l_source[l_randIndex]); } else { //look for not used segment int l_found = l_randIndex; do { l_found = (l_found + 1) % l_source.Length; if (!l_usage[l_found]) { l_usage[l_found] = true; return(l_source[l_found]); } }while(l_found != l_randIndex); //if all used, then reset l_usage.SetAll(false); l_usage[l_randIndex] = true; return(l_source[l_randIndex]); } // return null; }
private void FillConsideredData(ref DifficultyLevelProbability _diffLevel, EDifficultyLevel _level) { if (m_totalSegmentCounter < _diffLevel.m_startingSegment || m_totalSegmentCounter > _diffLevel.m_endingSegment) { return; } m_consideredDiffLevels[m_consideredAmount].m_level = _level; if (m_totalSegmentCounter >= _diffLevel.m_startingSegment + SLOPE_LEN_RED || m_totalSegmentCounter >= _diffLevel.m_endingSegment - SLOPE_LEN_RED) { m_consideredDiffLevels[m_consideredAmount].m_weight = _diffLevel.m_weight; } else { float l_dif = Mathf.Min( m_totalSegmentCounter - _diffLevel.m_startingSegment, _diffLevel.m_endingSegment - m_totalSegmentCounter ) + 1; l_dif /= SLOPE_LEN; l_dif = Mathf.Abs(l_dif); m_consideredDiffLevels[m_consideredAmount].m_weight = _diffLevel.m_weight * l_dif; } ++m_consideredAmount; }
private EnvSegment NormalSpawn(bool _empty) { ++m_totalSegmentCounter; SpawnCheckpointIfNeeded(); EnvSegment l_pattern = null; if (_empty) { l_pattern = m_segmentsDictionary.EmptySegment; } else if (!_empty || l_pattern == null) { EDifficultyLevel l_dLevel = ChooseCurrentDifficulty(); //Debug.Log( "chosen difficulty is " + l_dLevel ); l_pattern = m_segmentsDictionary.RandSegment(l_dLevel); } Transform l_spawnedSegment = (Transform)Instantiate(m_segmentTemplatePattern, m_nextFreePosition, m_segmentTemplatePattern.rotation); EnvSegment l_instance = Instantiate(l_pattern, m_nextFreePosition, l_pattern.transform.rotation) as EnvSegment; l_instance.transform.parent = m_transform; l_spawnedSegment.parent = l_instance.CachedTransform; if (m_currentCheckopint != null) { m_currentCheckopint.Record(l_pattern); } m_nextFreePosition.z += m_segmentsDistance; return(l_instance); }
private void SetupSegments(EnvSegment[] _segments, EDifficultyLevel _level) { for (int i = 0; i < _segments.Length; ++i) { _segments[i].Difficulty = _level; _segments[i].Index = i; } }
private BitArray GetUsage(EDifficultyLevel _difficulty) { switch (_difficulty) { case EDifficultyLevel.VeryEasy: return(m_veryEasyUsed); case EDifficultyLevel.Easy: return(m_easyUsed); case EDifficultyLevel.Medium: return(m_meduimUsed); case EDifficultyLevel.Hard: return(m_hardUsed); case EDifficultyLevel.VeryHard: return(m_veryHardUsed); } return(null); }
private EnvSegment[] GetArray(EDifficultyLevel _difficulty) { switch (_difficulty) { case EDifficultyLevel.VeryEasy: return(m_veryEasy); case EDifficultyLevel.Easy: return(m_easy); case EDifficultyLevel.Medium: return(m_medium); case EDifficultyLevel.Hard: return(m_hard); case EDifficultyLevel.VeryHard: return(m_veryHard); } return(null); }
private EnvSegment SpawnEmptyBeforeCheckpoint() { EnvSegment l_pattern = m_segmentsDictionary.EmptySegment; if (l_pattern == null) { EDifficultyLevel l_dLevel = ChooseCurrentDifficulty(); l_pattern = m_segmentsDictionary.RandSegment(l_dLevel); } EnvSegment l_instance = Instantiate(l_pattern, m_nextFreePosition, Quaternion.identity) as EnvSegment; l_instance.transform.parent = m_transform; Transform l_spawnedSegment = (Transform)Instantiate(m_segmentTemplatePattern, m_nextFreePosition, m_segmentTemplatePattern.rotation); l_spawnedSegment.parent = l_instance.CachedTransform; return(l_instance); }
public override void CleanRandomValues(EDifficultyLevel level) { throw new NotImplementedException(); }
public abstract void CleanRandomValues(EDifficultyLevel level);