From 9d650720f5c5899f18f65f3699a48ad07adc5acf Mon Sep 17 00:00:00 2001 From: Chris Kearney <chris.kearney@urbanairship.com> Date: Mon, 25 Aug 2014 22:44:23 -0700 Subject: [PATCH] again --- .../comandante/creeper/Items/ItemSpawner.java | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java index 208a9896..76e08106 100644 --- a/src/main/java/com/comandante/creeper/Items/ItemSpawner.java +++ b/src/main/java/com/comandante/creeper/Items/ItemSpawner.java @@ -32,31 +32,49 @@ public class ItemSpawner extends CreeperEntity { @Override public void run() { incTicks(); - int numberCurrentlyInRoom = 0; if (noTicks >= itemSpawnRule.getSpawnIntervalTicks()) { - Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds(); - for (String i : itemIds) { - Item currentItem = gameManager.getEntityManager().getItemEntity(i); - ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId()); - if (currentItemType.equals(spawnItemType)) { - numberCurrentlyInRoom++; - } + if (itemSpawnRule.getRandomChance().isPresent()) { + processRandom(); + } else { + processNormal(); + } + } + } + + private void processRandom() { + int randomPercentage = itemSpawnRule.getRandomChance().get(); + int numberOfAttempts = itemSpawnRule.getMaxPerRoom() - countNumberInRoom(); + for (int i = 0; i < numberOfAttempts; i++) { + if (random.nextInt(100) < randomPercentage) { + createAndAddItem(); } - while (numberCurrentlyInRoom < itemSpawnRule.getMaxPerRoom()) { - if (itemSpawnRule.getRandomChance().isPresent()) { - if (random.nextInt(100) < itemSpawnRule.getRandomChance().get()) { - Item item = spawnItemType.create(); - gameManager.getEntityManager().addItem(item); - gameManager.placeItemInRoom(roomId, item.getItemId()); - numberCurrentlyInRoom++; - } - continue; - } - Item item = spawnItemType.create(); - gameManager.getEntityManager().addItem(item); - gameManager.placeItemInRoom(roomId, item.getItemId()); + } + } + + private void processNormal() { + int numberToCreate = itemSpawnRule.getMaxPerRoom() - countNumberInRoom(); + for (int i = 0; i < numberToCreate; i++) { + createAndAddItem(); + } + } + + private int countNumberInRoom() { + int numberCurrentlyInRoom = 0; + Set<String> itemIds = gameManager.getRoomManager().getRoom(roomId).getItemIds(); + for (String i : itemIds) { + Item currentItem = gameManager.getEntityManager().getItemEntity(i); + ItemType currentItemType = ItemType.itemTypeFromCode(currentItem.getItemTypeId()); + if (currentItemType.equals(spawnItemType)) { numberCurrentlyInRoom++; } } + return numberCurrentlyInRoom; } + + private void createAndAddItem() { + Item item = spawnItemType.create(); + gameManager.getEntityManager().addItem(item); + gameManager.placeItemInRoom(roomId, item.getItemId()); + } + } -- GitLab