1 package com.irtimaled.bbor.common.models;
3 import com.irtimaled.bbor.client.renderers.AbstractRenderer;
4 import com.irtimaled.bbor.client.renderers.CuboidRenderer;
5 import com.irtimaled.bbor.common.BoundingBoxType;
6 import com.irtimaled.bbor.common.MathHelper;
7 import com.irtimaled.bbor.common.TypeHelper;
8 import com.irtimaled.bbor.common.interop.CommonInterop;
10 public class BoundingBoxCuboid extends AbstractBoundingBox {
11 private static final AbstractRenderer<BoundingBoxCuboid> RENDERER = CommonInterop.registerRenderer(BoundingBoxCuboid.class, () -> new CuboidRenderer());
13 private final Coords minCoords;
14 private final Coords maxCoords;
16 protected BoundingBoxCuboid(Coords minCoords, Coords maxCoords, BoundingBoxType type) {
18 this.minCoords = minCoords;
19 this.maxCoords = maxCoords;
22 public static BoundingBoxCuboid from(Coords minCoords, Coords maxCoords, BoundingBoxType type) {
23 return new BoundingBoxCuboid(minCoords, maxCoords, type);
27 public int hashCode() {
28 return TypeHelper.combineHashCodes(minCoords.hashCode(), maxCoords.hashCode());
32 public boolean equals(Object obj) {
33 if (this == obj) return true;
34 if (obj == null || getClass() != obj.getClass()) return false;
35 BoundingBoxCuboid other = (BoundingBoxCuboid) obj;
36 return minCoords.equals(other.minCoords) && maxCoords.equals(other.maxCoords);
39 public Coords getMinCoords() {
43 public Coords getMaxCoords() {
48 public Boolean intersectsBounds(int minX, int minZ, int maxX, int maxZ) {
49 boolean minXWithinBounds = isBetween(minCoords.getX(), minX, maxX);
50 boolean maxXWithinBounds = isBetween(maxCoords.getX(), minX, maxX);
51 boolean minZWithinBounds = isBetween(minCoords.getZ(), minZ, maxZ);
52 boolean maxZWithinBounds = isBetween(maxCoords.getZ(), minZ, maxZ);
54 return (minXWithinBounds && minZWithinBounds) ||
55 (maxXWithinBounds && maxZWithinBounds) ||
56 (minXWithinBounds && maxZWithinBounds) ||
57 (maxXWithinBounds && minZWithinBounds);
60 private boolean isBetween(int val, int min, int max) {
61 return val >= min && val <= max;
65 public double getDistanceX(double x) {
66 return x - MathHelper.clamp(x, minCoords.getX(), maxCoords.getX());
70 public double getDistanceY(double y) {
71 return y - MathHelper.clamp(y, minCoords.getY(), maxCoords.getY());
75 public double getDistanceZ(double z) {
76 return z - MathHelper.clamp(z, minCoords.getZ(), maxCoords.getZ());
80 public AbstractRenderer<?> getRenderer() {
86 // public boolean isVisibleCulling() {
87 // return RenderCulling.isVisibleCulling(minCoords.getX(), minCoords.getY(), minCoords.getZ(), maxCoords.getX() + 1, maxCoords.getY() + 1, maxCoords.getZ() + 1);