/
AnimationInstance.ts
82 lines (70 loc) · 1.88 KB
/
AnimationInstance.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import AnimationBits from "./AnimationBits";
import AnimationPreset from "./AnimationPreset";
import VirtualDie from "../VirtualDie";
/**
* @category Animation Instance
*/
export default abstract class AnimationInstance {
private _animationPreset: AnimationPreset;
private _animationBits: AnimationBits;
private _virtualDie: VirtualDie;
private _startTime = 0;
get startTime(): number {
return this._startTime;
}
get duration(): number {
return this._animationPreset.duration;
}
protected get animationPreset(): AnimationPreset {
return this._animationPreset;
}
protected get bits(): AnimationBits {
return this._animationBits;
}
protected get die(): VirtualDie {
return this._virtualDie;
}
// TODO add readonly to constructor parameters
constructor(preset: AnimationPreset, bits: AnimationBits, die: VirtualDie) {
this._animationPreset = preset;
this._animationBits = bits;
this._virtualDie = die;
}
start(startTime: number): void {
this._startTime = startTime;
}
abstract updateLEDs(
ms: number,
retIndices: number[],
retColors32: number[]
): number;
abstract stop(retIndices: number[]): number;
protected setIndices(faceMask: number, retIndices: number[]): number {
const ledCount = this._virtualDie.ledCount;
let retCount = 0;
for (let i = 0; i < ledCount; ++i) {
if ((faceMask & (1 << i)) !== 0) {
retIndices[retCount] = i;
retCount++;
}
}
return retCount;
}
setColor(
color: number,
faceMask: number,
retIndices: number[],
retColors: number[]
): number {
const ledCount = this._virtualDie.ledCount;
let retCount = 0;
for (let i = 0; i < ledCount; ++i) {
if ((faceMask & (1 << i)) !== 0) {
retIndices[retCount] = i;
retColors[retCount] = color;
retCount++;
}
}
return retCount;
}
}