package jass.contact;
import jass.engine.*;
import jass.generators.*;
/**
A force model based on 1 period of some waveform (cos for example)
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
public class BangForce extends OneShotBuffer {
/** Duration in seconds of impact in buffer. */
private float durBang;
/** Construct impact force from named file. (For example cos20ms.wav.)
@param srate sampling rate in Hertz.
@param bufferSize bufferSize of this Out.
@param fn Audio file name. (For example cos20ms.wav.)
*/
public BangForce(float srate, int bufferSize, String fn) {
super(srate,bufferSize,fn);
durBang = loopBufferLength/srateLoopBuffer;
}
/** Construct loop force and provide buffer.
@param srate sampling rate in Hertz.
@param bufferSize bufferSize of this Out.
@param loopBuffer looping buffer.
*/
public BangForce(float srate, int bufferSize, float[] loopBuffer) {
super(srate,bufferSize,loopBuffer);
}
/** Generate impact force.
@param force magnitude.
@param dur duration in seconds of impact.
*/
public void bang(float force, float dur) {
if(dur < 2/srate) {
dur = 2/srate;
}
setVolume(force);
setSpeed(durBang/dur);
hit();
}
}