dev@407
|
1 /**
|
dev@407
|
2 * Created by lucas on 03/06/2017.
|
dev@407
|
3 */
|
dev@407
|
4 import {
|
dev@407
|
5 AfterViewInit,
|
dev@407
|
6 ChangeDetectionStrategy,
|
dev@407
|
7 Component,
|
dev@407
|
8 ContentChildren,
|
dev@407
|
9 Input, OnDestroy,
|
dev@407
|
10 QueryList
|
dev@407
|
11 } from '@angular/core';
|
dev@407
|
12 import {
|
dev@407
|
13 LayerRemover,
|
dev@407
|
14 WavesComponent
|
dev@407
|
15 } from '../visualisations/waves-base.component';
|
dev@407
|
16 import Waves from 'waves-ui-piper';
|
dev@407
|
17 import {
|
dev@407
|
18 RenderLoopService,
|
dev@407
|
19 TaskRemover
|
dev@407
|
20 } from '../services/render-loop/render-loop.service';
|
dev@407
|
21 import {AudioPlayerService} from '../services/audio-player/audio-player.service';
|
dev@407
|
22
|
dev@407
|
23 @Component({
|
dev@407
|
24 selector: 'ugly-waves-play-head',
|
dev@407
|
25 template: '<ng-content></ng-content>',
|
dev@407
|
26 changeDetection: ChangeDetectionStrategy.OnPush
|
dev@407
|
27 })
|
dev@407
|
28 export class WavesPlayHeadComponent implements AfterViewInit, OnDestroy {
|
dev@407
|
29
|
dev@407
|
30 @ContentChildren(WavesComponent) wavesChildren: QueryList<WavesComponent<any>>;
|
dev@407
|
31 @Input() colour: string;
|
dev@407
|
32 @Input() set isActive(isActive: boolean) {
|
dev@407
|
33 this.mIsActive = isActive;
|
dev@407
|
34 this.removeAllActivePlayheads();
|
dev@407
|
35 if (isActive) {
|
dev@407
|
36 this.setupAnimatedPlayheads();
|
dev@407
|
37 }
|
dev@407
|
38 }
|
dev@407
|
39
|
dev@407
|
40 private removers: (TaskRemover | LayerRemover)[];
|
dev@407
|
41 private mIsActive: boolean;
|
dev@407
|
42
|
dev@407
|
43 constructor(private renderLoop: RenderLoopService,
|
dev@407
|
44 private player: AudioPlayerService) {
|
dev@407
|
45 this.removers = [];
|
dev@407
|
46 }
|
dev@407
|
47
|
dev@407
|
48
|
dev@407
|
49 ngAfterViewInit(): void {
|
dev@407
|
50 this.removeAllActivePlayheads();
|
dev@407
|
51 this.setupAnimatedPlayheads();
|
dev@407
|
52 }
|
dev@407
|
53
|
dev@407
|
54 ngOnDestroy(): void {
|
dev@407
|
55 this.removeAllActivePlayheads();
|
dev@407
|
56 }
|
dev@407
|
57
|
dev@407
|
58 private removeAllActivePlayheads(): void {
|
dev@407
|
59 this.removers.forEach(remove => remove());
|
dev@407
|
60 this.removers = [];
|
dev@407
|
61 }
|
dev@407
|
62
|
dev@407
|
63 private setupAnimatedPlayheads(): void {
|
dev@407
|
64 if (this.wavesChildren && this.mIsActive) {
|
dev@407
|
65 this.wavesChildren.forEach(component => {
|
dev@407
|
66 const cursor = new Waves.helpers.CursorLayer({
|
dev@407
|
67 height: component.height,
|
dev@407
|
68 color: this.colour,
|
dev@407
|
69 });
|
dev@407
|
70 cursor.currentPosition = this.player.getCurrentTime();
|
dev@407
|
71 this.removers.push(
|
dev@407
|
72 component.addLayer(cursor),
|
dev@407
|
73 this.renderLoop.addPlayingTask(currentTime => {
|
dev@407
|
74 cursor.currentPosition = currentTime;
|
dev@407
|
75 cursor.update();
|
dev@407
|
76 })
|
dev@407
|
77 )
|
dev@407
|
78 });
|
dev@407
|
79 }
|
dev@407
|
80 }
|
dev@407
|
81 }
|