Beispiel #1
0
    // subPartData에 들어간 걸 빼내어 배치함
    private void DequeueBGInstFromSubPart(int pos)
    {
        // 현재 위치에 나올 배경을 Queue에서 찾는다.
        SubPartData spData = partData[(int)curPart].subPartData.Find(x => x.bgPos == pos);

        // Queue에서 찾은 배경과 part, 종류가 같고, 사용중이지 않은 배경을 Pool에서 꺼내어 배치한다.
        mapPool.bgPool.Find(x => x.bgSequence == spData.bgSequence && x.part == spData.part && x.isQueued == true).Pull(pos);
    }
Beispiel #2
0
    private void GenerateBlock(BlockData blockData, Vector3 position)
    {
        BlockPool blockPool;

        if (!isInitMap)  // 초기 맵 생성 시
        {
            string    path     = PhotonPrefabPathContainer.GetPrefabPath(blockData.block.name);
            Transform newBlock = PhotonNetwork.InstantiateSceneObject(path, position, Quaternion.identity, 0, null).transform;

            blockData.block     = newBlock;
            blockData.endHeight = newBlock.GetComponent <Block>().endHeight;

            if (blockData.type != -2) // startBlock이 아니면
            {
                // 블럭을 현재 파트 블럭리스트에 추가
                blockInEachPart[(int)curPart].Add(newBlock);

                // 블록 텍스쳐 변경을 위해 블록에 파트값 부여
                blockData.block.GetComponent <Block>().part = curPart;
                blockData.block.GetComponent <ChangeBlockTexture>().SetBlockTexture((int)curPart);

                // input into pool
                blockPool           = new BlockPool();
                blockPool.blockData = blockData;
                blockPool.part      = curPart;
                blockPool.isUse     = true;
                mapPool.blockPool.Add(blockPool);
            }
        }
        else
        {
            // 풀에서 있는 지 검사하고 있다면 꺼내고, 없다면 생성
            blockPool = mapPool.blockPool.Find(x => x.blockData.num == blockData.num && x.blockData.type == blockData.type && x.isUse == false);

            if (blockPool != null)
            {
                blockPool.part = curPart;
                blockPool.blockData.block.GetComponent <Block>().part = curPart;
                blockPool.blockData.block.GetComponent <ChangeBlockTexture>().SetBlockTexture((int)curPart);
                blockPool.Pull(createdBlockCount);
            }
            else
            {
                // Block 및 BlockPool 생성, 현재 blockData를 Add
                string    path     = PhotonPrefabPathContainer.GetPrefabPath(blockData.block.name);
                Transform newBlock = PhotonNetwork.InstantiateSceneObject(path, position, Quaternion.identity, 0, null).transform;
                blockData.block     = newBlock;
                blockData.endHeight = newBlock.GetComponent <Block>().endHeight;

                blockPool           = new BlockPool();
                blockPool.part      = curPart;
                blockPool.blockData = blockData;
                blockPool.blockData.block.GetComponent <Block>().part = curPart;
                blockPool.blockData.block.GetComponent <ChangeBlockTexture>().SetBlockTexture((int)curPart);
                mapPool.blockPool.Add(blockPool);

                blockPool.Pull(createdBlockCount);
            }
        }

        // listBlockData가 계속 쌓이는 것을 방지
        listBlockData.Add(blockData);
        if (listBlockData.Count > 5)
        {
            listBlockData.RemoveAt(0);
        }

        // subPartData에 추가. SubPartData의 blocks list 개수가 6개가 아니면 추가
        if (blockData.type != -2) // startBlock이 아니면
        {
            SubPartData spData = partData[(int)curPart].subPartData.Find(x => x.part == curPart && x.blocks.Count != 6);
            spData.blocks.Add(blockData);
            spData.blocksPos.Add(createdBlockCount);
        }
    }
Beispiel #3
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;
            }
        }
    }