diff --git a/src/engine/gameManager/BuildingManager.java b/src/engine/gameManager/BuildingManager.java index ef477355..c842506c 100644 --- a/src/engine/gameManager/BuildingManager.java +++ b/src/engine/gameManager/BuildingManager.java @@ -984,39 +984,48 @@ public enum BuildingManager { return; } - for (ArrayList meshEntry : convexHullList) { + Area footprint = new Area(new Rectangle((int) building.loc.x, (int) building.loc.z, (int) (building.getBounds().getHalfExtents().x * 2), (int) (building.getBounds().getHalfExtents().y * 2))); + building.parentZone.navMesh.subtract(footprint); - Path2D.Float stencilPath = new Path2D.Float(); + for (ArrayList meshEntry : convexHullList) { + Polygon poly = new Polygon(); + for(Vector2f vect : meshEntry){ + Vector3fImmutable rotationPoint = Vector3fImmutable.rotateAroundPoint(new Vector3fImmutable(vect.x + building.loc.x,0,vect.y + building.loc.z),building.loc,building.getRot().getRotation()); + poly.addPoint((int) rotationPoint.x, (int) rotationPoint.z); + } + footprint.subtract(new Area(poly)); + //Path2D.Float stencilPath = new Path2D.Float(); // Add building offset and rotation to vertices - for (Vector2f vertex : meshEntry) { - vertex.addLocal(building.getLoc().x, building.getLoc().z); - Vector3fImmutable rotatedPoint = new Vector3fImmutable(vertex.x, 0, vertex.y); - rotatedPoint = Vector3fImmutable.rotateAroundPoint(building.getLoc(), rotatedPoint, building.getBounds().getQuaternion().angleY); - vertex.set(rotatedPoint.x, rotatedPoint.z); - } + //for (Vector2f vertex : meshEntry) { + // vertex.addLocal(building.getLoc().x, building.getLoc().z); + // Vector3fImmutable rotatedPoint = new Vector3fImmutable(vertex.x, 0, vertex.y); + // rotatedPoint = Vector3fImmutable.rotateAroundPoint(building.getLoc(), rotatedPoint, building.getBounds().getQuaternion().angleY); + // vertex.set(rotatedPoint.x, rotatedPoint.z); + //} // Move to start of path - stencilPath.moveTo(meshEntry.get(0).x, meshEntry.get(0).y); + //stencilPath.moveTo(meshEntry.get(0).x, meshEntry.get(0).y); // Draw path - for (int i = 1; i < meshEntry.size(); i++) - stencilPath.lineTo(meshEntry.get(i).x, meshEntry.get(i).y); + //for (int i = 1; i < meshEntry.size(); i++) + // stencilPath.lineTo(meshEntry.get(i).x, meshEntry.get(i).y); // enclose the path - stencilPath.closePath(); + //stencilPath.closePath(); // subtract stencil from zone navmesh - Area stencilArea = new Area(stencilPath); - AffineTransform at = new AffineTransform(); - at.createTransformedShape(new Polygon()); - building.parentZone.navMesh.subtract(stencilArea.createTransformedArea(at)); + //Area stencilArea = new Area(stencilPath); + //AffineTransform at = new AffineTransform(); + //at.createTransformedShape(new Polygon()); + //building.parentZone.navMesh.subtract(stencilArea.createTransformedArea(at)); } + building.parentZone.navMesh.add(footprint); //add in all the regions to the navMesh