示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        // 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);
        }