package com.github.elegantwhelp.collision; import org.joml.Vector2f; public class AABB { private Vector2f center, half_extent; public AABB(Vector2f center, Vector2f half_extent) { this.center = center; this.half_extent = half_extent; } public Collision getCollision(AABB box2) { Vector2f distance = box2.center.sub(center, new Vector2f()); distance.x = Math.abs(distance.x); distance.y = Math.abs(distance.y); distance.sub(half_extent.add(box2.half_extent, new Vector2f())); return new Collision(distance, distance.x < 0 && distance.y < 0); } public Collision getCollision(Vector2f point) { Vector2f distance = point.sub(center); distance.x = Math.abs(distance.x); distance.y = Math.abs(distance.y); distance.sub(half_extent); return new Collision(distance, distance.x < 0 && distance.y < 0); } public void correctPosition(AABB box2, Collision data) { Vector2f correctionDistance = box2.center.sub(center, new Vector2f()); if (data.distance.x > data.distance.y) { if (correctionDistance.x > 0) { center.add(data.distance.x, 0); } else { center.add(-data.distance.x, 0); } } else { if (correctionDistance.y > 0) { center.add(0, data.distance.y); } else { center.add(0, -data.distance.y); } } } public Vector2f getCenter() { return center; } public Vector2f getHalfExtent() { return half_extent; } }