Esempio n. 1
0
    public void MakeMapByLayerData(PBMapLayerData layerData)
    {
        MapCardBase playerDoorCard = null;

        if (currentMapLayerData != null)
        {
            if (lastMapLayerData != null)
            {
                for (int i = 0; i < lastMapLayerData.Width; i++)
                {
                    for (int j = 0; j < lastMapLayerData.Height; j++)
                    {
                        if (lastMapLayerData[i, j] != null && lastMapLayerData[i, j] != currentMapLayerData[i, j])
                        {
                            lastMapLayerData[i, j].Destory();
                        }
                    }
                }
            }
            lastMapLayerData = currentMapLayerData;
            for (int i = 0; i < lastMapLayerData.Width; i++)
            {
                for (int j = 0; j < lastMapLayerData.Height; j++)
                {
                    //共用传送门
                    if (i == m_MyMapPlayer.CurPos.X && j == m_MyMapPlayer.CurPos.Y)
                    {
                        playerDoorCard = lastMapLayerData[i, j];
                    }
                    else if (lastMapLayerData[i, j] != null)
                    {
                        lastMapLayerData[i, j].ExitMap();
                    }
                }
            }
        }
        MapLayerData mapLayerData = new MapLayerData(layerData.Index, layerData.Width, layerData.Height);

        for (int i = 0; i < layerData.Width; i++)
        {
            for (int j = 0; j < layerData.Height; j++)
            {
                if (playerDoorCard != null && i == m_MyMapPlayer.CurPos.X && j == m_MyMapPlayer.CurPos.Y)
                {
                    mapLayerData[i, j] = playerDoorCard;
                    continue;
                }
                int index = i * layerData.Width + j;
                mapLayerData[i, j] = MapCardBase.CreateMapCard((MapCardType)layerData.PointTypes[index],
                                                               layerData.PointIds[index],
                                                               new MapCardPos(i, j));
            }
        }
        currentMapLayerData = mapLayerData;
        Messenger.BroadcastSync(MessageId.MAP_GET_MAP_LAYER_DATA);
    }
Esempio n. 2
0
    void MakeMap(int layerId)
    {
        MapCardBase playerDoorCard = null;

        if (currentMapLayerData != null)
        {
            if (lastMapLayerData != null)
            {
                for (int i = 0; i < ConstValue.MAP_WIDTH; i++)
                {
                    for (int j = 0; j < ConstValue.MAP_HEIGHT; j++)
                    {
                        if (lastMapLayerData[i, j] != null && lastMapLayerData[i, j] != currentMapLayerData[i, j])
                        {
                            lastMapLayerData[i, j].Destory();
                        }
                    }
                }
            }
            lastMapLayerData = currentMapLayerData;
            for (int i = 0; i < ConstValue.MAP_WIDTH; i++)
            {
                for (int j = 0; j < ConstValue.MAP_HEIGHT; j++)
                {
                    //共用传送门
                    if (i == m_MyMapPlayer.CurPos.X && j == m_MyMapPlayer.CurPos.Y)
                    {
                        playerDoorCard = lastMapLayerData[i, j];
                    }
                    else if (lastMapLayerData[i, j] != null)
                    {
                        lastMapLayerData[i, j].ExitMap();
                    }
                }
            }
        }
        MapLayerData layerData = new MapLayerData(layerId, 5, 5);

        currentMapLayerData = layerData;
        List <MapCardBase> mapCards = new List <MapCardBase>();
        int cardCount = Random.Range(10, 15);

        //先确定出生点
        {
            if (playerDoorCard == null)
            {
                playerDoorCard = MapCardBase.CreateMapCard <MapCardDoor>(m_MyMapPlayer.CurPos, MapCardBase.CardState.Front);
            }
            mapCards.Add(playerDoorCard);
            layerData[playerDoorCard.X, playerDoorCard.Y] = playerDoorCard;
            playerDoorCard.SetUsed(true);
            playerDoorCard.SetActive(true);
            playerDoorCard.SetParent(MapCardRoot.transform);
        }
        for (int i = 1; i < cardCount; i++)
        {
            MapCardPos pos = mapCards[Random.Range(0, i)].Position;

            List <MapCardPos> poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);

            if (poss.Count == 0)
            {
                i--;
                continue;
            }
            int count = Random.Range(0, poss.Count - 1);
            pos = poss[count];
            mapCards.Add(MapCardBase.GetRandomMapCard(pos, MapCardBase.CardState.Behind));
            layerData[mapCards[i].X, mapCards[i].Y] = mapCards[i];
            mapCards[i].SetActive(true);
            mapCards[i].SetParent(MapCardRoot.transform);
        }
        //创建出口
        {
            MapCardPos pos = mapCards[Random.Range(0, cardCount)].Position;

            List <MapCardPos> poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);

            while (poss.Count == 0)
            {
                pos  = mapCards[Random.Range(0, cardCount)].Position;
                poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);
            }
            int count = Random.Range(0, poss.Count - 1);
            pos = poss[count];
            MapCardBase door = MapCardBase.CreateMapCard <MapCardDoor>(pos, MapCardBase.CardState.Behind);
            mapCards.Add(door);
            layerData[door.X, door.Y] = door;
            door.SetActive(true);
            door.SetParent(MapCardRoot.transform);
        }
    }