private void button_save_image_Click(object sender, EventArgs e) { if (RoomMaker.checkValid()) { Bitmap bmp = new Bitmap(panel_canvas.Width, panel_canvas.Height); panel_canvas.DrawToBitmap(bmp, new Rectangle(0, 0, panel_canvas.Width, panel_canvas.Height)); saveFileDialog1.Filter = "png files (*.png)|*.png|jpeg files (*.jpeg)|*.jpeg"; saveFileDialog1.FilterIndex = 2; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { int idx = saveFileDialog1.FilterIndex; if (idx == 1) { bmp.Save(saveFileDialog1.FileName, ImageFormat.Png); } else { bmp.Save(saveFileDialog1.FileName, ImageFormat.Jpeg); } } } else { MessageBox.Show("닫힌 공간이 존재합니다."); } }
private void button_editmode_Click(object sender, EventArgs e) { if (isCreateMenu == 3) { if (RoomMaker.hasIntersect()) { MessageBox.Show("Intersection이 존재합니다."); return; } button_editmode.BackColor = Color.AliceBlue; Cursor.Current = Cursors.Default; selected_room = null; isCreateMenu = 0; panel_createroom_menu.Width = 0; } else { button_editmode.BackColor = Color.LightGray; isCreateMenu = 3; label_status.Text = "Edit Mode"; isRect = false; Cursor.Current = Cursors.Hand; panel_createroom_menu.Width = 0; } }
private void panel_canvas_MouseUp(object sender, MouseEventArgs e) { if (isRect) { List <Point> list = new List <Point>(); list.Add(new Point(rect.X + rect.Width, rect.Y)); list.Add(new Point(rect.X + rect.Width, rect.Y + rect.Height)); list.Add(new Point(rect.X, rect.Y + rect.Height)); list.Add(new Point(rect.X, rect.Y)); RoomMaker.PushRectangle(list); isRect = false; rect = new Rectangle(0, 0, 0, 0); } isDraw = false; if (isCreateMenu == 3 && isMove) { moveEndPoint = new Point(e.X, e.Y); selected_room.MoveRoom(moveStartPoint, moveEndPoint); RoomMaker.SnapRectangleRoom(selected_room); isMove = false; selected_room = null; isMovingDraw = false; } }
void NoRoomMaker() { RM = FindObjectOfType <RoomMaker>(); if (RM == null) { Debug.LogError("There are no Room Creator in the scene, you should use the Room Editor scene!"); } }
private void EditModeRemoveRoomToolStripMenuItem_Click(object sender, EventArgs e) { if (selected_room != null) { label_status.Text = "Edit Mode : Delete Mode"; RoomMaker.deleteRoom(selected_room); selected_room = null; } }
// Opens control to make your own room shape. private void vormZelfMakenToolStripMenuItem_Click(object sender, EventArgs e) { roomMaker1 = new RoomMaker(this); roomMaker1.Width = Width; roomMaker1.Height = Height; roomMaker1.Location = new Point(0, 22); Controls.Add(roomMaker1); roomMaker1.Show(); roomMaker1.BringToFront(); DesignPanel1.UnsetMightMode(); nightModeBool = false; }
public void SetupCorridor(RoomMaker room, IntRange length, IntRange roomWidth, IntRange roomHeight, int columns, int rows, bool firstCorridor) { //choose rand direction to draw coridor upon direction = (Direction)Random.Range(0, 4); //get rand length corridorLength = length.Random; //length max int maxLength = length.m_Max - 1; switch (direction) { //below we will look at what direction we want to head then //we choose a position on side (north, east ect) of wall that is random to spawn corridor from //so if case north choose random spot from top wall to draw from //now set our max length so we dont reach edge of board when drawing it case Direction.North: startXPos = Random.Range(room.xPos, room.xPos + room.roomWidth - 1); startYPos = room.yPos + room.roomHeight; maxLength = rows - startYPos - roomHeight.m_Min; break; case Direction.East: startXPos = room.xPos + room.roomWidth; startYPos = Random.Range(room.yPos, room.yPos + room.roomHeight - 1); maxLength = columns - startXPos - roomWidth.m_Min; break; case Direction.South: startXPos = Random.Range(room.xPos, room.xPos + room.roomWidth); startYPos = room.yPos; maxLength = startYPos - roomHeight.m_Min; break; case Direction.West: startXPos = room.xPos; startYPos = Random.Range(room.yPos, room.yPos + room.roomHeight); maxLength = startXPos - roomWidth.m_Min; break; } //make sure our length is not over our max possible length corridorLength = Mathf.Clamp(corridorLength, 1, maxLength); }
//check that floortile array is set to true for where we want rooms void SetTilesValuesForRooms() { //for each room for (int i = 0; i < rooms.Length; i++) { RoomMaker currentRoom = rooms[i]; //go through each tile in room vertically for (int y = 0; y < currentRoom.roomHeight; y++) { int yCoord = currentRoom.yPos + y; //go through each tile in room horizontally for (int x = 0; x < currentRoom.roomWidth; x++) { //set postion to true in floortile array FloorTiles[currentRoom.xPos + x, yCoord] = true; //MazeGrid[currentRoom.xPos + x, yCoord] = new TileVector2(currentRoom.xPos + x, yCoord, true); } } } }
void CreateRoomsAndCorridors() { //change our tile array to right size FloorTiles = new bool[columns, rows]; //MazeGrid = new TileVector2[columns, rows]; //create the rooms array with random size between upper and lower bound rooms = new RoomMaker[numRooms.Random]; //one less corridor than there is rooms //as we go room , corridoor, room, (we both start and finish with making a room so we want one less corridoor) corridors = new CorridorMaker[rooms.Length - 1]; //create 1st room corridor rooms[0] = new RoomMaker(); corridors[0] = new CorridorMaker(); //setup the first room (no corridors exist yet) rooms[0].SetupRoom(roomWidth, roomHeight, columns, rows); //make first corridor using room above corridors[0].SetupCorridor(rooms[0], corridorLength, roomWidth, roomHeight, columns, rows, true); //for each room we gotta make, excluding first (start at in i = 1) for (int i = 1; i < rooms.Length; i++) { //make room rooms[i] = new RoomMaker(); rooms[i].SetupRoom(roomWidth, roomHeight, columns, rows, corridors[i - 1]); //make a corridor if we not at end (dont want corridor leading to nothing if (i < corridors.Length) { corridors[i] = new CorridorMaker(); corridors[i].SetupCorridor(rooms[i], corridorLength, roomWidth, roomHeight, columns, rows, false); } } }
// Open shapeselector. public void ShapeSelect() { room = new Room(); ShapeSelector ss = new ShapeSelector(room); ss.ShowDialog(); if (ss.DialogResult == DialogResult.OK) { room.productList = new List <Product>(); DesignPanel1.rDesign = room; //mm.Hide(); if (roomMaker1 != null) { roomMaker1.Hide(); roomMaker1 = null; } Controls.Remove(roomMaker1); this.Show(); } DesignPanel1.UnsetMightMode(); nightModeBool = false; }
private void panel_canvas_MouseDown(object sender, MouseEventArgs e) { if (selectFurn != 0) { label_status.Text = "furniture를 선택함"; Room room = RoomMaker.CheckInnerPoint(new Point(e.X, e.Y)); if (room != null) { f.imgSize.X = e.X; f.imgSize.Y = e.Y; if (RoomMaker.PushFurniture(f) == 1) { selectFurn = 0; } } } if (isDoor) { RoomMaker.PushDoor(new Point(e.X, e.Y), true); isRect = false; isPolygon = false; label_status.Text = "door를 선택함"; } if (isWindow) { RoomMaker.PushDoor(new Point(e.X, e.Y), false); isRect = false; isPolygon = false; label_status.Text = "window를 선택함"; } if (isPolygon) { label_status.Text = "polygon을 선택함"; if (!isLine) { sp = e.Location; ep = e.Location; isLine = true; RoomMaker.PushVertex(ref sp); } else { ep = e.Location; int result = RoomMaker.PushVertex(ref ep); if (result == 1) { isPolygon = false; isLine = false; } else if (result == -1) { isPolygon = false; isLine = false; } sp = ep; } } else { sp = e.Location; } if (e.Button == MouseButtons.Right) { contextMenuStrip1.Show(new Point(MousePosition.X, MousePosition.Y)); } isDraw = true; if (isCreateMenu == 3) { if (isMove) { moveStartPoint = new Point(e.X, e.Y); isMovingDraw = true; } else { selected_room = RoomMaker.CheckInnerPoint(new Point(e.X, e.Y)); if (selected_room == null) { Debug.WriteLine("Room not selected"); } else { label_status.Text = "Edit Mode : Room을 선택함"; } contextMenuStrip3.Show(new Point(MousePosition.X, MousePosition.Y)); panel_canvas.Refresh(); } } }
// Update is called once per frame void Update() { if (!pause) { //If counter is less than counterLife, than keep moving forward if ((myCounter < counterLife || !clone)) { // Generate a random number from 0.0f to 1.0f; float randomNumber = Random.Range(0.0f, 1.0f); // If random number is less than 0.25f, then rotate myself 90 degrees on Z axis; if (randomNumber < 0.08f && hallLength > minHallLength) { transform.eulerAngles += new Vector3(0f, 0f, 90f); hallLength = 0; } // ... Else if number is 0.25f-0.5f, then rotate myself -90 degrees on Z axis; else if (randomNumber < 0.16f && hallLength > minHallLength) { transform.eulerAngles += new Vector3(0f, 0f, -90f); hallLength = 0; } // ... Else if number is 0.99f-1.0f, then instantiate a HallwayMakerPrefab clone at my current position; else if (randomNumber >= 1.0f) { HallwayMaker myClone = Instantiate(HallwayMakerPrefab, transform.position, transform.rotation); myClone.myManager = myManager; myManager.myHallways.Add(myClone); //The clone will also be rotated and pushed forward float randomNumber2 = Random.Range(0.0f, 100f); if (randomNumber2 < 50f) { myClone.transform.eulerAngles += new Vector3(0f, 0f, 90f); } else { myClone.transform.eulerAngles += new Vector3(0f, 0f, -90f); } myClone.transform.position += myClone.transform.up; myClone.clone = true; hallLength += 4; } else if (randomNumber >= 0.95) { RoomMaker myCloneRoom = Instantiate(roomMakerPrefab, transform.position, transform.rotation); myCloneRoom.myManager = myManager; myManager.myRooms.Add(myCloneRoom); hallLength += 4; if (!clone) { float randomNumber3 = Random.Range(0f, 1.0f); if (randomNumber3 > 0.5f) { HallwayMaker myClone = Instantiate(HallwayMakerPrefab, transform.position, transform.rotation); myManager.myHallways.Add(myClone); myClone.myManager = myManager; //The clone will also be rotated and pushed forward float randomNumber2 = Random.Range(0.0f, 100f); if (randomNumber2 < 50f) { myClone.transform.eulerAngles += new Vector3(0f, 0f, 90f); } else { myClone.transform.eulerAngles += new Vector3(0f, 0f, -90f); } myClone.transform.position += myClone.transform.up; myClone.clone = true; hallLength += 4; } } } // // end elseIf // Instantiate a floorPrefab clone at current position; Transform Tile = Instantiate(floorPrefab, transform.position, transform.rotation); Tile.eulerAngles = new Vector3(0f, 0f, 0f); FloorTileSpriter tileSpriter = Tile.GetComponent <FloorTileSpriter>(); tileSpriter.myManager = myManager; myManager.Tiles.Add(Tile); // Move 1 unit "upwards" based on this object's local rotation (e.g. with rotation 0,0,0 "upwards" is (0,1,0)... but with rotation 0,0,180 then "upwards" is (0,-1, 0)... ) transform.position += transform.up; // Increment counter; myCounter++; globalFloorCount++; Debug.Log(globalFloorCount.ToString()); hallLength++; } else { myManager.myHallways.Remove(this); Destroy(this.gameObject); } if (globalFloorCount >= 5000f && !clone) { myManager.myHallways.Remove(this); myManager.endgame = 1; Destroy(this.gameObject); } } }