Skip to content

Commit

Permalink
feat(animations): implement get and set position in no op animation p…
Browse files Browse the repository at this point in the history
…layer
  • Loading branch information
literalpie committed Dec 3, 2020
1 parent 2c00466 commit e42348b
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 36 deletions.
8 changes: 4 additions & 4 deletions packages/animations/src/players/animation_group_player.ts
Expand Up @@ -149,12 +149,12 @@ export class AnimationGroupPlayer implements AnimationPlayer {

getPosition(): number {
const longestPlayer =
this.players.reduce((longestSoFar: AnimationPlayer|undefined, player: AnimationPlayer) => {
this.players.reduce((longestSoFar: AnimationPlayer|null, player: AnimationPlayer) => {
const newPlayerIsLongest =
longestSoFar === undefined || player.totalTime > longestSoFar!.totalTime;
longestSoFar === null || player.totalTime > longestSoFar.totalTime;
return newPlayerIsLongest ? player : longestSoFar;
}, undefined);
return longestPlayer != undefined ? longestPlayer.getPosition() / longestPlayer.totalTime : 0;
}, null);
return longestPlayer != null ? longestPlayer.getPosition() : 0;
}

beforeDestroy(): void {
Expand Down
7 changes: 5 additions & 2 deletions packages/animations/src/players/animation_player.ts
Expand Up @@ -124,6 +124,7 @@ export class NoopAnimationPlayer implements AnimationPlayer {
private _started = false;
private _destroyed = false;
private _finished = false;
private _position = 0;
public parentPlayer: AnimationPlayer|null = null;
public readonly totalTime: number;
constructor(duration: number = 0, delay: number = 0) {
Expand Down Expand Up @@ -184,9 +185,11 @@ export class NoopAnimationPlayer implements AnimationPlayer {
}
}
reset(): void {}
setPosition(position: number): void {}
setPosition(position: number): void {
this._position = this.totalTime ? position * this.totalTime : 1;
}
getPosition(): number {
return 0;
return this.totalTime ? this._position / this.totalTime : 1;
}

/** @internal */
Expand Down
57 changes: 28 additions & 29 deletions packages/animations/test/animation_group_player_spec.ts
Expand Up @@ -9,34 +9,33 @@ import {fakeAsync} from '@angular/core/testing';
import {NoopAnimationPlayer} from '../src/animations';
import {AnimationGroupPlayer} from '../src/players/animation_group_player';

{
describe('AnimationGroupPlayer', function() {
it('should getPosition of an empty group', fakeAsync(() => {
const players: NoopAnimationPlayer[] = [];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0);
}));

it('should getPosition of a single player in a group', fakeAsync(() => {
const player = new NoopAnimationPlayer(5, 5);
player.getPosition = () => 2;
const players = [player];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0.2);
}));
describe('AnimationGroupPlayer', () => {
it('should getPosition of an empty group', fakeAsync(() => {
const players: NoopAnimationPlayer[] = [];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0);
}));

it('should getPosition based on the longest player in the group', fakeAsync(() => {
const longestPlayer = new NoopAnimationPlayer(5, 5);
longestPlayer.getPosition = () => 2;
const players = [
new NoopAnimationPlayer(1, 4),
new NoopAnimationPlayer(4, 1),
new NoopAnimationPlayer(7, 0),
longestPlayer,
new NoopAnimationPlayer(1, 1),
];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0.2);
}));
});
}
it('should getPosition of a single player in a group', fakeAsync(() => {
const player = new NoopAnimationPlayer(5, 5);
player.setPosition(0.2);
const players = [player];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0.2);
}));

it('should getPosition based on the longest player in the group', fakeAsync(() => {
const longestPlayer = new NoopAnimationPlayer(5, 5);
longestPlayer.setPosition(0.2);
const players = [
new NoopAnimationPlayer(1, 4),
new NoopAnimationPlayer(4, 1),
new NoopAnimationPlayer(7, 0),
longestPlayer,
new NoopAnimationPlayer(1, 1),
];
const groupPlayer = new AnimationGroupPlayer(players);
expect(groupPlayer.getPosition()).toBe(0.2);
}));
});
Expand Up @@ -111,7 +111,7 @@ export class RendererAnimationPlayer implements AnimationPlayer {
}

getPosition(): number {
return this._renderer.engine.players[+this.id].getPosition();
return this._renderer.engine.players[+this.id]?.getPosition() ?? 0;
}

public totalTime = 0;
Expand Down

0 comments on commit e42348b

Please sign in to comment.