added COllisionManager

This commit is contained in:
2024-01-05 19:21:24 -06:00
parent 7c28efb47c
commit c25fdf3823
4 changed files with 36 additions and 28 deletions
@@ -9,15 +9,11 @@
package engine.net.client.handlers;
import engine.Enum;
import engine.InterestManagement.WorldGrid;
import engine.collision.Mesh;
import engine.collision.Triangle;
import engine.exception.MsgSendException;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.CollisionManager;
import engine.gameManager.MovementManager;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg;
@@ -25,7 +21,6 @@ import engine.net.client.msg.MoveToPointMsg;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.awt.*;
import java.awt.geom.Line2D;
import java.util.HashSet;
@@ -49,29 +44,17 @@ public class MoveToPointHandler extends AbstractClientMsgHandler {
Vector3fImmutable endLoc = new Vector3fImmutable(msg.getEndLat(),msg.getEndAlt(),msg.getEndLon());
travelLine.setLine(pc.loc.x,pc.loc.z,endLoc.x,endLoc.z);
float movementDistance = 185 + pc.loc.distance(endLoc);
boolean collided = false;
HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(pc.loc, movementDistance, MBServerStatics.MASK_BUILDING);
for(AbstractWorldObject awo : awoList){
Building building = (Building)awo;
Rectangle.Float boundsRect = new Rectangle.Float();
float rectCenterX = building.loc.x + building.getBounds().getHalfExtents().x;
float rectCenterZ = building.loc.z + building.getBounds().getHalfExtents().y;
boundsRect.setRect(rectCenterX, rectCenterZ, 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,pc.getCharacterHeight()))
for (Triangle tri : mesh.triangles)
if (tri.collides(travelLine)){
ChatManager.chatSystemInfo(pc, "Collision Detected");
MovementManager.movement(msg, pc);
return true;
}
}
if(CollisionManager.CollisionDetected(building, travelLine,pc.getCharacterHeight())){
ChatManager.chatSystemInfo(pc, "Collision Detected");
//msg.setEndCoord();
MovementManager.movement(msg, pc);
return true;
}
}
ChatManager.chatSystemInfo(pc, "No Collision Detected");
ChatManager.chatSystemInfo(pc, "No Collision Detected");
MovementManager.movement(msg, pc);
return true;
}