mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -04:00
improve some shape comparison, fix shape tests
This commit is contained in:
parent
f13699f457
commit
abd04a293e
@ -277,10 +277,9 @@ class AABB : Shape {
|
|||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other == null) return false
|
if (other == null) return false
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (this.hashCode() != other.hashCode()) return false
|
if (other !is AABB) return false
|
||||||
if (other is AABB) return min == other.min && max == other.max
|
|
||||||
if (other is Shape) return other == this
|
return min == other.min && max == other.max
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isOnEdge(min: Vec3d, max: Vec3d): Boolean {
|
fun isOnEdge(min: Vec3d, max: Vec3d): Boolean {
|
||||||
|
@ -92,9 +92,7 @@ class CombinedShape(
|
|||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other !is Shape) return false
|
if (other !is Shape) return false
|
||||||
if (other is CombinedShape) return aabbs.contentEquals(other.aabbs)
|
if (other is CombinedShape) return aabbs.contentEquals(other.aabbs)
|
||||||
if (other is AABB) {
|
if (other is AABB) return false // one aabb is not a combined shape
|
||||||
return if (aabbs.size == 1) aabbs.first() == other else false
|
|
||||||
}
|
|
||||||
TODO("Can not compare $this with $other")
|
TODO("Can not compare $this with $other")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,27 +25,27 @@ internal class DirectedPropertyTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSideCovered1() {
|
fun testSideCovered1() {
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.DOWN))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.DOWN))
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.UP))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.UP))
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.NORTH))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.NORTH))
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.SOUTH))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.SOUTH))
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.WEST))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.WEST))
|
||||||
assertTrue(CombinedShape(AABB.BLOCK).isSideCovered(Directions.EAST))
|
assertTrue(AABB.BLOCK.isSideCovered(Directions.EAST))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSideCovered2() {
|
fun testSideCovered2() {
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.DOWN))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.DOWN))
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.UP))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.UP))
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.NORTH))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.NORTH))
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.SOUTH))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.SOUTH))
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.WEST))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.WEST))
|
||||||
assertFalse(CombinedShape(AABB.EMPTY).isSideCovered(Directions.EAST))
|
assertFalse(AABB.EMPTY.isSideCovered(Directions.EAST))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSideCovered3() {
|
fun testSideCovered3() {
|
||||||
val shape = CombinedShape(AABB(0.0f, 0.0f, 0.0f, 1.0f, 0.5f, 1.0f))
|
val shape = AABB(0.0f, 0.0f, 0.0f, 1.0f, 0.5f, 1.0f)
|
||||||
assertTrue(shape.isSideCovered(Directions.DOWN))
|
assertTrue(shape.isSideCovered(Directions.DOWN))
|
||||||
assertFalse(shape.isSideCovered(Directions.UP))
|
assertFalse(shape.isSideCovered(Directions.UP))
|
||||||
assertFalse(shape.isSideCovered(Directions.NORTH))
|
assertFalse(shape.isSideCovered(Directions.NORTH))
|
||||||
@ -56,7 +56,7 @@ internal class DirectedPropertyTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSideCovered4() {
|
fun testSideCovered4() {
|
||||||
val shape = CombinedShape(AABB(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.5f))
|
val shape = AABB(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.5f)
|
||||||
assertFalse(shape.isSideCovered(Directions.DOWN))
|
assertFalse(shape.isSideCovered(Directions.DOWN))
|
||||||
assertFalse(shape.isSideCovered(Directions.UP))
|
assertFalse(shape.isSideCovered(Directions.UP))
|
||||||
assertTrue(shape.isSideCovered(Directions.NORTH))
|
assertTrue(shape.isSideCovered(Directions.NORTH))
|
||||||
|
@ -23,15 +23,17 @@ internal class CombinedShapeTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testEquals() {
|
fun testEquals() {
|
||||||
val a = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)))
|
val a = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)), AABB(Vec3(5.0), Vec3(6.0)))
|
||||||
val b = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)))
|
val b = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)), AABB(Vec3(5.0), Vec3(6.0)))
|
||||||
assertEquals(a, b)
|
assertEquals(a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testNotEquals() {
|
fun testNotEquals() {
|
||||||
val a = CombinedShape(AABB(Vec3(0.1), Vec3(1.0)))
|
val a = CombinedShape(AABB(Vec3(0.1), Vec3(1.0)), AABB(Vec3(5.0), Vec3(6.0)))
|
||||||
val b = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)))
|
val b = CombinedShape(AABB(Vec3(0.0), Vec3(1.0)), AABB(Vec3(5.0), Vec3(6.0)))
|
||||||
assertNotEquals(a, b)
|
assertNotEquals(a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: different order
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user