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; }
//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++; }
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; } } }