protected RoomCandidate NewRoom(int MaxX, int MaxY, int MaxDimX, int MaxDimY, int MinDimX, int MinDimY) { RoomCandidate roomCand = new RoomCandidate(); if (MinDimX >= MaxDimX) { MinDimX = MaxDimX - 1; } if (MinDimY >= MaxDimY) { MinDimY = MaxDimY - 1; } roomCand.x = Random.Range(1, MaxX); roomCand.y = Random.Range(1, MaxY); roomCand.dimX = Random.Range(MinDimX, MaxDimX); roomCand.dimY = Random.Range(MinDimY, MaxDimY); if (roomCand.x + roomCand.dimX >= MaxX) { roomCand.dimX = MaxX - roomCand.x; } if (roomCand.y + roomCand.dimY >= MaxY) { roomCand.dimY = MaxY - roomCand.y; } return(roomCand); }
public virtual void FillSubRegionSmall(int NoOfSubRegions) { //At the moment just add rooms int NoOfAttempts = NoOfSubRegions * 8; //Try each room 8 times. int minDimX = 3; int minDimY = 3; //A medium sized room. while ((NoOfSubRegions > 0) && (NoOfAttempts > 0)) { NoOfAttempts--; RoomCandidate roomCand = NewRoom(MapWidth - 1, MapHeight - 1, 15, 15, minDimX, minDimY); if (!DoesRoomCollide(roomCand)) {//A a room or cave subregion. PlaceRoom(roomCand, UnderworldGenerator.RegionIndex + 1); switch (Random.Range(0, 2)) { case 0: SubRegions.Add(new RoomRegion(UnderworldGenerator.RegionIndex++, layer + 1, roomCand.x, roomCand.y, roomCand.dimX, roomCand.dimY, 0, this)); break; case 1: default: SubRegions.Add(new CaveRegion(UnderworldGenerator.RegionIndex++, layer + 1, roomCand.x, roomCand.y, roomCand.dimX, roomCand.dimY, 0, this)); break; } NoOfSubRegions--; } } }
protected void PlaceRoom(RoomCandidate candidate, int roomIndex) { for (int x = candidate.x; x <= candidate.x + candidate.dimX && x <= Map.GetUpperBound(0); x++) { for (int y = candidate.y; y <= candidate.y + candidate.dimY && y <= Map.GetUpperBound(1); y++) { Map[x, y].RoomMap = roomIndex; } } }
public async Task <ActionResult> PostCandidate([FromForm] CandidateAddViewModel candidate) { var a = candidate; if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (candidate.ExamId > 0) { if (candidate.TC != null && candidate.Image != null) { string NewImageName = Guid.NewGuid().ToString() + "_" + candidate.Image.FileName; string NewImagePath = Path.Combine("Images", NewImageName); string image = Path.Combine(_hostEnv.WebRootPath, NewImagePath); candidate.Image.CopyTo(new FileStream(image, FileMode.Create)); string NewFileName = Guid.NewGuid().ToString() + "_" + candidate.TC.FileName; string NewFilePath = Path.Combine("Files", NewFileName); string file = Path.Combine(_hostEnv.WebRootPath, NewFilePath); candidate.Image.CopyTo(new FileStream(file, FileMode.Create)); Candidate candidateToPost = _mapper.Map <Candidate>(candidate); candidateToPost.ImagePath = NewImagePath; candidateToPost.TCPath = NewFilePath; _repo.Add(candidateToPost); var save = await _repo.SaveAsync(candidateToPost); var rooms = await _room.GetT(); foreach (var room in rooms) { if (_roomCandidateRepo.CountCandidatesInRoom(room.RoomId, candidate.ExamId) < room.Capacity) { RoomCandidate rc = new RoomCandidate { RoomId = room.RoomId, ExamId = candidate.ExamId, CandidateId = candidateToPost.CandidateId }; _seat.Add(rc); await _seat.SaveAsync(rc); candidateToPost.Exams = null; rc.Room.RoomCandidates = null; return(Ok(rc)); } } return(Ok(candidateToPost)); } } return(BadRequest()); }
protected bool DoesRoomCollide(RoomCandidate candidate) { for (int x = candidate.x; x <= candidate.x + candidate.dimX && x <= Map.GetUpperBound(0); x++) { for (int y = candidate.y; y <= candidate.y + candidate.dimY && y <= Map.GetUpperBound(1); y++) { if (Map[x, y].RoomMap != 0) {//Space already contains a room. return(true); } } } return(false); }