Parcourir la source

add more bounds api

Nicolas Cannasse il y a 4 ans
Parent
commit
301b871171
1 fichiers modifiés avec 25 ajouts et 0 suppressions
  1. 25 0
      h3d/col/Bounds.hx

+ 25 - 0
h3d/col/Bounds.hx

@@ -194,6 +194,14 @@ class Bounds implements Collider {
 		return p.x >= xMin && p.x < xMax && p.y >= yMin && p.y < yMax && p.z >= zMin && p.z < zMax;
 		return p.x >= xMin && p.x < xMax && p.y >= yMin && p.y < yMax && p.z >= zMin && p.z < zMax;
 	}
 	}
 
 
+	public inline function containsBounds( b : Bounds ) {
+		return xMin <= b.xMin && yMin <= b.yMin && zMin <= b.zMin && xMax >= b.xMax && yMax >= b.yMax && zMax >= b.zMax;
+	}
+
+	public inline function containsSphere( s : Sphere ) {
+		return xMin <= s.x - s.r  && yMin <= s.y - s.r && zMin <= s.z - s.r && xMax >= s.x + s.r && yMax >= s.y + s.r && zMax >= s.z + s.r;
+	}
+
 	public inline function add( b : Bounds ) {
 	public inline function add( b : Bounds ) {
 		if( b.xMin < xMin ) xMin = b.xMin;
 		if( b.xMin < xMin ) xMin = b.xMin;
 		if( b.xMax > xMax ) xMax = b.xMax;
 		if( b.xMax > xMax ) xMax = b.xMax;
@@ -221,6 +229,19 @@ class Bounds implements Collider {
 		if( z > zMax ) zMax = z;
 		if( z > zMax ) zMax = z;
 	}
 	}
 
 
+	public inline function addSphere( s : Sphere ) {
+		addSpherePos(s.x, s.y, s.z, s.r);
+	}
+
+	public inline function addSpherePos( x : Float, y : Float, z : Float, r : Float ) {
+		if( x - r < xMin ) xMin = x - r;
+		if( x + r > xMax ) xMax = x + r;
+		if( y - r < yMin ) yMin = y - r;
+		if( y + r > yMax ) yMax = y + r;
+		if( z - r < zMin ) zMin = z - r;
+		if( z + r > zMax ) zMax = z + r;
+	}
+
 	public function intersection( a : Bounds, b : Bounds ) {
 	public function intersection( a : Bounds, b : Bounds ) {
 		var xMin = Math.max(a.xMin, b.xMin);
 		var xMin = Math.max(a.xMin, b.xMin);
 		var yMin = Math.max(a.yMin, b.yMin);
 		var yMin = Math.max(a.yMin, b.yMin);
@@ -307,6 +328,10 @@ class Bounds implements Collider {
 		return new Point(xMax, yMax, zMax);
 		return new Point(xMax, yMax, zMax);
 	}
 	}
 
 
+	public inline function getVolume() {
+		return xSize * ySize * zSize;
+	}
+
 	inline function get_xSize() return xMax - xMin;
 	inline function get_xSize() return xMax - xMin;
 	inline function get_ySize() return yMax - yMin;
 	inline function get_ySize() return yMax - yMin;
 	inline function get_zSize() return zMax - zMin;
 	inline function get_zSize() return zMax - zMin;