Fix MemoryBoard#hasFactionWithin implementation

It was previously only checking for factions diagonally within the
designated radius
This commit is contained in:
eueln 2015-02-20 17:08:29 -06:00
parent 2b4e1a1947
commit 1daf79c6c3

View File

@ -113,30 +113,23 @@ public abstract class MemoryBoard extends Board {
* @return true if another Faction is within the radius, otherwise false. * @return true if another Faction is within the radius, otherwise false.
*/ */
public boolean hasFactionWithin(FLocation flocation, Faction faction, int radius) { public boolean hasFactionWithin(FLocation flocation, Faction faction, int radius) {
for(int i = 1; i <= radius; i++) { for (int x = -radius; x <= radius; x++) {
FLocation a = flocation.getRelative(i, 0); for (int z = -radius; z <= radius; z++) {
FLocation b = flocation.getRelative(-i, 0); if (x == 0 && z == 0) {
FLocation c = flocation.getRelative(0, i); continue;
FLocation d = flocation.getRelative(0, -i); }
if(isDifferentFaction(a, faction) || isDifferentFaction(b, faction) || isDifferentFaction(c, faction) || isDifferentFaction(d, faction)) {
return false; // Return if the Faction found is a different one. FLocation relative = flocation.getRelative(x, z);
Faction other = getFactionAt(relative);
if (other.isNormal() && other != faction) {
return true;
}
} }
} }
return false; return false;
} }
/**
* Checks if the faction at the flocation is not wilderness and different than given faction.
* @param flocation - location to check.
* @param faction - faction to compare.
* @return true if not wilderness, safezone, or warzone and different faction, otherwise false.
*/
private boolean isDifferentFaction(FLocation flocation, Faction faction) {
Faction other = getFactionAt(flocation);
// Check if faction is
return other.isNormal() && other != faction;
}
//----------------------------------------------// //----------------------------------------------//
// Cleaner. Remove orphaned foreign keys // Cleaner. Remove orphaned foreign keys