Skip to content

Commit

Permalink
feat: define commander base class
Browse files Browse the repository at this point in the history
  • Loading branch information
vortesnail committed Mar 9, 2022
1 parent f114141 commit b6ff4ad
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 7 deletions.
26 changes: 26 additions & 0 deletions packages/qier-player-danmaku/src/main/commander/base.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { EventEmitter } from '../utils/eventmitter';
import { Danma, Commander } from '../types';
import Track from '../track';

export default abstract class Base<T extends Danma> extends EventEmitter {
protected trackHeight: number;

protected duration: number;

protected trackCnt: number;

protected tracks: Track<T>[] = [];

waitingQueue: T[] = [];

constructor(config: Commander) {
super();
this.trackHeight = config.trackHeight;
this.duration = config.duration;
this.trackCnt = config.trackCnt;

for (let i = 0; i < config.trackCnt; ++i) {
this.tracks[i] = new Track();
}
}
}
3 changes: 3 additions & 0 deletions packages/qier-player-danmaku/src/main/commander/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import RollingCommander from './rolling';

export { RollingCommander };
7 changes: 7 additions & 0 deletions packages/qier-player-danmaku/src/main/commander/rolling.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class RollingCommander {
constructor() {
console.log(1111);
}
}

export default RollingCommander;
14 changes: 8 additions & 6 deletions packages/qier-player-danmaku/src/main/danmaku.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { EventEmitter } from './utils/eventmitter';
import { addDispose, dispose, Dispose } from './utils/dispose';
import { RollingCommander } from './commander';
import { getEle } from './utils/dom';
import { DanmakuOptions } from './types';

const defaultOpts: DanmakuOptions = {
tracks: 4,
tracksCnt: 4,
trackHeight: 20 * 1.5,
fontSize: 20,
duration: 5000,
};

type DanmakuOptionsInit = Partial<DanmakuOptions>;
Expand All @@ -23,15 +25,15 @@ export class Danmaku extends EventEmitter implements Dispose {

this.el = getEle(container);

if (!this.el) throw new Error('The container element you are currently passing in is not an HTML element');
if (!this.el) {
console.error('The container element you are currently passing in is not an HTML element.');
return;
}

// pointer-events 避免容器阻碍下层点击
this.el.style.pointerEvents = 'none';

// TODO test
const child = document.createElement('div');
child.innerHTML = 'Hello i am danma';
this.el.appendChild(child);
const rollingCommander = new RollingCommander();
}

dispose(): void {
Expand Down
37 changes: 37 additions & 0 deletions packages/qier-player-danmaku/src/main/track.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Danma } from './types';

interface TrackForEachHandler<T extends Danma> {
(track: T, index: number, array: T[]): void;
}

export default class Track<T extends Danma> {
danmas: T[] = [];

offset = 0;

forEach(handler: TrackForEachHandler<T>) {
for (let i = 0; i < this.danmas.length; ++i) {
handler(this.danmas[i], i, this.danmas);
}
}

push(...items: T[]) {
this.danmas.push(...items);
}

removeTop() {
this.danmas.shift();
}

remove(index: number) {
if (index < 0 || index >= this.danmas.length) {
return;
}
this.danmas.splice(index, 1);
}

reset() {
this.danmas = [];
this.offset = 0;
}
}
13 changes: 12 additions & 1 deletion packages/qier-player-danmaku/src/main/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
export interface DanmakuOptions {
tracks: number;
tracksCnt: number;
trackHeight: number;
fontSize: number;
duration: number;
}

export interface Danma {
text: string;
}

export interface Commander {
trackHeight: number;
duration: number;
trackCnt: number;
}

0 comments on commit b6ff4ad

Please sign in to comment.