public static PortTownReturnPacket generatePortTownInformation_DemoVer(SimplifiedLayoutReturnPacket simplifiedLayout, UpscaledLayoutReturnPacket upscaledLayout, float roomWidthHeight, int numOfVertsPerEdge) { PortTownReturnPacket portTownPacket = new PortTownReturnPacket(1); PortTownIndividualPacket portTownIndividual = new PortTownIndividualPacket(); portTownIndividual.setAllData_forDemo(); portTownPacket.addNewPortTownData(portTownIndividual); return(portTownPacket); }
public static PortTownReturnPacket generatePortTownInformation(SimplifiedLayoutReturnPacket simplifiedLayout, UpscaledLayoutReturnPacket upscaledLayout, float roomWidthHeight, int numOfVertsPerEdge, byte sizeOfExplorableArea, System.Random random_forThread) { byte targetNumberOfPortTowns = getTargetNumberOfPortTownsByAreaSize(sizeOfExplorableArea, random_forThread); SimpleRoom_Output[,] simplifiedRoomArray = simplifiedLayout.getSimplifiedRoomArray(); PortTownReturnPacket portTownPacket = new PortTownReturnPacket(targetNumberOfPortTowns); byte simpleLayoutWidth = (byte)simplifiedRoomArray.GetLength(0); byte simpleLayoutHeight = (byte)simplifiedRoomArray.GetLength(1); byte roomX; byte roomY; byte breaker; // First, place a port town at the starting space: roomX = simplifiedLayout.getPlayerStartingLocation()[0]; roomY = simplifiedLayout.getPlayerStartingLocation()[1]; portTownPacket.addNewPortTownData(createNewPortTownAtLocation(simplifiedLayout, upscaledLayout, roomX, roomY, roomWidthHeight, numOfVertsPerEdge, random_forThread)); // Then, build more as neccessary: for (byte index = 0; index < targetNumberOfPortTowns - 1; index++) { breaker = 50; do { roomX = (byte)random_forThread.Next(0, simpleLayoutWidth); roomY = (byte)random_forThread.Next(0, simpleLayoutHeight); // If the town can't be placed in 50 attempts, chances are none of the later ones will either. // So we give up and return the port towns before the target number is reached. if (--breaker == 0 && index > 0) { return(portTownPacket); } } while (!checkIfRoomCanHavePortTown(simplifiedRoomArray[roomX, roomY], portTownPacket, roomX, roomY, simplifiedLayout.getFinalTreasureLocation())); portTownPacket.addNewPortTownData(createNewPortTownAtLocation(simplifiedLayout, upscaledLayout, roomX, roomY, roomWidthHeight, numOfVertsPerEdge, random_forThread)); } return(portTownPacket); }
// Check to see if the simple room has one open door and one closed door. private static bool checkIfRoomCanHavePortTown(SimpleRoom_Output simpleRoom, PortTownReturnPacket portTownPacket, byte xCoord, byte yCoord, byte[] finalTreasureCoords) { // First, check if the space has water, and is not too close to another port town: if (simpleRoom.getIsNotEmpty() && !portTownPacket.checkIfCoordinateIsTooCloseToAnotherPortTown(xCoord, yCoord) && Mathf.Abs(xCoord - finalTreasureCoords[0]) > 1 && Mathf.Abs(yCoord - finalTreasureCoords[1]) > 1) { for (byte index = 0; index < 4; index++) { // If the room hasSomething (water), and has a wall that is closed... // then there is space to place a port town: if (!simpleRoom.getWallIsOpen(index)) { return(true); } } } return(false); }