Example #1
0
    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;
    }
Example #2
0
    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;
    }
Example #3
0
    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);
    }
Example #4
0
 private void SetupSegments(EnvSegment[] _segments, EDifficultyLevel _level)
 {
     for (int i = 0; i < _segments.Length; ++i)
     {
         _segments[i].Difficulty = _level;
         _segments[i].Index      = i;
     }
 }
Example #5
0
    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);
    }
Example #6
0
    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);
    }
Example #7
0
    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();
 }
Example #9
0
 public abstract void CleanRandomValues(EDifficultyLevel level);