Browse Source

region work

hull4
FatBoy-DOTC 1 year ago
parent
commit
12ee06e128
  1. 46
      src/engine/mobileAI/utilities/MovementUtilities.java

46
src/engine/mobileAI/utilities/MovementUtilities.java

@ -32,7 +32,7 @@ import static engine.math.FastMath.sqrt;
public class MovementUtilities { public class MovementUtilities {
private static final int cellGap = 1; private static final int cellGap = 1;
private static final int stepHeight = 1; private static final int stepHeight = 2;
public static boolean inRangeOfBindLocation(Mob agent) { public static boolean inRangeOfBindLocation(Mob agent) {
@ -298,49 +298,18 @@ public class MovementUtilities {
{ {
count++; count++;
Building building = BuildingManager.getBuildingAtLocation(point);
if(building != null){
float halfX = building.getBounds().getHalfExtents().x;
float halfY = building.getBounds().getHalfExtents().y;
ArrayList<Vector3fImmutable> corners = new ArrayList<>();
corners.add(building.loc.add(new Vector3fImmutable(halfX,0,-halfY)));
corners.add(building.loc.add(new Vector3fImmutable(halfX,0,halfY)));
corners.add(building.loc.subtract(new Vector3fImmutable(halfX,0,halfY)));
corners.add(building.loc.add(new Vector3fImmutable(-halfX,0,halfY)));
Vector3fImmutable cheapCorner = Vector3fImmutable.ZERO;
for(Vector3fImmutable corn : corners){
if(Bounds.collide(building.getBounds(),point,corn))
continue;
if(getCost(corn,start,goal) < getCost(cheapCorner,start,goal))
cheapCorner = corn;
}
if(!cheapCorner.equals(Vector3fImmutable.ZERO))
if (path.contains(cheapCorner)) {
continue;
}else {
path.add(cheapCorner);
current = cheapCorner;
continue;
}
if (path.contains(point)) if (path.contains(point))
continue; continue;
}
if (path.contains(point))
continue;
Regions region = Regions.getRegionAtLocation(goal);
if(region != null) {
path.add(new Vector3fImmutable(region.center)); //only use center points when travelling through regions
continue;
}
if (pointIsBlocked(point)) { if (pointIsBlocked(point)) {
obstructed = true; obstructed = true;
continue; continue;
} }
Regions region = Regions.getRegionAtLocation(point);
if(region != null)
point = new Vector3fImmutable(point.x,region.lerpY(point),point.z); // adjust the Y value of the point to the region height it is in
if (getCost(cheapest, current, goal) > getCost(point, current, goal)) if (getCost(cheapest, current, goal) > getCost(point, current, goal))
cheapest = point; cheapest = point;
@ -371,6 +340,11 @@ public class MovementUtilities {
if(building == null) if(building == null)
return false;//no building at this location means nothing obstructing the walking path return false;//no building at this location means nothing obstructing the walking path
Regions region = Regions.getRegionAtLocation(point);
if(region != null && Math.abs(region.lerpY(point) - point.y) < stepHeight) {
return false;
}
Zone currentZone = ZoneManager.findSmallestZone(point); Zone currentZone = ZoneManager.findSmallestZone(point);
if(currentZone == null) if(currentZone == null)
return false; return false;

Loading…
Cancel
Save