using UnityEngine; namespace _Project.Scripts.LevelGenerating { public class WallsGenerator : MonoBehaviour { [SerializeField] private int roomCountMin; [SerializeField] private int roomCountMax; [SerializeField] private int floorsCount; [SerializeField] private int lengthWallMin; [SerializeField] private int lengthWallMax; [SerializeField] private int lengthStartRoom; [SerializeField] private int lengthFloor; [SerializeField] private GameObject GameObjectA; [SerializeField] private GameObject GameObjectB; private int RoomCount; private LevelManager levelManager; void Start() { levelManager = LevelManager.Instance; CreateStartRoom(); } void GenerateRooms() { RoomCount = Random.Range(roomCountMin, roomCountMax); LevelManager.Rooms.Add(new Room(Vector2.zero,lengthStartRoom, lengthStartRoom,RoomType.Start)); } void CreateRoom() { int a = Random.Range(lengthWallMin, lengthWallMax); int b = Random.Range(lengthWallMin, lengthWallMax); Room room = new Room(); room.Length = a; room.Wigth = b; } void CreateStartRoom() { float randValue = Random.value; int xR, zR; Vector2Int posStartRoom = new Vector2Int(); Room room = new Room( lengthStartRoom, lengthStartRoom, RoomType.Start); if (randValue < 0.25f) //1 квадрант { xR = Random.Range(0,lengthFloor/2-lengthStartRoom); if (xR + lengthStartRoom <= lengthFloor / 4) { room.exits.Add(ExitsInRoomType.XAxisP); zR = Random.Range(0, lengthFloor/2-lengthStartRoom); } else { room.exits.Add(ExitsInRoomType.ZAxisP); zR = Random.Range(0, lengthFloor/4-lengthStartRoom); } } else if (randValue < 0.5f) // 2 квадрант { xR = Random.Range(lengthFloor/2, lengthFloor-lengthStartRoom);//от половины до конца if (xR + lengthStartRoom <= lengthFloor * 3/4) { room.exits.Add(ExitsInRoomType.ZAxisP); zR = Random.Range(0, lengthFloor/4-lengthStartRoom); } else { room.exits.Add(ExitsInRoomType.XAxisN); zR = Random.Range(0, lengthFloor/2-lengthStartRoom); } } else if (randValue < 0.75f) { xR = Random.Range(lengthFloor / 2, lengthFloor - lengthStartRoom); if (xR + lengthStartRoom <= lengthFloor * 3 / 4) { room.exits.Add(ExitsInRoomType.ZAxisN); zR = Random.Range(lengthFloor * 3 / 4, lengthFloor - lengthStartRoom); } else { room.exits.Add(ExitsInRoomType.XAxisN); zR = Random.Range(lengthFloor / 2, lengthFloor - lengthStartRoom); } } else { xR = Random.Range(0, lengthFloor / 2 - lengthStartRoom); if (xR + lengthStartRoom <= lengthFloor / 4) { room.exits.Add(ExitsInRoomType.XAxisP); zR = Random.Range(lengthFloor / 2, lengthFloor - lengthStartRoom); } else { room.exits.Add(ExitsInRoomType.ZAxisN); zR = Random.Range(lengthFloor * 3 / 4, lengthFloor - lengthStartRoom); } } room.entrance = EntranceToRoomType.Null; LevelManager.Rooms.Add(room); Instantiate(GameObjectA, new Vector3(0,-1,0), Quaternion.identity); Instantiate(GameObjectB, new Vector3(xR,0,zR), Quaternion.identity); Instantiate(GameObjectB, new Vector3(xR+lengthStartRoom,0,zR), Quaternion.identity); Instantiate(GameObjectB, new Vector3(xR+lengthStartRoom,0,zR+lengthStartRoom), Quaternion.identity); Instantiate(GameObjectB, new Vector3(xR,0,zR+lengthStartRoom), Quaternion.identity); } } }