Advertisement
schosins

SapTest

Aug 29th, 2016
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.91 KB | None | 0 0
  1. import org.dyn4j.collision.broadphase.Sap
  2. import org.dyn4j.dynamics.BodyFixture
  3. import org.dyn4j.dynamics.Body
  4. import org.dyn4j.geometry.Rectangle
  5. import org.dyn4j.collision.broadphase.DynamicAABBTree
  6.  
  7. object SapTest {
  8.  
  9.   def main(args: Array[String]) {
  10.  
  11.     // create a BodyFixture to add to every Body
  12.     val rectFixture = new BodyFixture(new Rectangle(32, 32))
  13.  
  14.     // first collidee
  15.     val collidee1 = new Body
  16.     collidee1.addFixture(rectFixture)
  17.  
  18.     // second collidee
  19.     val collidee2 = new Body
  20.     collidee2.addFixture(rectFixture)
  21.     collidee2.translate(64, 0)
  22.  
  23.     // create AABBs for both collidees for output
  24.     val aabbCollidee1 = collidee1.createAABB
  25.     val aabbCollidee2 = collidee2.createAABB
  26.  
  27.     // add both collidees to the Sap broadphase.
  28.     val sap = new Sap[Body, BodyFixture]
  29.     sap.add(collidee1)
  30.     sap.add(collidee2)
  31.  
  32.     // add both collidees to the DynamicAAB broadphase.
  33.     val dynamicAABBTree = new DynamicAABBTree[Body, BodyFixture]
  34.     dynamicAABBTree.add(collidee1)
  35.     dynamicAABBTree.add(collidee2)
  36.  
  37.     // the collider I used overlapped the rightmost body in the Sap without touching its left side.
  38.     // I'm testing collision with AABB to filter uninteresting collision pairs before the broadphase.
  39.     val collider = new Body
  40.     collider.addFixture(rectFixture)
  41.     collider.translate(64 + 16, 0) // should overlap with collidee2. Touches the top, right and bottom side.
  42.     var aabbCollider = collider.createAABB
  43.  
  44.     // do the checks
  45.     var resultSap = sap.detect(aabbCollider)
  46.     var resultDyn = dynamicAABBTree.detect(aabbCollider)
  47.     var colliderOverlapsCollidee2 = aabbCollider overlaps aabbCollidee2
  48.  
  49.     // print results
  50.     println("Test 1: Collider collides with top, right and bottom side of collidee 2.")
  51.     println(s"collider  : $aabbCollider")
  52.     println(s"collidee 1: $aabbCollidee1")
  53.     println(s"collidee 2: $aabbCollidee2")
  54.     println(s"sap.detect(aabbCollider) returned ${resultSap.size} results.")
  55.     println(s"dynamicAABBTree.detect(aabbCollider) returned ${resultDyn.size} results.")
  56.     println(s"aabbCollider.overlaps(aabbCollidee2) returned $colliderOverlapsCollidee2.")
  57.     println
  58.  
  59.     //    Test 1: Collider collides with top, right and bottom side of collidee 2.
  60.     //    collider  : AABB[Min=(64.0, -16.0)|Max=(96.0, 16.0)]
  61.     //    collidee 1: AABB[Min=(-16.0, -16.0)|Max=(16.0, 16.0)]
  62.     //    collidee 2: AABB[Min=(48.0, -16.0)|Max=(80.0, 16.0)]
  63.     //    sap.detect(aabbCollider) returned 0 results.
  64.     //    dynamicAABBTree.detect(aabbCollider) returned 1 results.
  65.     //    aabbCollider.overlaps(aabbCollidee2) returned true.
  66.  
  67.     // translating collider so that it touches the left, top and bottom side of collidee2.
  68.     collider.translate(-32, 0)
  69.     aabbCollider = collider.createAABB // create translated AABB
  70.  
  71.     // do the checks again
  72.     resultSap = sap.detect(aabbCollider)
  73.     colliderOverlapsCollidee2 = aabbCollider overlaps aabbCollidee2
  74.  
  75.     // print results
  76.     println("Test 2: Collider collides with left, top and bottom side of collidee 2.")
  77.     println(s"collider  : $aabbCollider")
  78.     println(s"collidee 1: $aabbCollidee1")
  79.     println(s"collidee 2: $aabbCollidee2")
  80.     println(s"sap.detect(aabbCollider) returned ${resultSap.size} results.")
  81.     println(s"dynamicAABBTree.detect(aabbCollider) returned ${resultDyn.size} results.")
  82.     println(s"aabbCollider.overlaps(aabbCollidee2) returned $colliderOverlapsCollidee2.")
  83.  
  84.     //    Test 2: Collider collides with left, top and bottom side of collidee 2.
  85.     //    collider  : AABB[Min=(32.0, -16.0)|Max=(64.0, 16.0)]
  86.     //    collidee 1: AABB[Min=(-16.0, -16.0)|Max=(16.0, 16.0)]
  87.     //    collidee 2: AABB[Min=(48.0, -16.0)|Max=(80.0, 16.0)]
  88.     //    sap.detect(aabbCollider) returned 1 results.
  89.     //    dynamicAABBTree.detect(aabbCollider) returned 1 results.
  90.     //    aabbCollider.overlaps(aabbCollidee2) returned true.
  91.  
  92.   }
  93.  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement