/// <summary> /// Возвращает игровой префаб или существующую модель персонажа в зависимости от типа клетки /// </summary> GameObject CellToPrefabType(LevelEditor.PenType CellType) { switch (CellType) { case LevelEditor.PenType.Point: return(PrefabPoint); case LevelEditor.PenType.Energy: return(PrefabPowerUp); case LevelEditor.PenType.Fruit: return(PrefabFruit); case LevelEditor.PenType.Wall: return(PrefabWall); case LevelEditor.PenType.BunkerCenter: return(PrefabWall); case LevelEditor.PenType.BunkerDoor: return(PrefabDoor); case LevelEditor.PenType.BunkerBricks: return(PrefabWall); default: return(PrefabClear); } }
/// <summary> /// Проверяет попадает ли новая клетка в бункер с привидениями /// </summary> bool CheckInBunker(LevelEditor.PenType _cellType) { int cx = (int)(prm.CurrentMap.Ghosts.x); int cy = (int)(prm.CurrentMap.Ghosts.y); return((_cellType != LevelEditor.PenType.BunkerCenter) && ((cx - 2 <= Xpos) && (cx + 2 >= Xpos) && (cy - 3 <= Ypos) && (cy >= Ypos))); }
/// <summary> /// Возвращает название спрайта соответствующее типу клетки /// </summary> string GetSpriteName(LevelEditor.PenType _penType) { switch (_penType) { case LevelEditor.PenType.BunkerBricks: return("item_clear"); case LevelEditor.PenType.BunkerCenter: return("item_bunker"); case LevelEditor.PenType.BunkerClear: return("item_clear"); case LevelEditor.PenType.BunkerDoor: return("item_clear"); case LevelEditor.PenType.Clear: return("item_clear"); case LevelEditor.PenType.Energy: return("item_powerup"); case LevelEditor.PenType.Fruit: return("item_fruit"); case LevelEditor.PenType.PacmanSpawn: return("item_pacmanspawn"); case LevelEditor.PenType.Point: return("item_point"); case LevelEditor.PenType.Wall: return("item_brick"); case LevelEditor.PenType.BlinkySpawn: return("item_blinky"); case LevelEditor.PenType.PinkySpawn: return("item_pinky"); case LevelEditor.PenType.InkySpawn: return("item_inky"); case LevelEditor.PenType.ClydeSpawn: return("item_clyde"); default: return("item_clear"); } }
/// <summary> /// Возвращает принадлежность к неподвижным объектам /// </summary> bool isRealStatic(LevelEditor.PenType CellType) { switch (CellType) { case LevelEditor.PenType.Clear: case LevelEditor.PenType.BlinkySpawn: case LevelEditor.PenType.InkySpawn: case LevelEditor.PenType.PinkySpawn: case LevelEditor.PenType.ClydeSpawn: case LevelEditor.PenType.PacmanSpawn: case LevelEditor.PenType.BunkerClear: return(false); default: return(true); } }
/// <summary> /// Создаёт нужный префаб в нужной клетке /// </summary> GameObject SetCell(LevelEditor.PenType CellType, int posX, int posY) { if (isRealStatic(CellType)) { if (CellType == LevelEditor.PenType.Point) { prm.PointsCount++; } GameObject tempGO = Instantiate(CellToPrefabType(CellType)) as GameObject; tempGO.transform.parent = transform; tempGO.transform.localScale = Vector3.one; tempGO.transform.localPosition = new Vector3(posX, 0, -posY); Blocks.Add(tempGO); return(tempGO); } else { switch (CellType) { case LevelEditor.PenType.BlinkySpawn: Blinky.transform.position = new Vector3(posX, 0, -posY); Blinky.GetComponent <Move>().TargetPoint = new Vector3(posX, 0, -posY); Blinky.GetComponent <GhostAI>().RespawnPoint = new Vector3(posX, 0, -posY); Blinky.GetComponent <GhostAI>().ChangeMode(GhostAI.ModeBehavior.around); Blinky.SetActive(prm.ShowBlinky); return(Blinky); case LevelEditor.PenType.InkySpawn: Inky.transform.position = new Vector3(posX, 0, -posY); Inky.GetComponent <Move>().TargetPoint = new Vector3(posX, 0, -posY); Inky.GetComponent <GhostAI>().RespawnPoint = new Vector3(posX, 0, -posY); Inky.GetComponent <GhostAI>().ChangeMode(GhostAI.ModeBehavior.around); Inky.SetActive(prm.ShowInky); return(Inky); case LevelEditor.PenType.PinkySpawn: Pinky.transform.position = new Vector3(posX, 0, -posY); Pinky.GetComponent <Move>().TargetPoint = new Vector3(posX, 0, -posY); Pinky.GetComponent <GhostAI>().RespawnPoint = new Vector3(posX, 0, -posY); Pinky.GetComponent <GhostAI>().ChangeMode(GhostAI.ModeBehavior.around); Pinky.SetActive(prm.ShowPinky); return(Pinky); case LevelEditor.PenType.ClydeSpawn: Clyde.transform.position = new Vector3(posX, 0, -posY); Clyde.GetComponent <Move>().TargetPoint = new Vector3(posX, 0, -posY); Clyde.GetComponent <GhostAI>().RespawnPoint = new Vector3(posX, 0, -posY); Clyde.GetComponent <GhostAI>().ChangeMode(GhostAI.ModeBehavior.around); Clyde.SetActive(prm.ShowClyde); return(Clyde); case LevelEditor.PenType.PacmanSpawn: Pacman.transform.position = new Vector3(posX, 0, -posY); Pacman.GetComponent <Move>().TargetPoint = new Vector3(posX, 0, -posY); Pacman.SetActive(true); return(Pacman); case LevelEditor.PenType.Clear: case LevelEditor.PenType.BunkerClear: default: GameObject tempGO = Instantiate(PrefabClear) as GameObject; tempGO.transform.parent = transform; tempGO.transform.localScale = Vector3.one; tempGO.transform.localPosition = new Vector3(posX, 0, -posY); return(tempGO); } } }
/// <summary> /// Обновляет положение и типа клетки /// </summary> public void UpdateCell(LevelEditor.PenType _cellType) { CellType = _cellType; UpdateCell(); }
/// <summary> /// Устанавливает выбранный тип клетки /// </summary> public void SetUpCell(LevelEditor.PenType _cellType) { if (!CheckInBunker(_cellType)) { switch (_cellType) { case LevelEditor.PenType.PacmanSpawn: // Устанавливает клетку с пакманом, а предыдущее место затирает MainController.Instance._LevelEditor.Cells[(int)(prm.CurrentMap.PacmanSpawn.x), (int)(prm.CurrentMap.PacmanSpawn.y)].UpdateCell(LevelEditor.PenType.Clear); prm.CurrentMap.PacmanSpawn = new Vector2(Xpos, Ypos); UpdateCell(_cellType); break; case LevelEditor.PenType.BunkerCenter: // Устанавливает клетку с бункером, а предыдущее место затирает int px = (int)(prm.CurrentMap.PacmanSpawn.x); int py = (int)(prm.CurrentMap.PacmanSpawn.y); if (((Xpos + 2 < prm.CurrentMap.width) && (Xpos - 2 >= 0) && (Ypos < prm.CurrentMap.height) && (Ypos - 3 >= 0)) && //входит ли в границы карты ((Xpos + 2 < px) || (Xpos - 2 >= px) || (Ypos < py) || (Ypos - 3 >= py))) //не пересекается ли с местом респауна игрока { int cx = (int)(prm.CurrentMap.Ghosts.x); int cy = (int)(prm.CurrentMap.Ghosts.y); for (int x = cx - 2; x <= cx + 2; x++) { for (int y = cy - 3; y <= cy; y++) { MainController.Instance._LevelEditor.Cells[x, y].UpdateCell(LevelEditor.PenType.Clear); } } prm.CurrentMap.Ghosts = new Vector2(Xpos, Ypos); for (int x = Xpos - 2; x <= Xpos + 2; x++) { for (int y = Ypos - 3; y <= Ypos; y++) { MainController.Instance._LevelEditor.Cells[x, y].UpdateCell(LevelEditor.PenType.Clear); } } MainController.Instance._LevelEditor.Cells[Xpos, Ypos - 3].UpdateCell(prm.CurrentMap.Blinky ? LevelEditor.PenType.BlinkySpawn : LevelEditor.PenType.Clear); MainController.Instance._LevelEditor.Cells[Xpos, Ypos - 2].UpdateCell(LevelEditor.PenType.BunkerDoor); MainController.Instance._LevelEditor.Cells[Xpos, Ypos - 1].UpdateCell(prm.CurrentMap.Pinky ? LevelEditor.PenType.PinkySpawn : LevelEditor.PenType.Clear); MainController.Instance._LevelEditor.Cells[Xpos - 1, Ypos - 1].UpdateCell(prm.CurrentMap.Inky ? LevelEditor.PenType.InkySpawn : LevelEditor.PenType.Clear); MainController.Instance._LevelEditor.Cells[Xpos + 1, Ypos - 1].UpdateCell(prm.CurrentMap.Clyde ? LevelEditor.PenType.ClydeSpawn : LevelEditor.PenType.Clear); MainController.Instance._LevelEditor.Cells[Xpos, Ypos].UpdateCell(LevelEditor.PenType.BunkerCenter); MainController.Instance._LevelEditor.Cells[Xpos - 2, Ypos - 2].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos - 1, Ypos - 2].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos + 1, Ypos - 2].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos + 2, Ypos - 2].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos - 2, Ypos - 1].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos + 2, Ypos - 1].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos - 2, Ypos].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos - 1, Ypos].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos + 1, Ypos].UpdateCell(LevelEditor.PenType.BunkerBricks); MainController.Instance._LevelEditor.Cells[Xpos + 2, Ypos].UpdateCell(LevelEditor.PenType.BunkerBricks); UpdateCell(_cellType); } break; default: if (CellType != LevelEditor.PenType.PacmanSpawn) { UpdateCell(_cellType); } break; } } }