Project as is
This commit is contained in:
commit
80c9e2d168
55 changed files with 1573 additions and 0 deletions
99
src/com/gnarly/engine/utils/RHitbox.java
Executable file
99
src/com/gnarly/engine/utils/RHitbox.java
Executable file
|
@ -0,0 +1,99 @@
|
|||
package com.gnarly.engine.utils;
|
||||
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public class RHitbox {
|
||||
|
||||
private Vector3f center, halfExtent;
|
||||
|
||||
public RHitbox(float x, float y, float width, float height) {
|
||||
center = new Vector3f(x + width / 2, y + height / 2, 0);
|
||||
halfExtent = new Vector3f(width / 2, height / 2, 0);
|
||||
}
|
||||
|
||||
public Vector3f collisionAdjust(RHitbox hitbox) {
|
||||
Vector3f ret = new Vector3f();
|
||||
Vector3f distance = hitbox.center.sub(center, new Vector3f());
|
||||
distance.x = (float)Math.abs(distance.x);
|
||||
distance.y = (float)Math.abs(distance.y);
|
||||
|
||||
distance.sub(halfExtent.add(hitbox.getHalfExtent(), new Vector3f()));
|
||||
if (distance.x < 0 && distance.y < 0) {
|
||||
Vector3f correction = hitbox.getCenter().sub(center, new Vector3f());
|
||||
if(distance.x > distance.y) {
|
||||
if(correction.x > 0)
|
||||
ret.x = distance.x;
|
||||
else
|
||||
ret.x = -distance.x;
|
||||
}
|
||||
else if(distance.x < distance.y) {
|
||||
if(correction.y > 0)
|
||||
ret.y = distance.y;
|
||||
else
|
||||
ret.y = -distance.y;
|
||||
}
|
||||
else {
|
||||
if(correction.x > 0)
|
||||
ret.x = distance.x;
|
||||
else
|
||||
ret.x = -distance.x;
|
||||
if(correction.y > 0)
|
||||
ret.y = distance.y;
|
||||
else
|
||||
ret.y = -distance.y;
|
||||
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean checkCollision(RHitbox hitbox) {
|
||||
Vector3f distance = hitbox.center.sub(center, new Vector3f());
|
||||
distance.x = (float)Math.abs(distance.x);
|
||||
distance.y = (float)Math.abs(distance.y);
|
||||
|
||||
distance.sub(halfExtent.add(hitbox.getHalfExtent(), new Vector3f()));
|
||||
return (distance.x < 0 && distance.y < 0);
|
||||
}
|
||||
|
||||
public void setPosition(float x, float y) {
|
||||
center.x = x + halfExtent.x;
|
||||
center.y = y + halfExtent.y;
|
||||
}
|
||||
|
||||
public void translate(Vector3f translate) {
|
||||
center.x += translate.x;
|
||||
center.y += translate.y;
|
||||
}
|
||||
|
||||
public void setBounds(float width, float height) {
|
||||
halfExtent.x = width / 2;
|
||||
halfExtent.y = height / 2;
|
||||
center.x += (width - halfExtent.x) / 2;
|
||||
center.y += (height - halfExtent.y) / 2;
|
||||
}
|
||||
|
||||
public float getX() {
|
||||
return center.x - halfExtent.x;
|
||||
}
|
||||
|
||||
public float getY() {
|
||||
return center.y - halfExtent.y;
|
||||
}
|
||||
|
||||
public float getWidth() {
|
||||
return halfExtent.x * 2;
|
||||
}
|
||||
|
||||
public float getHeight() {
|
||||
return halfExtent.y * 2;
|
||||
}
|
||||
|
||||
public Vector3f getCenter() {
|
||||
return center;
|
||||
}
|
||||
|
||||
public Vector3f getHalfExtent() {
|
||||
return halfExtent;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue