public Monster getClosestWithinMax(Point p, int r) { Monster monster = null; Monster closestMonster = null; double closestDistance = 0; try { for (String key : monsters.keySet()) { monster = (Monster) monsters.get(key); if (!monster.getName().equals("Pig") && !monster.getName().equals("BlueThorn") && !monster.getName().equals("VineThorn")) { if (monster.getIsInPanel()) { double distance = p.distance(monster.getCenterPoint()); if ((distance < closestDistance || closestDistance == 0) && distance <= r) { closestMonster = monster; closestDistance = distance; } } } } } catch (ConcurrentModificationException concEx) { // another thread was trying to modify monsters while iterating // we'll continue and the new item can be grabbed on the next update } return closestMonster; }
public Monster getMostAggroInPanel(Point p) { Monster monster = null; Monster mostAggroMonster = null; double mostAggro = 0; try { for (String key : monsters.keySet()) { monster = (Monster) monsters.get(key); if (!monster.getName().equals("Pig") && !monster.getName().equals("BlueThorn") && !monster.getName().equals("VineThorn")) { if (monster.getIsInPanel()) { double distance = p.distance(monster.getCenterPoint()); if (monster.getPlayerDamage() > mostAggro) { mostAggroMonster = monster; mostAggro = monster.getPlayerDamage(); } } } } } catch (ConcurrentModificationException concEx) { // another thread was trying to modify monsters while iterating // we'll continue and the new item can be grabbed on the next update } return mostAggroMonster; }
public void spawnNearPlaceable() { float prob, rand; Placeable placeable = registry.getPlaceableManager().getRandomPlacable(); if (placeable != null && !placeable.getType().equals("TownHall") && !placeable.getType().equals("Cabin") && !placeable.getType().equals("Chest")) { Point p = placeable.getCenterPoint(); HashMap<String, Player> players = registry.getPlayerManager().getPlayers(); Player player = null; boolean playerNear = false; for (String key : players.keySet()) { player = (Player) players.get(key); Point p2 = new Point(player.getMapX(), player.getMapY()); if (p.distance(p2) < mobSpawnRangeMin * 2) { playerNear = true; } } if (!playerNear) { for (MonsterType monsterType : MonsterType.values()) { if (monsterType.toString().equals("Porcupine") || monsterType.toString().equals("Snail") || monsterType.toString().equals("Snake") || monsterType.toString().equals("ZombieWalrus")) { rand = Rand.getFloat(); prob = getShouldSpawn(monsterType, 0); if (rand <= prob / 3.0f) { // System.out.println("spawn near placeable " + monsterType.name()); spawn(monsterType.name(), "Roaming", p.x, p.y); } } } } } }
private void spawnPlants() { if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT) { // Blue Thorns int blueThornCount = this.getCountByType("BlueThorn"); if (blueThornCount < 200) { for (int i = 0; i < 200 - blueThornCount; i++) { boolean canSpawn = true; int level = Rand.getRange(1, 3); Point vinePosition = new Point(); vinePosition.x = Rand.getRange(1, gameController.getMapWidth()); vinePosition.y = Rand.getRange( registry.getBlockManager().getLevelBottom(level), registry.getBlockManager().getLevelTop(level)); vinePosition.y = this.findNextFloor(vinePosition.x, vinePosition.y, 60); if (this.doesRectContainBlocks(vinePosition.x, vinePosition.y + 100, 17, 16)) { Monster monster = null; try { for (String key : monsters.keySet()) { monster = (Monster) monsters.get(key); if (monster.getName().equals("BlueThorn") || monster.getName().equals("VineThorn")) { double distance = vinePosition.distance(monster.getCenterPoint()); if (distance < 750) { canSpawn = false; break; } } } } catch (ConcurrentModificationException concEx) { // another thread was trying to modify monsters while iterating // we'll continue and the new item can be grabbed on the next update } if (canSpawn) { spawn("BlueThorn", "Roaming", vinePosition.x, vinePosition.y); } } } } // Vine Thorns int vineThornCount = this.getCountByType("VineThorn"); if (vineThornCount < 200) { for (int i = 0; i < 200 - vineThornCount; i++) { boolean canSpawn = true; int level = Rand.getRange(1, 3); Point vinePosition = new Point(); vinePosition.x = Rand.getRange(1, gameController.getMapWidth()); vinePosition.y = Rand.getRange( registry.getBlockManager().getLevelBottom(level), registry.getBlockManager().getLevelTop(level)); vinePosition.y = this.findNextFloor(vinePosition.x, vinePosition.y, 60); if (this.doesRectContainBlocks(vinePosition.x, vinePosition.y + 100, 17, 16)) { Monster monster = null; try { for (String key : monsters.keySet()) { monster = (Monster) monsters.get(key); if (monster.getName().equals("BlueThorn") || monster.getName().equals("VineThorn")) { double distance = vinePosition.distance(monster.getCenterPoint()); if (distance < 750) { canSpawn = false; break; } } } } catch (ConcurrentModificationException concEx) { // another thread was trying to modify monsters while iterating // we'll continue and the new item can be grabbed on the next update } if (canSpawn) { spawn("VineThorn", "Roaming", vinePosition.x, vinePosition.y); } } } } } }