Browse Source

Method made static and moved to manager.

hull4
MagicBot 1 year ago
parent
commit
19d43cbcb0
  1. 29
      src/engine/gameManager/BuildingManager.java
  2. 32
      src/engine/objects/Building.java

29
src/engine/gameManager/BuildingManager.java

@ -28,6 +28,8 @@ import engine.objects.*;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger; import org.pmw.tinylog.Logger;
import java.awt.geom.Area;
import java.awt.geom.Path2D;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.ArrayList; import java.util.ArrayList;
@ -962,4 +964,31 @@ public enum BuildingManager {
return null; return null;
} }
public static void bakeNavMesh(Building building) {
// Build up navmesh by stencil of the
// prop's convex hull
ArrayList<ArrayList<Vector2f>> convexHullList;
convexHullList = _hull_data.get(building.meshUUID);
for (ArrayList<Vector2f> meshEntry : convexHullList) {
Path2D.Float stencil = new Path2D.Float();
for (Vector2f vertex : meshEntry)
stencil.moveTo(vertex.x, vertex.y);
// enclose polygon
stencil.moveTo(meshEntry.get(0).x, meshEntry.get(0).y);
Area stencilArea = new Area(stencil);
building.parentZone.navMesh.subtract(stencilArea);
}
//add in all the regions to the navMesh
for (Regions region : building.getBounds().getRegions())
building.parentZone.navMesh.add(region.getArea());
}
} }

32
src/engine/objects/Building.java

@ -25,7 +25,6 @@ import engine.job.JobScheduler;
import engine.jobs.DoorCloseJob; import engine.jobs.DoorCloseJob;
import engine.jobs.SiegeSpireWithdrawlJob; import engine.jobs.SiegeSpireWithdrawlJob;
import engine.math.Bounds; import engine.math.Bounds;
import engine.math.Vector2f;
import engine.math.Vector3f; import engine.math.Vector3f;
import engine.math.Vector3fImmutable; import engine.math.Vector3fImmutable;
import engine.net.ByteBufferWriter; import engine.net.ByteBufferWriter;
@ -35,8 +34,6 @@ import engine.net.client.msg.UpdateObjectMsg;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger; import org.pmw.tinylog.Logger;
import java.awt.geom.Area;
import java.awt.geom.Path2D;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -1007,7 +1004,7 @@ public class Building extends AbstractWorldObject {
if (this.upgradeDateTime != null) if (this.upgradeDateTime != null)
BuildingManager.submitUpgradeJob(this); BuildingManager.submitUpgradeJob(this);
this.updateNavMesh(); // update the navmesh of the parent zone BuildingManager.bakeNavMesh(this); // update the navmesh of the parent zone
} }
public synchronized boolean setOwner(AbstractCharacter newOwner) { public synchronized boolean setOwner(AbstractCharacter newOwner) {
@ -1536,31 +1533,4 @@ public class Building extends AbstractWorldObject {
} }
public void updateNavMesh() {
// Build up navmesh by stencil of the
// prop's convex hull
ArrayList<ArrayList<Vector2f>> convexHullList;
convexHullList = BuildingManager._hull_data.get(this.meshUUID);
for (ArrayList<Vector2f> meshEntry : convexHullList) {
Path2D.Float stencil = new Path2D.Float();
for (Vector2f vertex : meshEntry)
stencil.moveTo(vertex.x, vertex.y);
// enclose polygon
stencil.moveTo(meshEntry.get(0).x, meshEntry.get(0).y);
Area stencilArea = new Area(stencil);
this.parentZone.navMesh.subtract(stencilArea);
}
//add in all the regions to the navMesh
for (Regions region : this.getBounds().getRegions())
this.parentZone.navMesh.add(region.getArea());
}
} }

Loading…
Cancel
Save