summaryrefslogtreecommitdiff
path: root/src/graphyx/gui/WorldPanel.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphyx/gui/WorldPanel.scala')
-rw-r--r--src/graphyx/gui/WorldPanel.scala30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/graphyx/gui/WorldPanel.scala b/src/graphyx/gui/WorldPanel.scala
index 13765e5..cd91f00 100644
--- a/src/graphyx/gui/WorldPanel.scala
+++ b/src/graphyx/gui/WorldPanel.scala
@@ -42,6 +42,7 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
var drawAABBs = false
var drawPairs = false
var drawCollisions = false
+ var trace = false
override def paintComponent(g: java.awt.Graphics) = {
var parts: Seq[graphyx.graphics.Drawable] = Seq()
@@ -55,6 +56,7 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
drawAxes(g)
g.translate(offset.x.toInt, -offset.y.toInt)
drawParts(parts, g)
+ if (trace) trace(scene.shapes, g)
g.translate(-offset.x.toInt, offset.y.toInt)
}
@@ -80,6 +82,30 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
}
}
+ import collection.mutable._
+ val prevPos: collection.mutable.Map[Int, collection.mutable.Queue[Vector2D]] = Map()
+ def trace(shapes: Iterable[graphics.GraphicalShape], g: java.awt.Graphics) = {
+ for (s <- shapes) {
+ s.g = g
+ s.windowHeight = super.size.height
+ s.ppm = ppm
+ s.scale = this.scale
+
+
+ if (!prevPos.contains(s.uid)) prevPos += (s.uid -> new Queue[Vector2D])
+ else {
+ prevPos(s.uid).enqueue(s.pos)
+ for(i <- 0 until prevPos(s.uid).length - 1) {
+ val sp = prevPos(s.uid)(i)
+ val ep = prevPos(s.uid)(i + 1)
+ s.g.setColor(java.awt.Color.cyan)
+ s.drawLine(sp, ep)
+ }
+ if (prevPos(s.uid).length == 50) prevPos(s.uid).dequeue
+ }
+ }
+ }
+
def getBody(p: Vector2D): Option[Body] = {
val shape = scene.shapes.find(_.contains(p))
if (shape != None) Some(shape.get.real.body)
@@ -106,8 +132,10 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
case MousePressed(c,p,x,y,b) => {
mousePressed = true; startPoint = p; endPoint = p
x match {
- case 1024 if (getBody(p) != None) => grab(getBody(p).get, p)
+ case 1024 if (getBody(p) != None) => grab(getBody(p).get, p)
+ case 1152 if (getBody(p) != None) => {grabbedBody = Some(new GrabbedBody(getBody(p).get, p)); popup.body = grabbedBody.get.body; popup.peer.setLocation(p); popup.visible = true}
case 4096 if (getBody(p) != None) => {grabbedBody = Some(new GrabbedBody(getBody(p).get, p)); popup.body = grabbedBody.get.body; popup.peer.setLocation(p); popup.visible = true}
+ case _ => ()
}
}