Browse Source

load mesh data and structure meshes

server-collision
FatBoy-DOTC 10 months ago
parent
commit
9d8f800c2a
  1. 5
      src/engine/CollisionEngine/CollisionManager.java
  2. 7
      src/engine/devcmd/cmds/InfoCmd.java
  3. 4
      src/engine/devcmd/cmds/RegionCmd.java
  4. 6
      src/engine/gameManager/BuildingManager.java
  5. 22
      src/engine/net/client/handlers/MoveToPointHandler.java

5
src/engine/CollisionEngine/CollisionManager.java

@ -10,8 +10,9 @@ import java.awt.geom.Rectangle2D; @@ -10,8 +10,9 @@ import java.awt.geom.Rectangle2D;
public class CollisionManager {
public static boolean CollisionDetected(Building building, Line2D travelLine, float charHeight, float charY){
if(building.buildingRect != null && !travelLine.intersects(building.buildingRect) && !building.buildingRect.contains(travelLine.getP1()) && !building.buildingRect.contains(travelLine.getP2()))
return false;
if(building.buildingRect != null)
if(!travelLine.intersects(building.buildingRect) && !building.buildingRect.contains(travelLine.getP1()) && !building.buildingRect.contains(travelLine.getP2()))
return false;
for (Mesh mesh : building.buildingMeshes)
if(mesh.MeshCollides(travelLine,charHeight,charY))

7
src/engine/devcmd/cmds/InfoCmd.java

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
package engine.devcmd.cmds;
import engine.CollisionEngine.Mesh;
import engine.Enum;
import engine.Enum.BuildingGroup;
import engine.Enum.GameObjectType;
@ -244,7 +245,11 @@ public class InfoCmd extends AbstractDevCmd { @@ -244,7 +245,11 @@ public class InfoCmd extends AbstractDevCmd {
for (Regions regions : targetBuilding.getBounds().getRegions()) {
//TODO ADD REGION INFO
}
output += "Mesh Count: " + targetBuilding.buildingMeshes.size();
output += "-------Mesh Data-------" + newline;
output += "Mesh Count: " + targetBuilding.buildingMeshes.size() + newline;
for(Mesh mesh : targetBuilding.buildingMeshes){
output += "Mesh Rect: " + mesh.boundsRect + newline;
}
break;
case PlayerCharacter:
output += newline;

4
src/engine/devcmd/cmds/RegionCmd.java

@ -48,10 +48,12 @@ public class RegionCmd extends AbstractDevCmd { @@ -48,10 +48,12 @@ public class RegionCmd extends AbstractDevCmd {
this.throwbackInfo(pc, output);
}
if(building != null){
this.throwbackInfo(pc, "Building Rect: " + building.buildingRect);
for (Mesh mesh : building.buildingMeshes){
this.throwbackInfo(pc, "Mesh Rect: " + mesh.boundsRect);
//this.throwbackInfo(pc, "Mesh Rect: " + mesh.boundsRect);
if(mesh.boundsRect.contains(pc.loc.x,pc.loc.z)) {
this.throwbackInfo(pc, "Inside A Mesh's Bounds");
this.throwbackInfo(pc, "Rect: " + mesh.boundsRect);
return;
}
}

6
src/engine/gameManager/BuildingManager.java

@ -986,7 +986,9 @@ public enum BuildingManager { @@ -986,7 +986,9 @@ public enum BuildingManager {
int i = 0; // stop point for testing
}
building.buildingMeshes = new ArrayList<>();
float rotation = building.getRot().getRotation();
//float rotation = building.getRot().getRotation();
double radian = building.getBounds().getQuaternion().angleY;
int degrees = (int) Math.toDegrees(radian);
Vector3f buildingLoc = new Vector3f(building.loc.x, building.loc.y, building.loc.z);
if(prop_meshes.containsKey(building.meshUUID) == false)
return;//no meshes to load for this prop
@ -1039,7 +1041,7 @@ public enum BuildingManager { @@ -1039,7 +1041,7 @@ public enum BuildingManager {
ArrayList<Vector3f> rotatedPoints = new ArrayList<>();
for (Vector3f point : pointList) {
Vector3f calculatedOffsetPoint = buildingLoc.add(point);
rotatedPoints.add(Vector3f.rotateAroundPoint(buildingLoc, calculatedOffsetPoint, rotation));
rotatedPoints.add(Vector3f.rotateAroundPoint(buildingLoc, calculatedOffsetPoint, radian));
}
Point2D.Float p1 = new Point2D.Float(rotatedPoints.get(0).x, rotatedPoints.get(0).z);

22
src/engine/net/client/handlers/MoveToPointHandler.java

@ -11,6 +11,7 @@ package engine.net.client.handlers; @@ -11,6 +11,7 @@ package engine.net.client.handlers;
import engine.InterestManagement.WorldGrid;
import engine.exception.MsgSendException;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.CollisionEngine.CollisionManager;
import engine.gameManager.MovementManager;
@ -43,16 +44,27 @@ public class MoveToPointHandler extends AbstractClientMsgHandler { @@ -43,16 +44,27 @@ public class MoveToPointHandler extends AbstractClientMsgHandler {
Line2D travelLine = new Line2D.Float();
Vector3fImmutable endLoc = new Vector3fImmutable(msg.getEndLat(),msg.getEndAlt(),msg.getEndLon());
travelLine.setLine(pc.loc.x,pc.loc.z,endLoc.x,endLoc.z);
HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(pc.loc, 1000, MBServerStatics.MASK_BUILDING);
for(AbstractWorldObject awo : awoList){
Building building = (Building)awo;
if(CollisionManager.CollisionDetected(building, travelLine,pc.getCharacterHeight(),pc.loc.y)){
ChatManager.chatSystemInfo(pc, "Collision Detected");
if(BuildingManager.getBuildingAtLocation(pc.loc) != null){
Building current = BuildingManager.getBuildingAtLocation(pc.loc);
if (CollisionManager.CollisionDetected(current, travelLine, pc.getCharacterHeight(), pc.loc.y)) {
ChatManager.chatSystemInfo(pc, "Collision Detected With : " + current.getName() + " Rect: " + current.buildingRect);
//msg.setEndCoord();
MovementManager.movement(msg, pc);
return true;
}
}
HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(pc.loc, 1000, MBServerStatics.MASK_BUILDING);
for(AbstractWorldObject awo : awoList){
Building building = (Building)awo;
if(travelLine.intersects(building.buildingRect) || building.buildingRect.contains(travelLine.getP1()) || building.buildingRect.contains(travelLine.getP2())) {
if (CollisionManager.CollisionDetected(building, travelLine, pc.getCharacterHeight(), pc.loc.y)) {
ChatManager.chatSystemInfo(pc, "Collision Detected With : " + building.getName() + " Rect: " + building.buildingRect);
//msg.setEndCoord();
MovementManager.movement(msg, pc);
return true;
}
}
}
//ChatManager.chatSystemInfo(pc, "No Collision Detected");
MovementManager.movement(msg, pc);
return true;

Loading…
Cancel
Save