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); }
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); } }