public AxisAlignedBoundingBox AABBPhysicsCollisionOnly(AxisAlignedBoundingBox currentAABB, Vector3 moveBy) { Island closestIsland = islandManager.getClosestIslandToLocation(currentAABB.middle()); if (closestIsland == null)// if no islands are loaded { return(currentAABB); } AxisAlignedBoundingBox newAABB = closestIsland.AABBPhysics(currentAABB, moveBy); return(newAABB); }
private static void runPhysicsWithMoveActionAndIsland(Actor toMove, Vector3 movement, Island closestIsland) { Vector3 originalDesiredCharacterAABBMiddle = toMove.getAABB().addVector(movement).middle(); AxisAlignedBoundingBox newAABBforCharacter = closestIsland.AABBPhysics(toMove.getAABB(), movement); Vector3 newVelocity = toMove.getVelocity(); if (newAABBforCharacter.middle().X != originalDesiredCharacterAABBMiddle.X) { newVelocity.X = 0; } if (newAABBforCharacter.middle().Y != originalDesiredCharacterAABBMiddle.Y) { newVelocity.Y = 0; } if (newAABBforCharacter.middle().Z != originalDesiredCharacterAABBMiddle.Z) { newVelocity.Z = 0; } toMove.setVelocity(newVelocity); toMove.setAABB(newAABBforCharacter); }