// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.powers; import engine.Enum; import engine.Enum.GameObjectType; import engine.math.Vector3fImmutable; import engine.objects.AbstractCharacter; import engine.objects.AbstractWorldObject; import engine.objects.PlayerCharacter; import java.util.HashSet; //This package creates a list of AbstractWorldObjects //sorted by range from a specified point. public class RangeBasedAwo implements Comparable { private float range; private AbstractWorldObject awo; public RangeBasedAwo(Float range, AbstractWorldObject awo) { super(); this.range = range; this.awo = awo; } public static HashSet createList(HashSet awolist, Vector3fImmutable searchLoc) { HashSet rbal = new HashSet<>(); for (AbstractWorldObject awo : awolist) { RangeBasedAwo rba = new RangeBasedAwo(searchLoc.distance(awo.getLoc()), awo); rbal.add(rba); } return rbal; } public static HashSet getSortedList(HashSet awolist, Vector3fImmutable searchLoc, int maxPlayers, int maxMobs) { int playerCnt = 0; int mobCnt = 0; int maxCnt = (maxPlayers > maxMobs) ? maxPlayers : maxMobs; HashSet rbal = RangeBasedAwo.createList(awolist, searchLoc); awolist = new HashSet<>(); for (RangeBasedAwo rba : rbal) { if (awolist.size() >= maxCnt) return awolist; AbstractWorldObject awo = rba.awo; if (awo.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) { if (playerCnt < maxPlayers) { awolist.add(awo); playerCnt++; } } else if (awo.getObjectType().equals(Enum.GameObjectType.Mob)) { if (mobCnt < maxMobs) { awolist.add(awo); mobCnt++; } } } return awolist; } public static HashSet getTrackList(HashSet awolist, PlayerCharacter pc, int max) { Vector3fImmutable searchLoc = pc.getLoc(); int cnt = 0; HashSet rbal = RangeBasedAwo.createList(awolist, searchLoc); HashSet aclist = new HashSet<>(); for (RangeBasedAwo rba : rbal) { if (aclist.size() >= max) return aclist; AbstractWorldObject awo = rba.awo; if (awo.getObjectType().equals(GameObjectType.PlayerCharacter)) if (((PlayerCharacter) awo).isCSR()) continue; if (AbstractWorldObject.IsAbstractCharacter(awo) && !(pc.equals(awo))) { aclist.add((AbstractCharacter) awo); cnt++; } } return aclist; } @Override public int compareTo(RangeBasedAwo obj) throws ClassCastException { return (int) (this.range - obj.range); } public float getRange() { return this.range; } public AbstractWorldObject getAwo() { return this.awo; } }