pixi-timer-events
Version:
A type-based Entity Component System. Implemented in TypeScript
102 lines (86 loc) • 2.08 kB
text/typescript
import { EventEmitter} from "eventemitter3"
import TimerManager from "./TimerManager";
export default class Timer extends EventEmitter {
public time: number;
public active: boolean;
public isEnded: boolean;
public isStarted: boolean;
public expire: boolean;
public delay: number;
public repeat: number;
public loop: boolean;
public manager: TimerManager;
private _delayTime: number;
private _elapsedTime: number;
private _repeat: number;
constructor(time = 1, manager){
super();
this.time = time;
if(manager)this.addTo(manager);
this.active = false;
this.isEnded = false;
this.isStarted = false;
this.expire = false;
this.delay = 0;
this.repeat = 0;
this.loop = false;
this._delayTime = 0;
this._elapsedTime = 0;
this._repeat = 0;
}
addTo(manager){
this.manager = manager;
this.manager.addTimer(this);
return this;
}
remove(){
if(!this.manager)return;
this.manager.removeTimer(this);
return this;
}
start(){
this.active = true;
return this;
}
stop(){
this.active = false;
this.emit('stop', this._elapsedTime);
return this;
}
reset(){
this._elapsedTime = 0;
this._repeat = 0;
this._delayTime = 0;
this.isStarted = false;
this.isEnded = false;
return this;
}
update(delta, deltaMS){
if(!this.active)return;
if(this.delay > this._delayTime){
this._delayTime += deltaMS;
return;
}
if(!this.isStarted){
this.isStarted = true;
this.emit('start', this._elapsedTime);
}
if(this.time > this._elapsedTime){
let t = this._elapsedTime+deltaMS;
let ended = (t>=this.time);
this._elapsedTime = (ended) ? this.time : t;
this.emit('update', this._elapsedTime, delta);
if(ended){
if(this.loop || this.repeat > this._repeat){
this._repeat++;
this.emit('repeat', this._elapsedTime, this._repeat);
this._elapsedTime = 0;
return;
}
this.isEnded = true;
this.active = false;
this.emit('end', this._elapsedTime);
}
}
}
}