tsmathlib
Version:
Typescript Version Math/Physics/CG Library
82 lines (65 loc) • 1.55 kB
text/typescript
/*
* @Author: Xu.Wang
* @Date: 2020-04-08 17:20:55
* @Last Modified by: Xu.Wang
* @Last Modified time: 2020-04-08 18:05:47
*/
export class Frame {
private _index: number
private _timeIntervalInSeconds: number
constructor(index: number = 0, timeIntervalInSeconds = 1.0 / 60.0) {
this._index = index
this._timeIntervalInSeconds = timeIntervalInSeconds
}
timeInSeconds(): number {
return this._index * this._timeIntervalInSeconds
}
index(): number {
return this._index
}
setIndex(index: number) {
this._index = index
}
timeIntervalInSeconds(): number {
return this._timeIntervalInSeconds
}
setTimeIntervalInSeconds(time: number) {
this._timeIntervalInSeconds = time
}
advance() {
this._index += 1
}
advanceByDelta(delta: number) {
this._index += delta
}
}
export abstract class Animation {
protected _currentTime: number
protected _currentFrame: Frame
constructor() {
this._currentTime = 0
this._currentFrame = new Frame()
this._currentFrame.setIndex(-1)
}
abstract onUpdate(frame: Frame): void
currentFrame() {
return this._currentFrame
}
setCurrentFrame(frame: Frame) {
this._currentFrame = frame
}
update(frame: Frame): void {
this.onUpdate(frame)
}
currentTimeInSeconds() {
return this._currentTime
}
advanceSingleFrame() {
let newFrame = new Frame(
this._currentFrame.index(),
this._currentFrame.timeIntervalInSeconds()
)
newFrame.advance()
this.update(newFrame)
}
}