package com.weem.epicinventor.actor; import com.weem.epicinventor.*; import com.weem.epicinventor.ai.*; import com.weem.epicinventor.inventory.*; import com.weem.epicinventor.actor.monster.*; import com.weem.epicinventor.actor.oobaboo.*; import com.weem.epicinventor.network.*; import com.weem.epicinventor.placeable.*; import com.weem.epicinventor.projectile.*; import com.weem.epicinventor.resource.*; import com.weem.epicinventor.utility.*; import java.awt.*; import java.awt.geom.Arc2D; import java.util.*; import java.util.ArrayList; public class PlayerManager extends Manager { private HashMap<String, Player> players; boolean isUpdating = false; private Player currentPlayer; private boolean currentPlayerSet = false; public PlayerManager(GameController gc, Registry rg) { super(gc, rg); players = new HashMap<String, Player>(); Player p; p = new Player(this, registry, "Player/Standing", 226); players.put(p.getId(), p); setCurrentPlayer(p); } public void clearPlayers() { players = null; currentPlayer = null; players = new HashMap<String, Player>(); } public void giveXP(Monster m) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { Player player = null; try { for (String key : players.keySet()) { player = (Player) players.get(key); player.addXP(m.getXPByPlayer(player)); } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } } public void showOobabooHUD() { gameController.showOobabooHUD(); } public void registerPlayer(Player p) { if (!players.containsKey(p.getId())) { players.put(p.getId(), p); if (players.size() == 1) { setCurrentPlayer(p); } if (p != null) { if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { registry.getNetworkThread().sendData(p); } } } } } public void setCurrentPlayer(Player p) { currentPlayer = p; currentPlayerSet = true; } public boolean getCurrentPlayerSet() { return currentPlayerSet; } public void removePlayer(String playerId) { if (players.containsKey(playerId)) { Player p = players.get(playerId); if (p != null) { if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(p.getId()); up.name = p.getName(); up.action = "Remove"; registry.getNetworkThread().sendData(up); } } } players.remove(playerId); } } public Player getCurrentPlayer() { return currentPlayer; } public HashMap<String, Player> getPlayers() { return players; } public void stopActions() { gameController.stopActions(currentPlayer); } public void stopActions(Player p) { gameController.stopActions(p); } public Inventory getRobotInventory() { return currentPlayer.getRobotInventory(); } public int getRobotInventorySize() { return currentPlayer.getRobotInventorySize(); } public Player getPlayerById(String id) { if (players.containsKey(id)) { Player player = players.get(id); return player; } else { return null; } } public Player getClosestPlayer(Point p, int maxDistance) { Player player = null; Player closestPlayer = null; double closestDistance = 0; try { for (String key : players.keySet()) { player = (Player) players.get(key); if (p.distance(player.getCenterPoint()) < closestDistance || closestDistance == 0) { closestPlayer = player; closestDistance = p.distance(player.getCenterPoint()); } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } if (closestPlayer != null && closestDistance <= maxDistance) { return closestPlayer; } return null; } public boolean isInPlayerView(Point p) { Player player = null; if (p != null) { try { for (String key : players.keySet()) { player = (Player) players.get(key); if (p.x >= gameController.getMapOffsetX() && p.x <= gameController.getMapOffsetX() + gameController.getPWidth() && p.y >= gameController.getMapOffsetY() && p.y <= gameController.getMapOffsetY() + gameController.getPHeight()) { return true; } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } return false; } public void playerMoveLeft() { playerMoveLeft(currentPlayer); } public void playerMoveLeft(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.moveLeft(); } } public void playerMoveRight() { playerMoveRight(currentPlayer); } public void playerMoveRight(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.moveRight(); } } public void playerStopMove() { playerStopMove(currentPlayer); } public void playerStopMove(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.stopMove(); } } public void playerShowRect(Boolean r) { currentPlayer.setShowRect(r); } public void playerStartGather(String rt) { playerStartGather(currentPlayer, rt); } public void playerStartGather(Player p, String rt) { p.startGather(rt); } public boolean playerGoInsideRobot() { boolean ret = currentPlayer.setInsideRobot(true); return ret; } public boolean isPlayerInsideRobot() { return isPlayerInsideRobot(currentPlayer); } public boolean isPlayerInsideRobot(Player p) { return p.getInsideRobot(); } public void playerGetOutOfRobot() { currentPlayer.setInsideRobot(false); } public boolean playerToggleInsideRobot() { return playerToggleInsideRobot(currentPlayer); } public boolean playerToggleInsideRobot(Player p) { boolean ret; if (p.getInsideRobot()) { ret = p.setInsideRobot(false); } else { ret = p.setInsideRobot(true); } return ret; } public void playerEquipHead(String armorName, int level) { currentPlayer.setArmorTypeHead(armorName, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerEquipChest(String armorName, int level) { currentPlayer.setArmorTypeChest(armorName, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerEquipLegs(String armorName, int level) { currentPlayer.setArmorTypeLegs(armorName, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerEquipFeet(String armorName, int level) { currentPlayer.setArmorTypeFeet(armorName, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void handleClick(Point clickPoint) { currentPlayer.handleClick(clickPoint); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "HandleClick"; up.dataPoint = clickPoint; registry.getNetworkThread().sendData(up); } } } public void handleRightClick() { currentPlayer.handleRightClick(); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "HandleRightClick"; registry.getNetworkThread().sendData(up); } } } public void handleReleased(Point clickPoint) { currentPlayer.handleReleased(clickPoint); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "HandleReleased"; up.dataPoint = clickPoint; registry.getNetworkThread().sendData(up); } } } public ArrayList<String> attackDamageAndKnockBack(Actor source, Arc2D.Double arc, Point mapPoint, int damage, int knockBackX, int knockBackY, int maxHits, String weaponType) { return gameController.attackDamageAndKnockBack(source, arc, mapPoint, damage, knockBackX, knockBackY, maxHits, 0, weaponType); } public void playerRender(Graphics g, int x, int y, boolean imageOverride) { currentPlayer.renderPlayer(g, x, y, imageOverride); } @Override public int playerAddItem(String name, int qty) { int ret = playerAddItem(0, name, qty); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return ret; } public int playerAddItem(Player p, String name, int qty) { int ret = playerAddItem(p, 0, name, qty); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(p.getId()); up.name = p.getName(); up.inventory = p.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return ret; } public int playerAddItem(int slot, String name, int qty) { int ret = currentPlayer.playerAddItem(slot, name, qty); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } registry.getHUDManager().updateMasterHUD(); return ret; } public int playerAddItem(Player p, int slot, String name, int qty) { int ret = p.playerAddItem(slot, name, qty); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(p.getId()); up.name = p.getName(); up.inventory = p.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return ret; } public int playerAddItem(int slot, String name, int qty, int level) { int ret = currentPlayer.playerAddItem(slot, name, qty, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } registry.getHUDManager().updateMasterHUD(); return ret; } public int playerAddItem(Player p, int slot, String name, int qty, int level) { int ret = p.playerAddItem(slot, name, qty, level); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(p.getId()); up.name = p.getName(); up.inventory = p.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return ret; } @Override public boolean checkPlayerProjectileHit(Projectile p) { if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT) { try { for (String key : players.keySet()) { Player player = (Player) players.get(key); if (player != null) { if (player.getRobot().getIsActivated() && player.getRobot().getPerimeter().contains(p.getCenterPoint())) { player.getRobot().applyDamage(p.getDamage(), p.getSource()); return true; } if (player.getPerimeter().contains(p.getCenterPoint())) { player.applyDamage(p.getDamage(), p.getSource()); if (p.getName().equals("Goo")) { player.slow(2); } else if (p.getName().equals("Web")) { player.slow(3); } return true; } } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } return false; } @Override public String playerGetInventoryItemCategory(int slot) { return currentPlayer.playerGetInventoryItemCategory(slot); } @Override public String playerGetInventoryItemName(int slot) { return currentPlayer.playerGetInventoryItemName(slot); } @Override public int playerGetInventoryQty(int slot) { return currentPlayer.playerGetInventoryQty(slot); } @Override public int playerGetInventoryLevel(int slot) { return currentPlayer.playerGetInventoryLevel(slot); } public Inventory getPlayerInventory() { return currentPlayer.getInventory(); } public void playerDeleteInventory(int slot, int qty) { gameController.playerDeleteInventory(slot, qty, false); } public void playerDeleteInventory(int slot, int qty, boolean giveXP) { currentPlayer.playerDeleteInventory(slot, qty, giveXP); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void setPlayerSlotQuantity(int slot, int qty) { currentPlayer.setPlayerSlotQuantity(slot, qty); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void setPlayerSelectedItem(int i) { currentPlayer.setPlayerSelectedItem(i); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "SetSelectedItem"; up.dataInt = i; registry.getNetworkThread().sendData(up); } } } public void setPlayerNames(String characterName, String robotName) { currentPlayer.setName(characterName); currentPlayer.setRobotName(robotName); } public void setUpdating(boolean u) { isUpdating = u; } public void initPlayers() { try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { p.init(); } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } public void playerSwapInventory(int from, int to) { currentPlayer.playerSwapInventory(from, to); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerStopLoopingSound() { currentPlayer.playerStopLoopingSound(); } public void playerEquipFromInventory(int slot) { currentPlayer.playerEquipFromInventory(slot); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "Equip"; up.dataInt = slot; registry.getNetworkThread().sendData(up); } } if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerDied(Rectangle area) { gameController.playerDied(area); } public void playerUnEquipToInventory(String equipmentType, int to) { currentPlayer.playerUnEquipToInventory(equipmentType, to); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "UnEquip"; up.dataString = equipmentType; registry.getNetworkThread().sendData(up); } } if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerUnEquipToDelete(String equipmentType) { currentPlayer.playerUnEquipToDelete(equipmentType); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.action = "UnEquip"; up.dataString = equipmentType; registry.getNetworkThread().sendData(up); } } if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void playerCraftItem(String itemType) { currentPlayer.playerCraftItem(itemType); if (gameController.multiplayerMode != gameController.multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlayer up = new UpdatePlayer(currentPlayer.getId()); up.name = currentPlayer.getName(); up.inventory = currentPlayer.getInventory(); up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void robotSetMode(String m) { currentPlayer.robotSetMode(m); } public void robotToggleActivated() { robotToggleActivated(currentPlayer); } public void robotToggleActivated(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.robotToggleActivated(); } } public void robotToggleFollow() { currentPlayer.robotToggleFollow(); } public ArrayList<String> getItemTypeRequirements(String n) { return gameController.getItemTypeRequirements(n); } public void playerStopGather() { playerStopGather(currentPlayer); } public void playerStopGather(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.stopGather(); } } public void playerStopJump() { playerStopJump(currentPlayer); } public void playerStopJump(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.stopJump(); p.stopAscend(); } } public void playerJump() { playerJump(currentPlayer); } public void playerJump(Player p) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) { p.jump(); } } public boolean isPlayerPerformingAction() { return isPlayerPerformingAction(currentPlayer); } public boolean isPlayerPerformingAction(Player p) { return p.isPlayerPerformingAction(); } public boolean isPlayerMoving() { return isPlayerMoving(currentPlayer); } public boolean isPlayerMoving(Player p) { return p.isPlayerMoving(); } public Placeable loadPlaceable(String n, int x, int y) { return gameController.loadPlaceable(n, x, y); } public void cancelPlaceable(Player p) { gameController.cancelPlaceable(p); } @Override public boolean playerStandingOnTownBlocks() { boolean ret = true; boolean allNull = true; short[] standingBlocks = gameController.blocksUnder(currentPlayer.getMapX() + currentPlayer.getBaseOffset(), currentPlayer.getMapX() + currentPlayer.getWidth() - currentPlayer.getBaseOffset(), currentPlayer.getMapY()); for (int i = 0; i < standingBlocks.length; i++) { if (!gameController.isIdInGroup(standingBlocks[i], "None")) { allNull = false; } if (!(gameController.isIdInGroup(standingBlocks[i], "Town"))) { ret = false; } } if (allNull == true) { ret = false; } return ret; } public int[] getTownStartEndUnderPlayer() { return gameController.getTownStartEnd(currentPlayer.getCenterPoint().x, currentPlayer.getMapY()); } public Damage getMonsterTouchDamage(Rectangle r, int x) { return gameController.getMonsterTouchDamage(r, x); } public Point getCenterPoint() { return currentPlayer.getCenterPoint(); } @Override public void stunPlayersOnGround(long duration) { try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { if (p.getVertMoveMode() == Actor.VertMoveMode.NOT_JUMPING) { p.setStatusStun(true, duration); } } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } setCamera(); } public void setCamera() { if (currentPlayer != null) { if (currentPlayer.getCameraReturning()) { boolean xGood = false; if (currentPlayer.cameraMoveSize < 350) { if (currentPlayer.cameraMoveSize == 0) { currentPlayer.cameraMoveSize = 0.25; } currentPlayer.cameraMoveSize *= 1.05; } if (Math.abs(currentPlayer.cameraX - currentPlayer.mapX) > 200) { if (currentPlayer.cameraX > currentPlayer.mapX) { currentPlayer.cameraX -= currentPlayer.cameraMoveSize; } else { currentPlayer.cameraX += currentPlayer.cameraMoveSize; } } else { currentPlayer.cameraX = currentPlayer.mapX; xGood = true; } if (Math.abs(currentPlayer.cameraY - currentPlayer.mapY) > 200) { if (currentPlayer.cameraY > currentPlayer.mapY) { currentPlayer.cameraY -= currentPlayer.cameraMoveSize; } else { currentPlayer.cameraY += currentPlayer.cameraMoveSize; } } else { currentPlayer.cameraY = currentPlayer.mapY; if (xGood) { currentPlayer.setCameraReturning(false); } } centerCameraOnPoint(new Point((int) currentPlayer.cameraX, (int) currentPlayer.cameraY)); } else { centerCameraOnPoint(new Point(currentPlayer.mapX, currentPlayer.mapY)); } } } @Override public void update() { super.update(); try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { p.update(); } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } //need to run this after the "smoothing" code is ran, or perhaps queue up toe udp updates and only process 1 per local update? setCamera(); } @Override public void updateLong() { super.updateLong(); try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { p.updateLong(); } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } public void processRobotUpdateUDP(UDPRobot up) { try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { Robot r = p.getRobot(); if (r != null) { if (r.getId().equals(up.id)) { r.processUpdate(up); return; } } } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } public void assignOobaboo(Oobaboo o) { if (o != null) { Player p = this.getPlayerById(o.getPlayerID()); if (p != null) { p.setOobaboo(o); } } } public void processOobabooUpdateUDP(UDPOobaboo uo) { try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { Oobaboo o = p.getOobaboo(); if (o != null) { if (o.getId().equals(uo.id)) { o.processUpdate(uo); return; } } } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } public void processPlayerUpdateUDP(UDPPlayer up) { if (up != null) { if (players.containsKey(up.id)) { Player player = players.get(up.id); if (player != null) { player.processUpdate(up); } } } } public void processKeysUpdateUDP(UDPKeys uk) { if (uk != null) { if (players.containsKey(uk.id)) { Player player = players.get(uk.id); if (player != null) { if (player.keyState == null) { player.keyState = uk; } else { if (uk.keyLeftPressed != player.keyState.keyLeftPressed) { if (uk.keyLeftPressed) { stopActions(player); playerMoveLeft(player); } else { playerStopMove(player); } } if (uk.keyRightPressed != player.keyState.keyRightPressed) { if (uk.keyRightPressed) { stopActions(player); playerMoveRight(player); } else { playerStopMove(player); } } if (uk.keySpacePressed != player.keyState.keySpacePressed) { if (uk.keySpacePressed) { stopActions(player); playerJump(player); } else { playerStopJump(player); } } if (uk.keyGatherPressed != player.keyState.keyGatherPressed) { if (uk.keyGatherPressed) { stopActions(player); gameController.startGather(player); } else { stopActions(player); } } if (uk.keyRobotPressed != player.keyState.keyRobotPressed) { if (uk.keyRobotPressed) { robotToggleActivated(player); } } player.keyState = uk; } } } } } public void processPlayerUpdate(UpdatePlayer up) { if (up != null) { if (players.containsKey(up.id)) { Player player = players.get(up.id); if (player != null) { EIError.debugMsg("Setting " + up.name + " Action: " + up.action); if (up.action.equals("ApplyDamage")) { player.applyDamage(up.dataInt, up.actor); } else if (up.action.equals("AddXP")) { SoundClip cl = new SoundClip("Player/Good"); player.addXP(up.dataInt); } else if (up.action.equals("CollectedResource")) { Resource resource = getResourceById(up.dataString); registry.getResourceManager().resourceDoneCollecting(player, resource); } else if (up.action.equals("Equip")) { player.playerEquipFromInventory(up.dataInt); } else if (up.action.equals("HandleClick")) { player.handleClick(up.dataPoint); } else if (up.action.equals("HandleRightClick")) { player.handleRightClick(); } else if (up.action.equals("HandleReleased")) { player.handleReleased(up.dataPoint); } else if (up.action.equals("InventoryUpdate")) { Inventory i = up.inventory; i.setTransient(registry); Player p = this.getPlayerById(up.id); if (p == currentPlayer) { registry.setInventory(i); } player.setInventory(i); } else if (up.action.equals("ScrollQuickBar")) { player.scrollQuickBar(up.dataInt); } else if (up.action.equals("SetSelectedItem")) { player.setPlayerSelectedItem(up.dataInt); } else if (up.action.equals("Remove")) { removePlayer(player.id); } else if (up.action.equals("UnEquip")) { player.unEquip(up.dataString); } } } } } public void processRobotUpdate(UpdateRobot ur) { if (ur != null) { if (players.containsKey(ur.playerId)) { Player player = players.get(ur.playerId); if (player != null) { if (ur.previousGoal != null) { Goal g = ur.previousGoal; g.setTransient(registry, player.getRobot().ai); player.getRobot().ai.setPreviousGoal(g); } if (ur.currentGoal != null) { Goal g = ur.currentGoal; g.setTransient(registry, player.getRobot().ai); player.getRobot().ai.setCurrentGoal(g); } if (ur.action.equals("ApplyDamage")) { Actor a = ur.actor; if (a != null) { a.setTransient(registry, registry.getPlayerManager()); } player.getRobot().applyDamage(ur.dataInt, a); } } } } } public void processOobabooUpdate(UpdateOobaboo uo) { if (uo != null) { if (players.containsKey(uo.playerId)) { Player player = players.get(uo.playerId); if (player != null) { } } } } public void renderPointer(Graphics g, Player p) { int xPos = 0; int yPos = 0; if (p.getSpriteRect() != null) { if (!p.getSpriteRect().intersects(getPanelRect())) { //render arrow yPos = mapToPanelY(p.getMapY()); yPos = getPHeight() - yPos - 30; if (yPos < 10) { yPos = 10; } if (yPos > getPHeight() - 165) { yPos = getPHeight() - 165; } if (p.getMapX() < currentPlayer.getMapX()) { xPos = 3; g.drawImage(registry.getImageLoader().getImage("Misc/ArrowLeft"), xPos, yPos, null); } else { xPos = getPWidth() - 30 - 3; g.drawImage(registry.getImageLoader().getImage("Misc/ArrowRight"), xPos, yPos, null); } //render player name FontMetrics fm = g.getFontMetrics(); int messageWidth = fm.stringWidth(p.getName()); if (p.getMapX() < currentPlayer.getMapX()) { xPos = 33; } else { xPos = getPWidth() - 40 - 10 - messageWidth; } yPos += 18; Font textFont = new Font("SansSerif", Font.BOLD, 14); g.setFont(textFont); registry.ghettoOutline(g, Color.BLACK, p.getName(), xPos, yPos); g.setColor(Color.white); g.drawString(p.getName(), xPos, yPos); } } } public void renderPointer(Graphics g, Oobaboo o) { int xPos = 0; int yPos = 0; if (o.getSpriteRect() != null) { if (!o.getSpriteRect().intersects(getPanelRect())) { //render arrow yPos = mapToPanelY(o.getMapY()); yPos = getPHeight() - yPos - 30; if (yPos < 10) { yPos = 10; } if (yPos > getPHeight() - 165) { yPos = getPHeight() - 165; } if (o.getMapX() < currentPlayer.getMapX()) { xPos = 3; g.drawImage(registry.getImageLoader().getImage("Misc/ArrowLeft"), xPos, yPos, null); } else { xPos = getPWidth() - 30 - 3; g.drawImage(registry.getImageLoader().getImage("Misc/ArrowRight"), xPos, yPos, null); } //render player name FontMetrics fm = g.getFontMetrics(); int messageWidth = fm.stringWidth(o.getName()); if (o.getMapX() < currentPlayer.getMapX()) { xPos = 33; } else { xPos = getPWidth() - 40 - 10 - messageWidth; } yPos += 18; Font textFont = new Font("SansSerif", Font.BOLD, 14); g.setFont(textFont); registry.ghettoOutline(g, Color.BLACK, o.getName(), xPos, yPos); g.setColor(Color.white); g.drawString(o.getName(), xPos, yPos); } } } public void renderMiniMapPlayers(Graphics g, int mx, int my, int cx, int cy, int w, int h, int x, int y) { HashMap<String, Player> ps = new HashMap<String, Player>(players); Player player = null; int[] xy = null; try { for (String key : ps.keySet()) { player = (Player) ps.get(key); xy = registry.getBlockManager().getMiniMapPosition(mx, my, cx, cy, w, h, player.getMapX()/this.gameController.getBlockWidth(), player.getMapY()/this.gameController.getBlockHeight()); if((xy[0] > mx && xy[0] < mx+w) && (xy[1] > my+1 && xy[1] < my+h)) { renderMiniMapPlayer(g, xy[0], xy[1]); } } } catch (Exception e) { } } private void renderMiniMapPlayer(Graphics g, int x, int y) { g.setColor(Color.black); g.fillRect(x-2, y-7, 4, 6); g.setColor(Color.white); g.fillRect(x-1, y-6, 2, 4); } public void render(Graphics g) { try { for (String key : players.keySet()) { Player p = (Player) players.get(key); if (p != null) { p.render(g); if (p != currentPlayer) { renderPointer(g, p); } Oobaboo o = p.getOobaboo(); if (o != null) { renderPointer(g, o); } } } } catch (ConcurrentModificationException concEx) { //another thread was trying to modify players while iterating //we'll continue and the new item can be grabbed on the next update } } }