// Generated by dts-bundle v0.7.3
// Dependencies for this module:
//   ../eventemitter3

import { EventEmitter } from "eventemitter3";



/**
     * A Simple Timer class extending [EventEmitter3](https://github.com/primus/eventemitter3)
     *
     * Auther: Shen Yiming(soimy@163.com)
     *
     * Repo: https://github.com/soimy/pixi-timer
     *
     * @export
     * @class Timer
     * @extends {EventEmitter}
     */
export class Timer extends EventEmitter {
        /**
             * The global TimerManager which is default to all newly created timers.
             *
             * @static
             * @type {TimerManager}
             * @memberof Timer
             */
        static readonly timerManager: TimerManager;
        /**
             * The time until timer triggered.
             *
             * @type {number}
             * @memberof Timer
             */
        time: number;
        /**
             * The activation status of timer.
             *
             * @type {boolean}
             * @memberof Timer
             */
        active: boolean;
        /**
             * Status indicator: whether this timer is ended.
             *
             * @type {boolean}
             * @memberof Timer
             */
        isEnded: boolean;
        /**
             * Status indicator: whether this timer is started.
             *
             * @type {boolean}
             * @memberof Timer
             */
        isStarted: boolean;
        /**
             * Delay in ms before timer starts
             *
             * @type {number}
             * @memberof Timer
             */
        delay: number;
        /**
             * The repeat count before timer stop
             *
             * @type {number}
             * @memberof Timer
             */
        repeat: number;
        /**
             * Whether this timer loops forever
             *
             * @type {boolean}
             * @memberof Timer
             */
        loop: boolean;
        /**
             * Whether this timer is expired and should be removed from timerManager.
             *
             * @type {boolean}
             * @memberof Timer
             */
        expire: boolean;
        /**
             * The timerManager this timer is assigned to.
             *
             * @type {(TimerManager | null)}
             * @memberof Timer
             */
        timerManager: TimerManager | null;
        /**
             * Creates an instance of Timer.
             *
             * Newly created timers will be default to be added to the global timerManager.
             * Can manually create TimerManager and assign timers.
             *
             * @param {number} [time=1] The time is ms before timer end or repedeated.
             * @memberof Timer
             */
        constructor(time?: number);
        /**
             * Remove this timer from it's timerManager.
             *
             * @returns {Timer} Return self for chainable method.
             * @memberof Timer
             */
        remove(): Timer;
        /**
             * Start timer from it's current time.
             *
             * A `started` event will be emitted.
             *
             * @returns {Timer} Return self for chainable method.
             * @memberof Timer
             */
        start(): Timer;
        /**
             * Stop timer, current time stop updated.
             *
             * A `ended` event will be emitted.
             *
             * @returns {Timer} Return self for chainable method.
             * @memberof Timer
             */
        stop(): Timer;
        /**
             * Rest timer to it's initial status.
             *
             * @returns {Timer} Return self for chainable method.
             * @memberof Timer
             */
        reset(): Timer;
        /**
             * Increment timer's time. Should be put in main logic loop.
             *
             * Using `TimerManager.update()` method instead is recommended.
             *
             * @param {number} delta The amount of increment in ms.
             * @returns {void}
             * @memberof Timer
             */
        update(delta: number): void;
}

/**
     * Manager class for Timers
     *
     * @export
     * @class TimerManager
     */
export class TimerManager {
        timers: Timer[];
        /**
             * Creates an instance of TimerManager.
             * @memberof TimerManager
             */
        constructor();
        /**
             * Increment all managed timers' time.
             *
             * Better to use this method instead of `timers.update()` for centralized control.
             *
             * @param {number} [delta] The increment amount in ms. Omit to use internal deltams.
             * @memberof TimerManager
             */
        update(delta?: number): void;
        /**
             * Remove timer from this timerManager.
             *
             * @param {Timer} timer The timer to be removed.
             * @memberof TimerManager
             */
        removeTimer(timer: Timer): void;
        /**
             * Add timer to this timerManager, and remove timer from it's original timerManager.
             *
             * @param {Timer} timer The timer to be added.
             * @memberof TimerManager
             */
        addTimer(timer: Timer): void;
        /**
             * Create a new timer under this timerManager.
             *
             * @param {number} time time of newly created timer.
             * @returns {Timer} The newly created timer.
             * @memberof TimerManager
             */
        createTimer(time: number): Timer;
}

