From 678b56c2dd875f05b34836e867bd7efdd821900d Mon Sep 17 00:00:00 2001 From: Khalid Ali Date: Thu, 17 Sep 2020 23:20:39 -0400 Subject: [PATCH] Add RadioactiveWorldUtils and refactor spacing in WorldUtils --- .../simon987/biomassplugin/WorldUtils.java | 16 ++-- .../RadioactiveWorldUtils.java | 77 +++++++++++++++++++ 2 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadioactiveWorldUtils.java diff --git a/Plugin Plant/src/main/java/net/simon987/biomassplugin/WorldUtils.java b/Plugin Plant/src/main/java/net/simon987/biomassplugin/WorldUtils.java index 61dda4b..36eb15c 100644 --- a/Plugin Plant/src/main/java/net/simon987/biomassplugin/WorldUtils.java +++ b/Plugin Plant/src/main/java/net/simon987/biomassplugin/WorldUtils.java @@ -20,8 +20,9 @@ public class WorldUtils { int blobCount = random.nextInt(maxCount - minCount) + minCount; ArrayList biomassBlobs = new ArrayList<>(blobCount); - //Count number of plain tiles. If there is less plain tiles than desired amount of blobs, - //set the desired amount of blobs to the plain tile count + // Count number of plain tiles. If there is less plain tiles than desired amount + // of blobs, + // set the desired amount of blobs to the plain tile count TileMap m = world.getTileMap(); int plainCount = 0; for (int y = 0; y < world.getWorldSize(); y++) { @@ -37,16 +38,15 @@ public class WorldUtils { blobCount = plainCount; } - outerLoop: - for (int i = 0; i < blobCount; i++) { + outerLoop: for (int i = 0; i < blobCount; i++) { Point p = m.getRandomTile(TilePlain.ID); if (p != null) { - //Don't block worlds + // Don't block worlds int counter = 0; - while (p.x == 0 || p.y == 0 || p.x == world.getWorldSize() - 1 || p.y == world.getWorldSize() - 1 || - world.getGameObjectsAt(p.x, p.y).size() != 0) { + while (p.x == 0 || p.y == 0 || p.x == world.getWorldSize() - 1 || p.y == world.getWorldSize() - 1 + || world.getGameObjectsAt(p.x, p.y).size() != 0) { p = m.getRandomTile(TilePlain.ID); counter++; @@ -57,7 +57,7 @@ public class WorldUtils { for (BiomassBlob biomassBlob : biomassBlobs) { if (biomassBlob.getX() == p.x && biomassBlob.getY() == p.y) { - //There is already a blob here + // There is already a blob here continue outerLoop; } } diff --git a/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadioactiveWorldUtils.java b/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadioactiveWorldUtils.java new file mode 100644 index 0000000..a3107bf --- /dev/null +++ b/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadioactiveWorldUtils.java @@ -0,0 +1,77 @@ +package net.simon987.pluginradioactivecloud; + +import net.simon987.server.game.world.TileMap; +import net.simon987.server.game.world.TilePlain; +import net.simon987.server.game.world.World; +import org.bson.types.ObjectId; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Random; + +public class RadioactiveWorldUtils { + + /** + * Generate a list of biomass blobs for a world + */ + public static ArrayList generateRadioactiveObstacles(World world, int minCount, int maxCount) { + + Random random = new Random(); + int radioactiveObjCount = random.nextInt(maxCount - minCount) + minCount; + ArrayList radioactiveObstacles = new ArrayList<>(radioactiveObjCount); + + // Count number of plain tiles. If there is less plain tiles than desired amount + // of radioactive objects, set the desired amount of radioactive objects to the + // plain tile count + TileMap m = world.getTileMap(); + int plainCount = 0; + for (int y = 0; y < world.getWorldSize(); y++) { + for (int x = 0; x < world.getWorldSize(); x++) { + + if (m.getTileIdAt(x, y) == TilePlain.ID) { + plainCount++; + } + } + } + + if (radioactiveObjCount > plainCount) { + radioactiveObjCount = plainCount; + } + + outerLoop: for (int i = 0; i < radioactiveObjCount; i++) { + + Point p = m.getRandomTile(TilePlain.ID); + if (p != null) { + + // Don't block worlds + int counter = 0; + while (p.x == 0 || p.y == 0 || p.x == world.getWorldSize() - 1 || p.y == world.getWorldSize() - 1 + || world.getGameObjectsAt(p.x, p.y).size() != 0) { + p = m.getRandomTile(TilePlain.ID); + counter++; + + if (counter > 25) { + continue outerLoop; + } + } + + for (RadioactiveObstacle radioactiveObstacle : radioactiveObstacles) { + if (radioactiveObstacle.getX() == p.x && radioactiveObstacle.getY() == p.y) { + // There is already a blob here + continue outerLoop; + } + } + + RadioactiveObstacle radioactiveObstacle = new RadioactiveObstacle(); + radioactiveObstacle.setObjectId(new ObjectId()); + radioactiveObstacle.setX(p.x); + radioactiveObstacle.setY(p.y); + radioactiveObstacle.setWorld(world); + + radioactiveObstacles.add(radioactiveObstacle); + } + } + + return radioactiveObstacles; + } +}