From 306c64d236098b2c933c7c61adcfed182ad7338a Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Sat, 13 Jan 2024 21:27:26 -0600 Subject: [PATCH] Triangle check --- src/engine/CollisionEngine/CollisionManager.java | 6 +++--- src/engine/CollisionEngine/Mesh.java | 14 +++++++------- src/engine/db/handlers/dbBuildingHandler.java | 10 +++++----- src/engine/devcmd/cmds/InfoCmd.java | 2 +- src/engine/devcmd/cmds/RegionCmd.java | 11 ----------- src/engine/gameManager/BuildingManager.java | 7 ++++--- src/engine/objects/Building.java | 3 ++- 7 files changed, 22 insertions(+), 31 deletions(-) diff --git a/src/engine/CollisionEngine/CollisionManager.java b/src/engine/CollisionEngine/CollisionManager.java index 6e1733c0..0a711142 100644 --- a/src/engine/CollisionEngine/CollisionManager.java +++ b/src/engine/CollisionEngine/CollisionManager.java @@ -11,11 +11,11 @@ public class CollisionManager { Rectangle.Float boundsRect = new Rectangle.Float(); Vector3f topLeft = new Vector3f(building.loc.x - building.getBounds().getHalfExtents().x,building.loc.y,building.loc.z - building.getBounds().getHalfExtents().y); - boundsRect.setRect(topLeft.x, topLeft.z, building.getBounds().getHalfExtents().x * 2,building.getBounds().getHalfExtents().y * 2); + boundsRect.setRect(topLeft.x, topLeft.z, building.getBounds().getHalfExtents().x * 2,building.getBounds().getHalfExtents().y * 2); if(travelLine.intersects(boundsRect)){ //collided with building - for(Mesh mesh : building.buildingMeshes) { - if (mesh.MeshCollides(travelLine,charHeight, charY)) { + for(Triangle tri : building.buildingTriangles) { + if (tri.collides(travelLine)) { //ChatManager.chatSystemInfo(pc, "Collision Detected"); //MovementManager.movement(msg, pc); return true; diff --git a/src/engine/CollisionEngine/Mesh.java b/src/engine/CollisionEngine/Mesh.java index 0870bfb8..96c99604 100644 --- a/src/engine/CollisionEngine/Mesh.java +++ b/src/engine/CollisionEngine/Mesh.java @@ -23,15 +23,15 @@ public class Mesh { public boolean MeshCollides(Line2D line, float charHeight, float charY){ //check if movement path intersects this mesh - if(!this.BoundsCollides(line)) - return false; + //if(!this.BoundsCollides(line)) + // return false; - boolean feetcollides = (charY + charHeight) < this.minY; - boolean headcollides = charY > this.maxY; + //boolean feetcollides = (charY + charHeight) < this.minY; + //boolean headcollides = charY > this.maxY; //check to see if the mesh collides between the characters feet and head locations - if(feetcollides && headcollides){ - return false; - } + //if(feetcollides && headcollides){ + // return false; + //} //check if any triangles intersect the movement path for(Triangle tri : triangles) diff --git a/src/engine/db/handlers/dbBuildingHandler.java b/src/engine/db/handlers/dbBuildingHandler.java index 9b61d71b..2bcc146f 100644 --- a/src/engine/db/handlers/dbBuildingHandler.java +++ b/src/engine/db/handlers/dbBuildingHandler.java @@ -896,18 +896,18 @@ public class dbBuildingHandler extends dbHandlerBase { triPoints.add(new Vector3f(floatPoints.get(i),floatPoints.get(i+1),floatPoints.get(i+2))); } - if(BuildingManager.mesh_triangle_points.containsKey(rs.getInt("meshID")) == false){ + if(BuildingManager.mesh_triangle_points.containsKey(rs.getInt("propId")) == false){ ArrayList> newPoints = new ArrayList<>(); newPoints.add(triPoints); - BuildingManager.mesh_triangle_points.put(rs.getInt("meshID"),newPoints); + BuildingManager.mesh_triangle_points.put(rs.getInt("propId"),newPoints); } else { - BuildingManager.mesh_triangle_points.get(rs.getInt("meshID")).add(triPoints); + BuildingManager.mesh_triangle_points.get(rs.getInt("propId")).add(triPoints); } - if(BuildingManager.mesh_heights.containsKey(rs.getInt("meshID")) == false){ + if(BuildingManager.mesh_heights.containsKey(rs.getInt("propId")) == false){ Vector2f heights = new Vector2f(rs.getFloat("maxY"),rs.getFloat("minY")); - BuildingManager.mesh_heights.put(rs.getInt("meshID"),heights); + BuildingManager.mesh_heights.put(rs.getInt("propId"),heights); } } diff --git a/src/engine/devcmd/cmds/InfoCmd.java b/src/engine/devcmd/cmds/InfoCmd.java index 313c21ce..04ed3f4e 100644 --- a/src/engine/devcmd/cmds/InfoCmd.java +++ b/src/engine/devcmd/cmds/InfoCmd.java @@ -244,7 +244,7 @@ public class InfoCmd extends AbstractDevCmd { for (Regions regions : targetBuilding.getBounds().getRegions()) { //TODO ADD REGION INFO } - output += "Mesh Count: " + targetBuilding.buildingMeshes.size(); + output += "Triangle Count: " + targetBuilding.buildingTriangles.size(); break; case PlayerCharacter: output += newline; diff --git a/src/engine/devcmd/cmds/RegionCmd.java b/src/engine/devcmd/cmds/RegionCmd.java index a3d284f5..d5576d4a 100644 --- a/src/engine/devcmd/cmds/RegionCmd.java +++ b/src/engine/devcmd/cmds/RegionCmd.java @@ -47,17 +47,6 @@ public class RegionCmd extends AbstractDevCmd { output += "is Outside: " + region.isOutside(); this.throwbackInfo(pc, output); } - if(building != null){ - for(Mesh mesh : building.buildingMeshes){ - if(mesh.boundsRect.contains(new Point2D.Float(((AbstractCharacter) target).loc.x,((AbstractCharacter) target).loc.z))){ - if(((AbstractCharacter) target).loc.y < mesh.maxY) { - this.throwbackInfo(pc, "Inside Mesh Bounds"); - return; - } - } - } - this.throwbackInfo(pc, "Outside Mesh Bounds"); - } } @Override diff --git a/src/engine/gameManager/BuildingManager.java b/src/engine/gameManager/BuildingManager.java index af749ba8..5823c96c 100644 --- a/src/engine/gameManager/BuildingManager.java +++ b/src/engine/gameManager/BuildingManager.java @@ -982,7 +982,7 @@ public enum BuildingManager { if (building == null) return; - building.buildingMeshes = new ArrayList<>(); + building.buildingTriangles = new ArrayList<>(); float rotation = building.getRot().getRotation(); Vector3f buildingLoc = new Vector3f(building.loc.x, building.loc.y, building.loc.z); if (!prop_meshes.containsKey(building.meshUUID)) @@ -1040,9 +1040,10 @@ public enum BuildingManager { tri.sides.add(new Line2D.Float(p1, p2)); tri.sides.add(new Line2D.Float(p2, p3)); tri.sides.add(new Line2D.Float(p3, p1)); - generatedMesh.triangles.add(tri); + //generatedMesh.triangles.add(tri); + building.buildingTriangles.add(tri); } - building.buildingMeshes.add(generatedMesh); + //building.buildingTriangles.add(generatedMesh); } } catch(Exception e){ diff --git a/src/engine/objects/Building.java b/src/engine/objects/Building.java index 9b2fc9db..bec63817 100644 --- a/src/engine/objects/Building.java +++ b/src/engine/objects/Building.java @@ -9,6 +9,7 @@ package engine.objects; +import engine.CollisionEngine.Triangle; import engine.Enum; import engine.Enum.*; import engine.InterestManagement.RealmMap; @@ -100,7 +101,7 @@ public class Building extends AbstractWorldObject { private ConcurrentHashMap condemned; private ArrayList children = null; - public ArrayList buildingMeshes; + public ArrayList buildingTriangles; /** * ResultSet Constructor