Esempio n. 1
0
 private void clear_next_block(ref CreatrionInfo block)
 {
     block.block_type    = Block.TYPE.FLOOR;
     block.max_count     = 15;
     block.height        = 0;
     block.current_count = 0;
 }
Esempio n. 2
0
    //public void update()
    public void update(float passage_time)
    {
        // 이번에 만든 블록 개수를 증가
        this.current_block.current_count++;

        // 이번에 만든 블록 개수가 max_count 이상이면
        if (this.current_block.current_count >= this.current_block.max_count)
        {
            this.previous_block = this.current_block;
            this.current_block  = this.next_block;

            //다음에 만들 블록의 내용을 초기화
            this.clear_next_block(ref this.next_block);

            // 다음에 만들 블록을 설정
            this.update_level(ref this.next_block, this.current_block, passage_time);
        }
        this.block_count++;
    }
Esempio n. 3
0
    private void update_level(ref CreatrionInfo current, CreatrionInfo previous, float passage_time)
    {
        /*
         * switch (previous.block_type)
         * {
         *  case Block.TYPE.FLOOR:                          // 이번 블록이 바닥일 경우
         *      current.block_type = Block.TYPE.HOLE;       // 다음 번은 구멍을 만든다.
         *      current.max_count = 5;                      // 구멍은 5개 만든다.
         *      current.height = previous.height;           // 높이를 이전과 같게 한다.
         *      break;
         *
         *  case Block.TYPE.HOLE:                           // 이번 블록이 구멍일 경우
         *      current.block_type = Block.TYPE.FLOOR;      // 다음은 바닥 만든다.
         *      current.max_count = 10;                     // 바닥은 10개 만든다.
         *      break;
         * }
         */

        // 레벨 1~레벨 5를 반복한다.
        float local_time = Mathf.Repeat(passage_time, this.level_datas[this.level_datas.Count - 1].end_time);

        // 현재 레벨을 구한다.
        int i;

        for (i = 0; i < this.level_datas.Count - 1; i++)
        {
            if (local_time <= this.level_datas[i].end_time)
            {
                break;
            }
        }
        this.level = i;

        current.block_type = Block.TYPE.FLOOR;
        current.max_count  = 1;



        if (this.block_count >= 10)
        {
            // 현재 레벨용 레벨 데이터를 가져온다.
            LevelData level_data;
            level_data = this.level_datas[this.level];

            switch (previous.block_type)
            {
            case Block.TYPE.FLOOR:                          // 이전 블록이 바닥인 경우
                current.block_type = Block.TYPE.HOLE;       // 이번엔 구멍을 만든다
                current.max_count  = UnityEngine.Random.Range(level_data.hole_count.min, level_data.hole_count.max);
                current.height     = previous.height;
                break;

            case Block.TYPE.HOLE:                           // 이전 블록이 구멍인 경우
                current.block_type = Block.TYPE.FLOOR;      // 이번엔 바닥을 만든다.
                current.max_count  = UnityEngine.Random.Range(level_data.floor_count.min, level_data.floor_count.max);
                int height_min = previous.height + level_data.height_diff.min;
                int height_max = previous.height + level_data.height_diff.max;
                height_min = Mathf.Clamp(height_min, HEIGHT_MIN, HEIGHT_MAX);
                height_max = Mathf.Clamp(height_max, HEIGHT_MIN, HEIGHT_MAX);

                current.height = UnityEngine.Random.Range(height_min, height_max);
                break;
            }
        }
    }