package hype.extended.behavior { import hype.framework.behavior.AbstractBehavior; import hype.framework.behavior.IBehavior; public class PendulumWave extends AbstractBehavior implements IBehavior { const deg2rad = Math.PI / 180; protected var _prop:String; protected var _theta:Number; protected var _amplitude:Number; protected var _step:Number; protected var _speed:Number; protected var _center:Number; protected var _total:Number; protected var _reducer:Number; public function PendulumWave(target:Object, prop:String, min:Number, max:Number, speed:Number, step:Number=0, total:Number = 1, maintainHeight:Boolean = false) { super(target); _prop = prop; _step = step; _amplitude = max - min;//height of the wave _speed = speed * deg2rad / 2;//frequency of the wave _center = (max + min)/2; _theta = 0.0; _reducer = (total > 1 && !maintainHeight) ? _amplitude / total * (_step - 1) : 0; } public function run(target:Object) : void { this.setProperty(_prop, Math.sin(_theta * _step) * (_amplitude - _reducer)/2 + _center); _theta += _speed; } } }