import { Entity } from "../entity";
import { Transform } from "../transform";
import IDrawable from "./idrawable";
export default abstract class Sprite extends Entity implements IDrawable {
    protected contextMutator: boolean;
    private region;
    private transform;
    private opacity;
    /**
     * Getter property for transform.
     * @returns The matrix transform applied to this sprite.
     */
    get Transform(): Transform;
    /**
     * Getter property for region.
     * @returns The drawing region this sprite is indicating. Sprites are clipped by their region.
     * @see [CanvasRenderingContext2D#clip](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip)
     */
    get Region(): (() => Path2D) | undefined;
    /**
     * Getter property for sprite opacity.
     * @returns Theopacity this sprite is drawn.
     */
    get Opacity(): number;
    private get needsTransform();
    private get hasRegion();
    private get hasOpacity();
    /**
     * Setter property for transform.
     */
    set Transform(transform: Transform);
    /**
     * Setter property for region.
     */
    set Region(region: (() => Path2D) | undefined);
    /**
     * Setter property for opacity.
     */
    set Opacity(opacity: number);
    /**
     * @inheritdoc
     */
    readonly draw: (context: CanvasRenderingContext2D, delay: number) => void;
    /**
     * Pre-clip tasks performed for canvas context reset.
     * this method is called automatically by engine if attached.
     * @param context Canvas context to perform reset on.
     * @param delay time in milliseconds passed from the previous frame call.
     */
    beforeClip(context: CanvasRenderingContext2D, delay: number): void;
    /**
     * Post-restore tasks performed for canvas context restore.
     * this method is called automatically by engine if attached.
     * @param context Canvas context to perform reset on.
     * @param delay time in milliseconds passed from the previous frame call.
     */
    afterRestore(context: CanvasRenderingContext2D, delay: number): void;
    /**
     * Post-children tasks performed for canvas context restore.
     * this method is called automatically by engine if attached.
     * @param context Canvas context to perform reset on.
     * @param delay time in milliseconds passed from the previous frame call.
     */
    afterChildren(context: CanvasRenderingContext2D, delay: number): void;
    /**
     * Render tasks performed for canvas context.
     * this method is called automatically by engine if attached.
     * @param context Canvas context to perform reset on.
     * @param delay time in milliseconds passed from the previous frame call.
     */
    abstract onDraw(context: CanvasRenderingContext2D, delay: number): void;
}
