Souljack/Assets/_Project/Scripts/LevelGenerating/WallsGenerator.cs

122 lines
4.5 KiB
C#

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