public Room(PositiveVector2 startPoint, PositiveVector2 size, PositiveVector2 minSize, int roomsAsigned) { //En cada habitación, parto en dos si me deja el minimo de tamaño. this.startPoint = startPoint; this.roomSize = size; if (!CheckIfMinSize(minSize)) { if (roomsAsigned > 1) { roomChilds = new List <Room>(BSPDungeon.Instance.MakeRooms(Random.Range(0, 100) < 50, size, roomsAsigned, startPoint)); //Debug.Log("Room : " + this.ToString() + " childs: " + roomChilds[0].ToString() + " :::::: " + roomChilds[1].ToString()); foreach (Room room in roomChilds) { if (room.CheckIfMinSize(minSize)) { BSPDungeon.Instance.AddRoom(this); foreach (Room child in roomChilds) { BSPDungeon.Instance.DeleteRoom(child); } break; } } } else { BSPDungeon.Instance.AddRoom(this); } } }
public void SetDefinitiveSize(float mod, PositiveVector2 minSize) { PositiveVector2 oldSize = roomSize; roomSize = new PositiveVector2((int)(roomSize.X * mod), (int)(roomSize.Y * mod)); if (CheckIfMinSize(minSize)) { roomSize = oldSize; } }
private void MakeRoomsCut() { bool horizontalCut = Random.Range(0, 100) < 50; int roomNumber = Random.Range(minRoomNumber, maxRoomNumber); PositiveVector2 positionActual = new PositiveVector2((int)this.transform.position.x, (int)this.transform.position.y); float sizeFirstChunk = Random.Range(0.5f - chaosMod, 0.5f + chaosMod); Room[] initialRooms = MakeRooms(horizontalCut, size, roomNumber, positionActual, sizeFirstChunk); // Debug.Log("INITIAL ROOM: " + initialRooms[0].ToString()); //Debug.Log("2 INITIAL ROOM: " + initialRooms[1].ToString()); }
public Room[] MakeRooms(bool horizontal, PositiveVector2 size, int roomNumber, PositiveVector2 initialPoint, float sizeFirstChunk = 0.5f) { PositiveVector2 pointToStart = initialPoint; Room[] rooms = new Room[2]; int roomsToApply = (int)(roomNumber * sizeFirstChunk); PositiveVector2 sizeToApply = new PositiveVector2(horizontal ? size.X : (int)(size.X * sizeFirstChunk), horizontal ? (int)(size.Y * sizeFirstChunk) : size.Y); rooms[0] = new Room(pointToStart, sizeToApply, minRoomSize, roomsToApply); if (horizontal) { pointToStart.Y += sizeToApply.Y; } else { pointToStart.X += sizeToApply.X; } sizeToApply = new PositiveVector2(horizontal ? size.X : (int)(size.X * (1 - sizeFirstChunk)), horizontal ? (int)(size.Y * (1 - sizeFirstChunk)): size.Y); roomsToApply = roomNumber - roomsToApply; rooms[1] = new Room(pointToStart, sizeToApply, minRoomSize, roomsToApply); return(rooms); }
public PositiveVector2(PositiveVector2 other) { this.x = other.x; this.y = other.y; }
public bool CheckIfMinSize(PositiveVector2 minSize) { return(this.roomSize.X < minSize.X || this.roomSize.Y < minSize.Y); }