示例#1
0
    // 배경 생성, 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++;
            }
        }
    }
示例#2
0
    // 배경을 선택, 파트별 배경 리스트 중 순서를 결정
    // 선택되었으면 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;
            }
        }
    }