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) } }