// 배경 생성, Pool에 Push private void CreateBGInstances() { BGPool bgPool; Vector3 initPos = new Vector3(0f, 0f, -100f); // temporal pos int id = 0; for (int i = 0; i < PART_COUNT; i++) { SingleBGControl.instance.Initialize(); for (int j = 0; j < MAX_BG_COUNT; j++) { bgPool = new BGPool(); bgPool.id = id; bgPool.part = curMapData.partSequence[i]; bgPool.bgSequence = SingleBGControl.instance.bgSequence; bgPool.bgInst = SingleBGControl.instance.GenerateBG(initPos, curMapData.partSequence[i], curMapData.mapName); bgPool.Push(); mapPool.bgPool.Add(bgPool); id++; } } }
// 배경을 선택, 파트별 배경 리스트 중 순서를 결정 // 선택되었으면 partData -> subPartData에 저장한다. private void QueueBGInstToSubPart(Part part) { int bgSeq; int bgSeq_temp; // bgSeq를 다시 뽑을 때 사용되는 임시 변수 if (string.Equals(curMapData.mapName, "Tokyo")) { for (int i = 0; i < curMapData.partBGCount[(int)part]; i++) // 파트 내 생성될 BG 개수만큼 { // 몇 번째 배경을 뽑을 지 결정 (bgSequence) bgSeq = Random.Range(0, SingleBGControl.instance.curBG.bgListByPart[(int)part].bgByPart.Count); if (Equals(part, Part.A)) { if (bgSeq == 0) { SpecialBlock sb = new SpecialBlock(); sb.block = curMapData.specialBlockData[0].block; // 0번은 Tokyo 전용(plane_non_gimmick) sb.part = part; sb.pos = bgPos + 3; specialBlockList.Add(sb); } if (i == curMapData.partBGCount[(int)part] - 1) // 맨 끝에는 파트 B에 대비해 non_gimmick을 2개 만든다 { for (int j = 0; j < 2; j++) { SpecialBlock sb = new SpecialBlock(); sb.block = curMapData.specialBlockData[0].block; // 0번은 Tokyo 전용(plane_non_gimmick) sb.part = part; sb.pos = bgPos + j + 4; specialBlockList.Add(sb); } } } else if (Equals(part, Part.B)) { if (i == 0) { bgSeq = 0; // tunnel_start SpecialBlock sb = new SpecialBlock(); sb.block = curMapData.specialBlockData[0].block; // 0번은 Tokyo 전용(plane_non_gimmick) sb.part = part; sb.pos = bgPos; specialBlockList.Add(sb); } else if (i == curMapData.partBGCount[(int)part] - 1) { bgSeq = 2; // tunnel_end for (int j = 0; j < 2; j++) { SpecialBlock sb = new SpecialBlock(); sb.block = curMapData.specialBlockData[0].block; sb.part = part; sb.pos = bgPos + j + 5; // bg시작 좌표 + 375 specialBlockList.Add(sb); } } else { bgSeq = 1; // tunnel_mid } } // 뽑을 배경 리스트 입력 BGPool bgPool = null; while (true) { for (int j = 0; j < MAX_BG_COUNT; j++) { // bgPool에 등록된 배경 중 종류(bgSeq, part)가 같고, SubPartData에 넣지 않은(!isQueued) 배경을 찾는다. bgPool = mapPool.bgPool.Find(x => x.bgSequence == bgSeq && x.part == part && x.isQueued == false); // id도 체크 필요 if (bgPool != null) { bgPool.isQueued = true; // queue 되었음 체크 break; } } // BG를 생성하려 하는데 pool에 없을 경우 다른 BG를 뽑기 위해 다시 랜덤값 생성 if (bgPool == null) { bgSeq_temp = bgSeq; while (true) { bgSeq = Random.Range(0, SingleBGControl.instance.curBG.bgListByPart[(int)part].bgByPart.Count); if (bgSeq == bgSeq_temp) { continue; } else { break; } } } else { break; } } SubPartData subPartData = new SubPartData(); subPartData.bgSequence = bgPool.bgSequence; subPartData.bgID = bgPool.id; subPartData.part = part; subPartData.bgCount = bgCount; subPartData.bgPos = bgPos; partData[(int)part].subPartData.Add(subPartData); bgCount++; bgPos = bgPos + 6; } } }