package master.flame.danmaku.controller;

import master.flame.danmaku.danmaku.model.AbsDisplayer;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
import master.flame.danmaku.danmaku.model.IDanmakus;
import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
import master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState;

public interface IDrawTask {

    public interface TaskListener {
        void onDanmakuAdd(BaseDanmaku baseDanmaku);

        void onDanmakuConfigChanged();

        void onDanmakuShown(BaseDanmaku baseDanmaku);

        void onDanmakusDrawingFinished();

        void ready();
    }

    void addDanmaku(BaseDanmaku baseDanmaku);

    void clearDanmakusOnScreen(long j);

    RenderingState draw(AbsDisplayer absDisplayer);

    BaseDanmaku getLastDanmaku();

    IDanmakus getVisibleDanmakusOnTime(long j);

    void invalidateDanmaku(BaseDanmaku baseDanmaku, boolean z);

    void prepare();

    void quit();

    void removeAllDanmakus();

    void removeAllLiveDanmakus();

    void requestClear();

    void requestHide();

    void reset();

    void seek(long j);

    void setParser(BaseDanmakuParser baseDanmakuParser);

    void start();
}