package edu.colorado.phet.movingman.ladybug
import edu.colorado.phet.common.phetcommon.view.util.PhetFont
import edu.colorado.phet.common.piccolophet.nodes.ArrowNode
import edu.colorado.phet.common.phetcommon.view.graphics.transforms.ModelViewTransform2D
import edu.colorado.phet.common.piccolophet.nodes.ArrowNode
import java.awt.geom.Point2D
import java.awt.{BasicStroke, Color}
import umd.cs.piccolo.nodes.PText
import umd.cs.piccolo.PNode
import LadybugUtil._
class ArrowSetNode(ladybug: Ladybug, transform: ModelViewTransform2D, vectorVisibilityModel: VectorVisibilityModel) extends PNode {
class LabeledArrowNode(color: Color, name: String) extends PNode {
val arrowNode = new ArrowNode(new Point2D.Double(0, 0), new Point2D.Double(200, 200), 90, 90, 60, 2, true)
arrowNode setPaint color
arrowNode setStroke new BasicStroke(0.5f)
arrowNode setStrokePaint Color.gray
val labelNode = new PText(name)
labelNode.setFont(new PhetFont(24))
addChild(arrowNode)
addChild(labelNode)
def setTipAndTailLocations(a: Vector2D, b: Vector2D) = {
arrowNode.setTipAndTailLocations(a, b)
labelNode.setOffset(a)
labelNode.setVisible(labelNode.getFullBounds.width < (a - b).magnitude)
}
}
val velocityNode = new LabeledArrowNode(LadybugColorSet.velocity, "Velocity")
val accelNode = new LabeledArrowNode(LadybugColorSet.acceleration, "Acceleration")
addChild(velocityNode)
addChild(accelNode)
ladybug addListener update
update(ladybug)
vectorVisibilityModel.addListener(() => update(ladybug))
setPickable(false)
setChildrenPickable(false)
def update(a: Ladybug) {
val viewPosition = transform modelToView a.getPosition
val viewVelocity = transform modelToViewDifferentialDouble a.getVelocity
val velTip = viewPosition + viewVelocity * 20 * 0.03
// println(velTip)
velocityNode.setTipAndTailLocations(velTip, viewPosition)
val viewAccel = transform modelToViewDifferentialDouble a.getAcceleration
accelNode.setTipAndTailLocations(viewPosition + viewAccel * 75 * 0.03 * 0.03, viewPosition)
accelNode.setVisible(vectorVisibilityModel.accelerationVectorVisible)
velocityNode.setVisible(vectorVisibilityModel.velocityVectorVisible)
}
}