Register players and npcs in their appropriate sectors.

This commit is contained in:
Major-
2014-02-15 15:14:27 +00:00
parent 5026ac0477
commit 1e5a354ea8
+18 -5
View File
@@ -126,7 +126,7 @@ public final class World {
/** /**
* This world's {@link SectorRepository}. * This world's {@link SectorRepository}.
*/ */
private final SectorRepository repository = new SectorRepository(false); private final SectorRepository sectorRepository = new SectorRepository(false);
/** /**
* The scheduler. * The scheduler.
@@ -278,7 +278,7 @@ public final class World {
boolean success = true; boolean success = true;
for (Entity entity : entities) { for (Entity entity : entities) {
Sector sector = repository.get(SectorCoordinates.fromPosition(entity.getPosition())); Sector sector = sectorRepository.get(SectorCoordinates.fromPosition(entity.getPosition()));
success &= sector.addEntity(entity); success &= sector.addEntity(entity);
} }
return success; return success;
@@ -302,6 +302,9 @@ public final class World {
if (success) { if (success) {
logger.info("Registered npc: " + npc + " [count=" + npcRepository.size() + "]"); logger.info("Registered npc: " + npc + " [count=" + npcRepository.size() + "]");
Sector sector = sectorRepository.get(SectorCoordinates.fromPosition(npc.getPosition()));
sector.addEntity(npc);
} else { } else {
logger.warning("Failed to register npc, repository capacity reached: [count=" + npcRepository.size() + "]"); logger.warning("Failed to register npc, repository capacity reached: [count=" + npcRepository.size() + "]");
} }
@@ -319,10 +322,13 @@ public final class World {
return RegistrationStatus.ALREADY_ONLINE; return RegistrationStatus.ALREADY_ONLINE;
} }
boolean success = playerRepository.add(player); boolean success = playerRepository.add(player)
& players.put(NameUtil.encodeBase37(player.getUsername().toLowerCase()), player) == null;
if (success) { if (success) {
players.put(NameUtil.encodeBase37(player.getUsername().toLowerCase()), player);
logger.info("Registered player: " + player + " [count=" + playerRepository.size() + "]"); logger.info("Registered player: " + player + " [count=" + playerRepository.size() + "]");
Sector sector = sectorRepository.get(SectorCoordinates.fromPosition(player.getPosition()));
sector.addEntity(player);
return RegistrationStatus.OK; return RegistrationStatus.OK;
} }
@@ -348,6 +354,9 @@ public final class World {
public void unregister(final Npc npc) { public void unregister(final Npc npc) {
if (npcRepository.remove(npc)) { if (npcRepository.remove(npc)) {
logger.info("Unregistered npc: " + npc + " [count=" + npcRepository.size() + "]"); logger.info("Unregistered npc: " + npc + " [count=" + npcRepository.size() + "]");
Sector sector = sectorRepository.get(SectorCoordinates.fromPosition(npc.getPosition()));
sector.removeEntity(npc);
} else { } else {
logger.warning("Could not find npc " + npc + " to unregister!"); logger.warning("Could not find npc " + npc + " to unregister!");
} }
@@ -359,8 +368,12 @@ public final class World {
* @param player The player. * @param player The player.
*/ */
public void unregister(final Player player) { public void unregister(final Player player) {
if (playerRepository.remove(player) & players.remove(NameUtil.encodeBase37(player.getUsername().toLowerCase())) == player) { if (playerRepository.remove(player)
& players.remove(NameUtil.encodeBase37(player.getUsername().toLowerCase())) == player) {
logger.info("Unregistered player: " + player + " [count=" + playerRepository.size() + "]"); logger.info("Unregistered player: " + player + " [count=" + playerRepository.size() + "]");
Sector sector = sectorRepository.get(SectorCoordinates.fromPosition(player.getPosition()));
sector.removeEntity(player);
logoutDispatcher.dispatch(player); logoutDispatcher.dispatch(player);
} else { } else {
logger.warning("Could not find player " + player + " to unregister!"); logger.warning("Could not find player " + player + " to unregister!");