From 18908b2ae7c1621bf84fed2a7210dcb942a5e07b Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 20 Feb 2025 17:44:46 +0100 Subject: [PATCH] Implemented multiple numbers on monster rooms --- .../Debug/net9.0/DiceProbabilitesPrinter.dll | Bin 5632 -> 5632 bytes .../Debug/net9.0/DiceProbabilitesPrinter.exe | Bin 145920 -> 145920 bytes .../bin/Debug/net9.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../netstandard2.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../DungeonMapConsolePrinter/Program.cs | 2 + .../bin/Debug/net9.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../Debug/net9.0/DungeonMapConsolePrinter.dll | Bin 6656 -> 6656 bytes .../Debug/net9.0/DungeonMapConsolePrinter.exe | Bin 145920 -> 145920 bytes .../bin/Debug/net9.0/DungeonMapGenerator.dll | Bin 31744 -> 33280 bytes .../DungeonMapGenerator/BossRoom.cs | 11 +++ .../DungeonMapGenerator/DungeonGenerator.cs | 69 +++++++++--------- .../DungeonLockPopulator.cs | 45 +++++++++++- .../DungeonMapGenerator/DungeonMap.cs | 62 +++++++--------- .../DungeonMapGenerator/EntranceRoom.cs | 11 +++ .../DungeonMapGenerator/EvenDisperser.cs | 8 +- .../DungeonMapGenerator/MonsterRoom.cs | 16 ++++ .../DungeonMapGenerator/Room.cs | 10 +-- .../netstandard2.0/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../netstandard2.0/DungeonMapGenerator.dll | Bin 31744 -> 33280 bytes .../Assets/Plugins/DiceProbabilities.dll | Bin 6656 -> 6656 bytes .../Assets/Plugins/DungeonMapGenerator.dll | Bin 28672 -> 33280 bytes .../DungeonGenerator/DungeonMapLoader.cs | 8 ++ 22 files changed, 157 insertions(+), 85 deletions(-) create mode 100644 DungeonMapGenerator/DungeonMapGenerator/BossRoom.cs create mode 100644 DungeonMapGenerator/DungeonMapGenerator/EntranceRoom.cs create mode 100644 DungeonMapGenerator/DungeonMapGenerator/MonsterRoom.cs diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll index d0dd18b9e0f12c599c0c1957876e3de40fe6207f..ae448ee37e6d25465668858509cb6b024a4fca0c 100644 GIT binary patch delta 235 zcmZqBY0#O_!Lsz%s&^ZEey|H{k*c#OJ?i1p`glc)?_vY?%~Lo888uAP43Z6!P1B6b zQjN@#%`DB0EYs2~ER0PJjZM>%lT3^Zl1wbj6HO?pg(Id5f_KAx#H^1cC&Ejv$kj7xZkPOBk zwh@CFLn@d|2C^&}%zx*NUy$ZPsmhgmHc#OYWYjP)PBTa|w=lI# zO-nX3H%U&mOg1nuPqr{MG&fF6Hcw2mFir+?4JV)F6lbxRS=crC1!sW3%xB;4mMWJ! z>^#G=^Ngd3>0}SCMg^##z)z?kNOfvU_Wy3tl8O6nuXw!qCD(2ie**?%hBO8PAU0>P zU@&E{WJm?FlNk(wd=ns@3=~NQ${PUr$zT;A8DoY-AkQ2~rUAu_!EBJM;pWf$yleog CGfXA` diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe index bd8a0d84d6948804f23dd4cb3b0a63547eb105ea..10927e8497236a20369383c82175b4a134471cf8 100644 GIT binary patch delta 99 zcmZqp!qEUkEsR^3rkMJhGNdsWFeHO9h;77R#*hjolYuNt26G_W5-6U=U;%{245kc* dU@{G;CyBuXC~E+wEr2Q$8BDi7Hf54!0RR?25?lZP delta 99 zcmZqp!qEUkEsR^3rkMI0Fc>qWF&F@`IfDg*DT5_LDv+JbU)-3*}3~3Ao49Q>&VjD4- zF{FaYWFX6u!5ql81d69ISOB3hgDHa{m`nreNn$Vo${K)a3!utG2Gh;;;*CrIj=)Qf delta 237 zcmZoLX)u}4!J^afcj?BS4SWJOF5KCdtW`$p!}I$rh%D=EjN1=80(*#>qggAp-=+ih6CC{6jE6;Dq`L4pYnfzFS_d z>FPaZG;eZ*P^|(~aPAkVAV_s!n9$qTai4;@wXJzKe-*N3@i$;FW=LZ&0Ah0n3kFjL zONLY+JDI@{$TtDf$v}~0pu7Q)pA1$3k}+mT1oF&*WExP+7|aIA8g8x^Z)5@h8{bBx diff --git a/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll index d4d9f933108fed5d67a2dd0db9ddbe20c283e5da..b616e06020c97b8ab2566414a0b96dd2a8624124 100644 GIT binary patch delta 237 zcmZoLX)u}4!Ls|E&E}0g8~6ma{r=xB8!hA3r{&&t;y}mh%|85)-3*}3~3Ao49Q>&VjD4- zF{FaYWFX6u!5ql81d69ISOB3hgDHa{m`nreNn$Vo${K)a3!utG2Gh;;;*CrIj=)Qf delta 237 zcmZoLX)u}4!E(ap?V*i58~6k&w)mQGEwJ;RV7aqo`Xx!R%|85A9 diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/Program.cs b/DungeonMapGenerator/DungeonMapConsolePrinter/Program.cs index 779bee9..746e138 100644 --- a/DungeonMapGenerator/DungeonMapConsolePrinter/Program.cs +++ b/DungeonMapGenerator/DungeonMapConsolePrinter/Program.cs @@ -17,6 +17,8 @@ class Program int height = 20; DungeonMap map = generator.GenerateDungeon(width, height, 5); DungeonLockPopulator.PopulateLocksOfDungeon(map); + DungeonLockPopulator.AddExtraLocksToMonsterRooms(map.GetMonsterRooms()); + DungeonLockPopulator.AddExtraLocksToBossRoom(map.GetBossRoom()); List potentialLootRooms = new List(); potentialLootRooms.AddRange(map.GetNormalRooms()); potentialLootRooms.AddRange(map.GetMonsterRooms()); diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll index d4d9f933108fed5d67a2dd0db9ddbe20c283e5da..b616e06020c97b8ab2566414a0b96dd2a8624124 100644 GIT binary patch delta 237 zcmZoLX)u}4!Ls|E&E}0g8~6ma{r=xB8!hA3r{&&t;y}mh%|85)-3*}3~3Ao49Q>&VjD4- zF{FaYWFX6u!5ql81d69ISOB3hgDHa{m`nreNn$Vo${K)a3!utG2Gh;;;*CrIj=)Qf delta 237 zcmZoLX)u}4!E(ap?V*i58~6k&w)mQGEwJ;RV7aqo`Xx!R%|85A9 diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll index 1453861c0deb210ec769db4e5bb18096418ec2cc..c0bd6b7d8ff57917fe4c4211727255cd355258f0 100644 GIT binary patch delta 1420 zcmZ9MUrZcD9LK*iyBypB$8iS~3MmIfISVz*!NFZ>no_7r4B?YMT?th#W2F*jEyKF+Nk_l~s!17JH0^ty5lfs&Vi659POz=+czTb(h{ zEY_S^kqKU9vTDz=OB5j5091GYL7Uy>w0SLOP@3YNGb$g;xb1Sl6Y>*q+X1C3lulQY z0khn6+f`Kd9_3V)O5d^61iN}G7OGLBdy02?#a~ce6WUALUobU9J5;M;G!n|F+cFA6 zA_}x9_r(9)MIlyD-q1egh3ZwZ+YTz-p!EJm8ESNDjFv;|5@>pp?`m)@OzPq3sWay% z(|lDd6awcsHjNGgMSxG~XGZ&aIr?au(z#?jUdiX;GVOHU8ja2u#(~T&!-e04;%&TV zl;Jzx#DzcLmM(lRz9suKU7Agr%bNG0qNnxTJDOiX)#))OqzATUNf6B9x;@yher$s`Mk*C16e8r4sd;dx2qRe zPQ8@Cy5YuxAy7`bP(ym~1nEPYW=ykNvrltKb4)Wq3Y;M;@v7!5>B4LVE3yTv_(Znj z3W8>g+BA<)Uz7dRGjfO@s7k$ppN$u(ZA_9cu*_ZjX3-A%Btc zxQ7{B=iDahA8`XqxTvdnVd5sd$Q0pUG_%}4;z<-EKn74p*5V-9gkG`*m&kT3lLzq; z*@Mr>=d^#A>_HL_$+P%N?8R}I*{%PCOSj$jaMRt742~aSQCWxe@3iC3GHrLF#Se0~ z@3M07VcyNhUAAnD+vn5M6H~`*`(<>WI(2krdMeRxC(ouw>?3wMO@IFLqSr;$uGsc8 zXTN93XWd;(f7}E{5GF*Q%F*k(RQf3hT69qK=C!F%)Dl;Jh z$Xmt7M03hYTFFQ%+&K~MOm@b)!m(5;8f}lXwMSCP@s6-H-VyCeM4Z)<+6W)M%xrxC z5g%0F*F5_&&!FW}itVO;Af5``9U#oJDC~7MOB#KDuYR-f^yE_Cm)679H|`An$_>hQ?R&)sz;DQ z7@e5VOj57Nmo1+yg%2N8xuiDX#HWg{*t0?zFL z3!1s1EV0~&sc{)g7BUhOja9ck7$w;>CYqQ{O^gp1pEO3@qI>a0zvnQF8h_3C-0$!E zJLlZ?++Xi(Vm9&0Y4e>ImftHZY!)qrmB+lFM}SAb=mhp!g`mIkNuZMXN85o%ouF)U z21Tm~J98o*5N#|l_Hjs*ArJ(XT!3KCVL7YbsM9M=QE~?4)`L?ufZK1@n66wcRnAX9 zWp)3`>Q&aTUJGwhSJxzWo2V^oYzj9ruPvMGV;*i&H6|IAG&?tCeOvRoRT1Wb2y5ZZ zG{Sc)*Oj|R=`BicZ;|1E6Eh;auSy{F91u15GfnFL>B;e$N4#t5EwGrY+srZwwi3yf23gFRJ-$+?b-~o^qakkX4H(-dV{)N>8mc zhMd>T*8DB>&2GUh^al8)QNVHeJ15o$RrX@z1efsu=v*;em@outNDED*8~2eu#56lJ zAJpv9?9&|7%#Z@(WIdkNoFgsFQAwZlQ^Mw_QHe%FDmdoTDjYr*nzwU ze_#jvFqqth7BYkg8NoQ&j#K0VSS0u0Jh@-{{p22Gaf5sc--u>(z?@xgY#!I0_>D)$ zZvQ)8!db1^dmE9U7-A3ncjC?e@lNYSX*^S$v2wELb4?3p$^EMD;o(24zJ2yscj>Kj z*VcAlx1D{S4(Gh5!8IuSFaxOVDV973L_R&1vh8Hdj>X~$J2_$}vzg>*B0ZKKZO=rL zqp3tT8IPuR0%d{^T#->B;L-P0xYl#|21HM$r z!8ud4$@j|}_Q=OL*S+}3_*Sd@<;%{yRVU*c=7Bq=y3L2TyU+f3XxsFcr!s4|xz$Eg zt5-^(5Nr^l_`G*PIA3@dieBHFMo$`JNWtbO$)2=1Vu&N5^AXJ~GOUf#Q*+Z)?R28r cOVQ0z#hItDvshjyOnL9FVol?(q7W_r3pS78g8%>k diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe index c2903ddbe5c764e0428c40f7af1da0a3e529edcf..8e55002c7181c8c796542e0c5a9d6ebce716cf2d 100644 GIT binary patch delta 97 zcmZqp!qEUkEsR^3R+;*yF&Ho;gRvaDT5)9Gz3B;1`{wp2}~w4Bm(79fMOuE=0KJ) aP{aT%W(E{Z2C|HRd@}}%?cYtAI9UJ`MiP(! diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll index b675a0c238cd60ee9042f95f697f80ac8fa3c06b..8cd40a0f9efc11a3a00f2a4eb5b51b0a2a23dc27 100644 GIT binary patch literal 33280 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

qafPGqeE^;hQ0`{f&bfXAp5Orr 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 P)qkSy|E= entranceRooms = dungeon.GetEntranceRooms(); + List entranceRooms = dungeon.GetEntranceRooms(); List roomsToAddRoomsTowards = dungeon.GetNodeRooms(); List obstructions = dungeon.GetRootRooms(); foreach (Room entranceRoom in entranceRooms) { - if (entranceRoom.GetAdjacentRooms().All(adjacent => adjacent.TypeOfRoom == RoomType.Entrance)) + if (entranceRoom.GetAdjacentRooms().All(adjacent => adjacent is EntranceRoom)) { Room closestRoom = null; foreach (RoomSide side in Enum.GetValues(typeof(RoomSide))) @@ -73,7 +73,7 @@ namespace DungeonMapGenerator dungeon.AddRooms(PlaceRoomsOrganicallyTowardRoom( entranceRoom, closestRoom, - RoomType.Normal, + typeof(Room), dungeon.GetOccupiedPoints(), dungeon.GetUnoccupiedPoints())); } @@ -122,7 +122,7 @@ namespace DungeonMapGenerator if (closestSeenRoom != null) { //Place rooms along the line until they are connected - dungeon.AddRooms(PlaceRoomsOrganicallyTowardRoom(room, closestSeenRoom, RoomType.Normal, + dungeon.AddRooms(PlaceRoomsOrganicallyTowardRoom(room, closestSeenRoom, typeof(Room), dungeon.GetOccupiedPoints(), dungeon.GetUnoccupiedPoints())); } } @@ -185,7 +185,7 @@ namespace DungeonMapGenerator } // Create room and add it if valid - Room newRoom = CreateAdjacentRoom(RoomType.Normal, unoccupiedPointsOnSide, side, dungeon.GetOccupiedPoints()); + Room newRoom = CreateAdjacentRoom(typeof(Room), unoccupiedPointsOnSide, side, dungeon.GetOccupiedPoints()); if (newRoom != null) { room.AddAdjacentRoomBySide(newRoom, side); @@ -254,9 +254,9 @@ namespace DungeonMapGenerator } } - private Room CreateAdjacentRoom(RoomType type, List unoccupiedPointsOnSide, RoomSide side, HashSet occupiedPoints) + private Room CreateAdjacentRoom(Type roomType, List unoccupiedPointsOnSide, RoomSide side, HashSet occupiedPoints) { - int sizeOfNewRoom = GetRoomSizeByType(type); + int sizeOfNewRoom = GetRoomSizeByType(roomType); Random random = new Random(); // Sort points by their coordinate based on the side of placement @@ -299,7 +299,7 @@ namespace DungeonMapGenerator break; } - Room testRoom = new Room(type, sizeOfNewRoom, sizeOfNewRoom, adjustedPoint); + Room testRoom = (Room)Activator.CreateInstance(roomType, sizeOfNewRoom, sizeOfNewRoom, adjustedPoint); if (!testRoom.GetPointsInRoom().Any(occupiedPoints.Contains)) { validRooms.Add(testRoom); // First point is the top-left point of the room @@ -343,20 +343,17 @@ namespace DungeonMapGenerator return true; } - private int GetRoomSizeByType(RoomType type) + private int GetRoomSizeByType(Type roomType) { - switch (type) + if (roomType == typeof(EntranceRoom)) { - case RoomType.Entrance: - return SIDE_LENGTH_OF_ENTRANCE; - case RoomType.Monster: - return - SIDE_LENGTH_OF_MONSTER; - case RoomType.Normal: - return SIDE_LENGTH_OF_NORMAL; - default: - return SIDE_LENGTH_OF_NORMAL; + return SIDE_LENGTH_OF_MONSTER; } + if (roomType == typeof(MonsterRoom)) + { + return SIDE_LENGTH_OF_MONSTER; + } + return SIDE_LENGTH_OF_NORMAL; } private Room GenerateOnlyBossRoom(int xLengthOfDungeon, int yLengthOfDungeon, int width, int heigth) @@ -367,7 +364,7 @@ namespace DungeonMapGenerator Random random = new Random(); int bossX = middleAreaX + random.Next(0, middleAreaX - width); int bossY = middleAreaY + random.Next(0, middleAreaY - heigth); - return new Room(RoomType.Boss, width, heigth, new Point(bossX, bossY)); + return new BossRoom(width, heigth, new Point(bossX, bossY)); } private enum Side @@ -421,20 +418,20 @@ namespace DungeonMapGenerator // Add half of points for this entrance line to the top left side for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(i,0))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(i,0))); } // Add the rest of the points for this entrance line to the top right side. for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right - i,0))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right - i,0))); } break; case 1: int startOfLine = GetStartOfCenteredLine(xLengthOfDungeon, roomsPerLine, SIDE_LENGTH_OF_NORMAL); for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL,new Point(startOfLine + i, 0))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL,new Point(startOfLine + i, 0))); } break; } @@ -445,20 +442,20 @@ namespace DungeonMapGenerator // Add points for this entrance line to the top right side for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, i + SIDE_LENGTH_OF_NORMAL))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, i + SIDE_LENGTH_OF_NORMAL))); } // Add the rest of the points for this entrance line to the bottom right side. for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, oneRoomFromBottom - i))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, oneRoomFromBottom - i))); } break; case 1: int startOfLine = GetStartOfCenteredLine(yLengthOfDungeon, roomsPerLine, SIDE_LENGTH_OF_NORMAL); for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, startOfLine + i))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(right, startOfLine + i))); } break; } @@ -469,20 +466,20 @@ namespace DungeonMapGenerator // Add half of points for this entrance line to the bottom left side for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(i, bottom))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(i, bottom))); } // Add the rest of the points for this entrance line to the bottom right side. for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point((xLengthOfDungeon - 1) - i, bottom))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point((xLengthOfDungeon - 1) - i, bottom))); } break; case 1: int startOfLine = GetStartOfCenteredLine(xLengthOfDungeon, roomsPerLine, SIDE_LENGTH_OF_NORMAL); for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(startOfLine + i, bottom))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(startOfLine + i, bottom))); } break; } @@ -493,20 +490,20 @@ namespace DungeonMapGenerator // Add half of points for this entrance line to the top left side for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, i + SIDE_LENGTH_OF_NORMAL))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, i + SIDE_LENGTH_OF_NORMAL))); } // Add the rest of the points for this entrance line to the bottom left side. for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, oneRoomFromBottom - i))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, oneRoomFromBottom - i))); } break; case 1: int startOfLine = GetStartOfCenteredLine(yLengthOfDungeon, roomsPerLine, SIDE_LENGTH_OF_NORMAL); for (var i = 0; i < roomsPerLine * SIDE_LENGTH_OF_NORMAL; i += SIDE_LENGTH_OF_NORMAL) { - entranceRooms.Add(new Room(RoomType.Entrance, SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, startOfLine + i))); + entranceRooms.Add(new EntranceRoom(SIDE_LENGTH_OF_NORMAL, SIDE_LENGTH_OF_NORMAL, new Point(0, startOfLine + i))); } break; } @@ -613,7 +610,7 @@ namespace DungeonMapGenerator return points; } - private List PlaceRoomsOrganicallyTowardRoom(Room startingRoom, Room targetRoom, RoomType type, + private List PlaceRoomsOrganicallyTowardRoom(Room startingRoom, Room targetRoom, Type roomType, HashSet occupiedPoints, HashSet unoccupiedPoints) { List placedRooms = new List(); @@ -631,12 +628,12 @@ namespace DungeonMapGenerator GetSidesTowardsEndPoint(currentRoom.GetCenterOfRoom(), targetRoom.GetCenterOfRoom()); List availablePointsOnSide = GetUnoccupiedPointsOnSide(currentRoom, primary, unoccupiedPoints); - newRoom = CreateAdjacentRoom(type, availablePointsOnSide, primary, occupiedPoints); + newRoom = CreateAdjacentRoom(roomType, availablePointsOnSide, primary, occupiedPoints); // If the primary side doesn't have room for a new room the try secondary if (newRoom == null) { availablePointsOnSide = GetUnoccupiedPointsOnSide(currentRoom, secondary, unoccupiedPoints); - newRoom = CreateAdjacentRoom(type, availablePointsOnSide, secondary, occupiedPoints); + newRoom = CreateAdjacentRoom(roomType, availablePointsOnSide, secondary, occupiedPoints); } if (newRoom != null) diff --git a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs index 17690ba..8a5a2df 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs @@ -13,8 +13,12 @@ namespace DungeonMapGenerator { Random random = new Random(); float desiredSuccessChance = .995f; - - List currentRooms = dungeon.GetEntranceRooms(); + + List currentRooms = new List(); + foreach (EntranceRoom entranceRoom in dungeon.GetEntranceRooms()) + { + currentRooms.Add(entranceRoom); + } HashSet seenRooms = new HashSet(currentRooms); // Set entrance room locks to 2 - 12 @@ -115,6 +119,43 @@ namespace DungeonMapGenerator } } + public static void AddExtraLocksToMonsterRooms(List monsterRooms) + { + int maxExtraMonsterRoomLocks = 2; + foreach (MonsterRoom monsterRoom in monsterRooms) + { + int extraLockCounter = 0; + foreach (Room adjacentRoom in monsterRoom.GetAdjacentRooms()) + { + if (Lock.VeryHardLocks.All(l => l.GetLock() != adjacentRoom.Lock.GetLock())) + { + if (extraLockCounter < maxExtraMonsterRoomLocks) + { + monsterRoom.ExtraLocks.Add(new Lock(adjacentRoom.Lock.GetLock())); + extraLockCounter++; + } + } + } + } + } + + public static void AddExtraLocksToBossRoom(BossRoom bossRoom) + { + int maxExtraBossRooms = 5; + int extraLockCounter = 0; + foreach (Room adjacentRoom in bossRoom.GetAdjacentRooms()) + { + if (Lock.VeryHardLocks.All(l => l.GetLock() != adjacentRoom.Lock.GetLock())) + { + if (extraLockCounter < maxExtraBossRooms) + { + bossRoom.ExtraLocks.Add(new Lock(adjacentRoom.Lock.GetLock())); + extraLockCounter++; + } + } + } + } + private static List GenerateLocks(List pregeneratedLocks, int numLocks, float successChance) { List locks = new List(); diff --git a/DungeonMapGenerator/DungeonMapGenerator/DungeonMap.cs b/DungeonMapGenerator/DungeonMapGenerator/DungeonMap.cs index 57d7355..e91d7dd 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/DungeonMap.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/DungeonMap.cs @@ -13,13 +13,13 @@ namespace DungeonMapGenerator [JsonProperty("Height")] public int Height; [JsonProperty("MonsterRooms")] - private List _monsterRooms = new List(); + private List _monsterRooms = new List(); [JsonProperty("EntranceRooms")] - private List _entranceRooms = new List(); + private List _entranceRooms = new List(); [JsonProperty("NormalRooms")] private List _normalRooms = new List(); [JsonProperty("BossRoom")] - private Room _bossRoom; + private BossRoom _bossRoom; private HashSet _unoccupiedPoints = new HashSet(); private HashSet _occupiedPoints = new HashSet(); public DungeonMap(){ } @@ -60,22 +60,24 @@ namespace DungeonMapGenerator public void AddRoom(Room room) { - switch (room.TypeOfRoom) + if (room is MonsterRoom) { - case RoomType.Monster: - _monsterRooms.Add(room); - break; - case RoomType.Entrance: - _entranceRooms.Add(room); - break; - case RoomType.Normal: - _normalRooms.Add(room); - break; - case RoomType.Boss: - _bossRoom = room; - break; - default: - return; + if (room is BossRoom) + { + _bossRoom = (BossRoom)room; + } + else + { + _monsterRooms.Add((MonsterRoom)room); + } + } + else if (room is EntranceRoom) + { + _entranceRooms.Add((EntranceRoom)room); + } + else + { + _normalRooms.Add(room); } AddPointsToOccupied(room.GetPointsInRoom()); @@ -83,37 +85,23 @@ namespace DungeonMapGenerator public void AddRooms(List rooms) { - if (rooms.Count == 0) return; - - switch (rooms[0].TypeOfRoom) + foreach (Room room in rooms) { - case RoomType.Monster: - _monsterRooms.AddRange(rooms); - break; - case RoomType.Entrance: - _entranceRooms.AddRange(rooms); - break; - case RoomType.Normal: - _normalRooms.AddRange(rooms); - break; - default: - return; + AddRoom(room); } - - AddPointsToOccupied(rooms.SelectMany(room => room.GetPointsInRoom()).ToList()); } - public List GetMonsterRooms() + public List GetMonsterRooms() { return _monsterRooms; } - public Room GetBossRoom() + public BossRoom GetBossRoom() { return _bossRoom; } - public List GetEntranceRooms() + public List GetEntranceRooms() { return _entranceRooms; } diff --git a/DungeonMapGenerator/DungeonMapGenerator/EntranceRoom.cs b/DungeonMapGenerator/DungeonMapGenerator/EntranceRoom.cs new file mode 100644 index 0000000..87f7ba9 --- /dev/null +++ b/DungeonMapGenerator/DungeonMapGenerator/EntranceRoom.cs @@ -0,0 +1,11 @@ +namespace DungeonMapGenerator +{ + public class EntranceRoom : Room + { + public EntranceRoom(int width, int height, Point positionOfTopLeft) + : base(width, height, positionOfTopLeft) // Calls Room's constructor + { + TypeOfRoom = RoomType.Entrance; + } + } +} \ No newline at end of file diff --git a/DungeonMapGenerator/DungeonMapGenerator/EvenDisperser.cs b/DungeonMapGenerator/DungeonMapGenerator/EvenDisperser.cs index ca27b23..f03ad01 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/EvenDisperser.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/EvenDisperser.cs @@ -8,7 +8,6 @@ namespace DungeonMapGenerator public class EvenDisperser { private List _samples = new List(){new Room( - RoomType.Normal, 1, 1, new Point(1000, 1000))}; @@ -36,16 +35,15 @@ namespace DungeonMapGenerator return availablePoints; } - public Room GenerateAndPlaceRoom(int xLength, int yLength, RoomType roomType) + public Room GenerateAndPlaceRoom(int xLength, int yLength, Type roomType) { int numCandidates = 100; // Increasing improves results but greatly effects performance. Random rnd = new Random(); - Room bestCandidate = new Room(roomType, xLength, yLength, new Point(Int32.MaxValue, Int32.MaxValue)); + Room bestCandidate = new Room(xLength, yLength, new Point(Int32.MaxValue, Int32.MaxValue)); int bestDistance = 0; for (var i = 0; i < numCandidates; i++) { - var candidate = new Room( - roomType, xLength, yLength, _availablePoints.ToList()[rnd.Next(0, _availablePoints.Count)]); + var candidate = (Room)Activator.CreateInstance(roomType, xLength, yLength, _availablePoints.ToList()[rnd.Next(0, _availablePoints.Count)]); var distance = candidate.GetDistanceToRoom(FindClosestRoom(_samples, candidate)); if (distance > bestDistance && candidate.GetPointsInRoom().All(room => _availablePoints.Contains(room))) diff --git a/DungeonMapGenerator/DungeonMapGenerator/MonsterRoom.cs b/DungeonMapGenerator/DungeonMapGenerator/MonsterRoom.cs new file mode 100644 index 0000000..8cdeef4 --- /dev/null +++ b/DungeonMapGenerator/DungeonMapGenerator/MonsterRoom.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace DungeonMapGenerator +{ + public class MonsterRoom : Room + { + + public MonsterRoom(int width, int height, Point positionOfTopLeft) + : base(width, height, positionOfTopLeft) // Calls Room's constructor + { + TypeOfRoom = RoomType.Monster; + } + + public List ExtraLocks = new List(); + } +} \ No newline at end of file diff --git a/DungeonMapGenerator/DungeonMapGenerator/Room.cs b/DungeonMapGenerator/DungeonMapGenerator/Room.cs index 9031140..b782b77 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/Room.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/Room.cs @@ -32,8 +32,8 @@ namespace DungeonMapGenerator public class Room { private static int _nextId = 1; - - public RoomType TypeOfRoom { get; set; } + public RoomType TypeOfRoom { get; protected set; } + public Lock Lock { get; set; } public int Height { get; set; } public int Width { get; set; } @@ -51,15 +51,15 @@ namespace DungeonMapGenerator } - public Room(RoomType roomType, int width, int height, Point positionOfTopLeft) + public Room(int width, int height, Point positionOfTopLeft) { + TypeOfRoom = RoomType.Normal; Id = _nextId++; - TypeOfRoom = roomType; Width = width; Height = height; PositionOfTopLeft = positionOfTopLeft; } - + public void AddAdjacentRoom(Room room) { _adjacentRooms.Add(room); diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll index d4d9f933108fed5d67a2dd0db9ddbe20c283e5da..b616e06020c97b8ab2566414a0b96dd2a8624124 100644 GIT binary patch delta 237 zcmZoLX)u}4!Ls|E&E}0g8~6ma{r=xB8!hA3r{&&t;y}mh%|85)-3*}3~3Ao49Q>&VjD4- zF{FaYWFX6u!5ql81d69ISOB3hgDHa{m`nreNn$Vo${K)a3!utG2Gh;;;*CrIj=)Qf delta 237 zcmZoLX)u}4!E(ap?V*i58~6k&w)mQGEwJ;RV7aqo`Xx!R%|85A9 diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll index b675a0c238cd60ee9042f95f697f80ac8fa3c06b..8cd40a0f9efc11a3a00f2a4eb5b51b0a2a23dc27 100644 GIT binary patch literal 33280 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

qafPGqeE^;hQ0`{f&bfXAp5Orr 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 P)qkSy|E=OASTALE|vvllk|@K-V! zrzRRECz>Z3B&Qfy7#kaz87G@2Cz_aB8X20I8l@OoTAG=er6wCDGeAK3EdK42e+UK$ z>^skSxouv6<8)Q#E>XeDPbWtR)ha**55fdNsvC4p-0e!A&hdJkJNxFZLe?z)sSJq> zh78F-(j15lfUFcCX~AF&ghmWzKr)%Z6fAE7RAC7eGX#p70_hYW%Mu99z%Ui4258Ra Idhtdk0OTo2W&i*H diff --git a/PuzzleGameProject/Assets/Plugins/DungeonMapGenerator.dll b/PuzzleGameProject/Assets/Plugins/DungeonMapGenerator.dll index cc09e97adc4f2efc96703a56cc23a3aa3198273e..b3c643e21c329d971c4ccde5d91e08727cda6abf 100644 GIT binary patch literal 33280 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 NZ2#ZS|Nk`b{{m{yxf}oh literal 28672 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 diff --git a/PuzzleGameProject/Assets/Scripts/DungeonGenerator/DungeonMapLoader.cs b/PuzzleGameProject/Assets/Scripts/DungeonGenerator/DungeonMapLoader.cs index 535f2d5..c946098 100644 --- a/PuzzleGameProject/Assets/Scripts/DungeonGenerator/DungeonMapLoader.cs +++ b/PuzzleGameProject/Assets/Scripts/DungeonGenerator/DungeonMapLoader.cs @@ -29,6 +29,10 @@ namespace DungeonGenerator GameObject bossRoomGO = PrefabUtility.InstantiatePrefab(bossRoomPrefab, gameObject.transform) as GameObject; bossRoomGO.transform.position = ConvertToUnityPosition(map.GetBossRoom().GetCenterOfRoom(), map.Width, map.Height); AddLockToRoomObject(bossRoomGO, map.GetBossRoom().Lock.GetLock()); + foreach (DungeonMapGenerator.Lock extraLock in map.GetBossRoom().ExtraLocks) + { + AddLockToRoomObject(bossRoomGO, extraLock.GetLock()); + } _roomIdToGameObject[map.GetBossRoom().Id] = bossRoomGO; foreach (var monsterRoom in map.GetMonsterRooms()) @@ -36,6 +40,10 @@ namespace DungeonGenerator GameObject monsterRoomGO = PrefabUtility.InstantiatePrefab(monsterRoomPrefab, gameObject.transform) as GameObject; monsterRoomGO.transform.position = ConvertToUnityPosition(monsterRoom.GetCenterOfRoom(), map.Width, map.Height); AddLockToRoomObject(monsterRoomGO, monsterRoom.Lock.GetLock()); + foreach (DungeonMapGenerator.Lock extraLock in monsterRoom.ExtraLocks) + { + AddLockToRoomObject(monsterRoomGO, extraLock.GetLock()); + } _roomIdToGameObject[monsterRoom.Id] = monsterRoomGO; }