summaryrefslogtreecommitdiff
path: root/src/sims/collision
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2009-12-20 17:53:45 +0000
committerJakob Odersky <jodersky@gmail.com>2009-12-20 17:53:45 +0000
commite87fcc40f9a2e8624d3260abf8180596de79b152 (patch)
treea3052eb7b657099e2bd616ce74b903f6250527e5 /src/sims/collision
parent66d338aec5d632927fa561a68310c8931938e9e0 (diff)
downloadsims-e87fcc40f9a2e8624d3260abf8180596de79b152.tar.gz
sims-e87fcc40f9a2e8624d3260abf8180596de79b152.tar.bz2
sims-e87fcc40f9a2e8624d3260abf8180596de79b152.zip
Made code fully compatible with scala 2.8.
Diffstat (limited to 'src/sims/collision')
-rw-r--r--src/sims/collision/GridDetector.scala10
-rw-r--r--src/sims/collision/Pair.scala7
2 files changed, 10 insertions, 7 deletions
diff --git a/src/sims/collision/GridDetector.scala b/src/sims/collision/GridDetector.scala
index abc40f2..9a71c6d 100644
--- a/src/sims/collision/GridDetector.scala
+++ b/src/sims/collision/GridDetector.scala
@@ -12,14 +12,14 @@ import scala.collection._
import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.HashMap
-/**A conrete implementation of <code>Detector</code>. <code>GridDetector</code> divides the world into a grid
+/**A concrete implementation of <code>Detector</code>. <code>GridDetector</code> divides the world into a grid
* for faster collision detection.*/
class GridDetector(override val world: World) extends Detector {
/**Array of collision detection methods. These methods return <code>true</code> if two shapes are colliding.*/
val detectionMethods = new ArrayBuffer[PartialFunction[(Shape, Shape), Boolean]]
detectionMethods += {
- case (c1: Circle, c2: Circle) => { //Kollision wenn Distanz <= Summe der Radien
+ case (c1: Circle, c2: Circle) => { //collision if distance <= sum of radiuses
val d = (c1.pos - c2.pos).length
val rSum = c1.radius + c2.radius
d - rSum <= 0
@@ -31,12 +31,12 @@ class GridDetector(override val world: World) extends Detector {
axes.forall((a: Vector2D) => p1.project(a) overlaps p2.project(a))
}
- case (p: ConvexPolygon, c: Circle) => { //Distanz von Zentrum zu Seiten oder Eckpunkten
+ case (p: ConvexPolygon, c: Circle) => { //distance form center to sides or vertices
val distances = for (s <- p.sides) yield (s distance c.pos)
distances.exists(_ - c.radius <= 0) || (p contains c.pos)
}
- case (c: Circle, p: ConvexPolygon) => { //Distanz von Zentrum zu Seiten oder Eckpunkten
+ case (c: Circle, p: ConvexPolygon) => { //distance form center to sides or vertices
val distances = for (s <- p.sides) yield (s distance c.pos)
distances.exists(_ - c.radius <= 0) || (p contains c.pos)
}
@@ -97,7 +97,7 @@ class GridDetector(override val world: World) extends Detector {
}
for(s <- world.shapes) addToGrid(s)
var ps: List[Pair] = Nil
- for(cell <- grid.values) {
+ for(cell <- grid.valuesIterator) {
ps = ps ::: (for (s1: Shape <- cell; s2: Shape <- cell;
if (s1 ne s2);
if (s1.body ne s2.body);
diff --git a/src/sims/collision/Pair.scala b/src/sims/collision/Pair.scala
index e4ae947..a01fb00 100644
--- a/src/sims/collision/Pair.scala
+++ b/src/sims/collision/Pair.scala
@@ -9,8 +9,7 @@ package sims.collision
import sims.dynamics._
/**Pair of shapes.*/
-case class Pair(s1: Shape, s2: Shape) extends Tuple2(s1, s2){
- def this(t: Tuple2[Shape, Shape]) = this(t._1, t._2)
+case class Pair(s1: Shape, s2: Shape){
override def equals(other: Any) = { //overriden to prevent removal during "GridDetector.getPairs"
other match {
@@ -19,3 +18,7 @@ case class Pair(s1: Shape, s2: Shape) extends Tuple2(s1, s2){
}
}
}
+
+object Pair {
+ implicit def pair2Tuple(x: Pair) = (x.s1, x.s2)
+}