void MarkRoomOnMatrix(RoomStruct _room) { for (int i = _room.x - (_room.heigth - 1) / 2; i <= _room.x + _room.heigth / 2; ++i) { for (int j = _room.y - (_room.width - 1) / 2; j <= _room.y + _room.width / 2; ++j) { m_MapMatrix[i, j] = STRUCTURE_TYPE.Tile; } } }
void MarkShop(RoomStruct _shop) { for (int i = _shop.x - 4; i <= _shop.x + 4; ++i) { for (int j = _shop.y - 3; j <= _shop.y + 3; ++j) { m_MapMatrix[i, j] = STRUCTURE_TYPE.Tile; if (i == _shop.x - 4 || i == _shop.x + 4 || j == _shop.y - 3 || j == _shop.y + 3) { m_MapMatrix[i, j] = STRUCTURE_TYPE.ShopWall; } } } }
void MakePath(RoomStruct _first, RoomStruct _second) { int direction = _first.y - _second.y > 0 ? -1 : 1; for (int i = _first.y; i != _second.y + direction; i = i + direction) { m_MapMatrix[_first.x, i] = STRUCTURE_TYPE.Tile; } direction = _first.x - _second.x > 0 ? -1 : 1; for (int i = _first.x; i != _second.x + direction; i = i + direction) { m_MapMatrix[i, _second.y] = STRUCTURE_TYPE.Tile; } }
public void GenerateRooms() { List <RoomStruct> first_line = new List <RoomStruct>(); List <RoomStruct> second_line = new List <RoomStruct>(); List <RoomStruct> third_line = new List <RoomStruct>(); first_line.Add(new RoomStruct()); second_line.Add(new RoomStruct()); third_line.Add(new RoomStruct()); int numOfRooms = Random.Range(5, 7); for (int i = 4; i <= numOfRooms; ++i) { int assignedRow = Random.Range(1, 4); switch (assignedRow) { case 1: first_line.Add(new RoomStruct()); break; case 2: second_line.Add(new RoomStruct()); break; case 3: third_line.Add(new RoomStruct()); break; default: Debug.LogWarning("Something went very wrong!"); break; } } KeyValuePair <int, int> first_second_link = new KeyValuePair <int, int>(Random.Range(0, first_line.Count), Random.Range(0, second_line.Count)); KeyValuePair <int, int> second_third_link = new KeyValuePair <int, int>(Random.Range(0, second_line.Count), Random.Range(0, third_line.Count)); first_line[0].x = 40; first_line[0].y = 50; MarkRoomOnMatrix(first_line[0]); for (int i = 1; i < first_line.Count; ++i) { first_line[i].x = first_line[0].x + Random.Range(-3, 4); first_line[i].y = first_line[i - 1].y + Random.Range(6, 10); MarkRoomOnMatrix(first_line[i]); MakePath(first_line[i - 1], first_line[i]); } GenerateRow(ref first_line, ref second_line, first_second_link); GenerateRow(ref second_line, ref third_line, second_third_link); bool isNeighborUp = Random.Range(1, 3) == 1 ? true : false; List <RoomStruct> room_list = isNeighborUp == true ? first_line : third_line; RoomStruct shopNeighbor = room_list[Random.Range(0, room_list.Count)]; RoomStruct shop = new RoomStruct(); shop.y = shopNeighbor.y; shop.x = shopNeighbor.x + (isNeighborUp == true ? 7 : -7); MarkShop(shop); MakePath(shop, shopNeighbor); foreach (RoomStruct room in first_line) { m_RoomsList.Add(room); } foreach (RoomStruct room in second_line) { m_RoomsList.Add(room); } foreach (RoomStruct room in third_line) { m_RoomsList.Add(room); } TrimMap(); }