part of game; class ActionCircularMove extends ActionInterval { ActionCircularMove(this.setter, this.center, this.radius, this.startAngle, this.clockWise, double duration) : super (duration); final Function setter; final Point center; final double radius; final double startAngle; final bool clockWise; void update(double t) { if (!clockWise) t = -t; double rad = radians(startAngle + t * 360.0); Offset offset = new Offset(math.cos(rad) * radius, math.sin(rad) * radius); Point pos = center + offset; setter(pos); } } class ActionOscillate extends ActionInterval { ActionOscillate(this.setter, this.center, this.radius, double duration) : super(duration); final Function setter; final Point center; final double radius; void update(double t) { double rad = radians(t * 360.0); Offset offset = new Offset(math.sin(rad) * radius, 0.0); setter(center + offset); } }