1 6 7 package com.thoughtriver.open.vectorvisuals.task; 8 9 import java.awt.geom.*; 10 11 import com.thoughtriver.open.vectorvisuals.*; 12 13 22 public class IndefiniteOscillationTask extends AnimationTask { 23 24 25 private final VisualObject target; 26 27 28 private final double extent; 29 30 31 private double rate = 0; 32 33 34 private double total = 0; 35 36 37 private double lastKnownPosition = 0; 38 39 50 public IndefiniteOscillationTask(final VisualObject target, final double extent) { 51 super(-1); 52 this.target = target; 53 this.extent = extent; 54 } 55 56 63 public void setRate(final double rate) { 64 this.rate = rate; 65 } 66 67 74 @Override 75 protected void update(final double progress) { 76 77 synchronized (target) { 78 Point2D rotationPoint = target.getRotationPoint(); 79 AffineTransform transform = target.getTransform(); 80 81 total += progress; 82 double position = Math.sin((total / (1000 / rate))) * extent; 83 double amountToApply = position - lastKnownPosition; 84 lastKnownPosition = position; 85 86 transform.rotate(amountToApply, rotationPoint.getX(), rotationPoint.getY()); 87 target.setTransform(transform); 88 } 89 } 90 91 } 92 | Popular Tags |