import { Transform } from '../structs/Transform';
import { GameObjectDestroyEvent } from '../events/gameobject/GameObjectDestroyEvent';
import { TickEvent } from '../events/TickEvent';
import { GameObjectSpawnEvent } from '../events/gameobject/GameObjectSpawnEvent';
/**
 * Represents plain GameObject
 * @group Game Objects
 * @author Tymon Woźniak
 * @class
 */
export declare class GameObject {
    /**
     * The unique id of this game object.
     * @property
     */
    readonly id: string;
    /**
     * Defines is this game object enabled in game.
     * @property
     */
    enabled: boolean;
    /**
     * The name of this game object.
     * @property
     */
    name: string | undefined;
    /**
     * The tag of this game object.
     * @property
     */
    tag: string | undefined;
    /**
     * The order in game objects hierarchy.
     * @property
     */
    sortingOrder: number;
    /**
     * The Transform - position, width, height and rotation of this game object.
     * @property
     */
    transform: Transform;
    /**
     * Constructs new GameObject.
     * @constructor
     */
    constructor();
    /**
     * Invoked at game object spawn.
     * @method
     * @param event - {@link GameObjectSpawnEvent}
     * @virtual
     * @example
     * Start(event){
     *  console.log('I have been spawned!');
     * }
     */
    Start(event: GameObjectSpawnEvent): void;
    /**
     * Invoked at game object destroy.
     * @method
     * @param event - {@link GameObjectDestroyEvent}
     * @virtual
     * @example
     * Destroy(event){
     *  console.log('I have been destroyed!');
     * }
     */
    Destroy(event: GameObjectDestroyEvent): void;
    /**
     * Invoked at every frame.
     * @method
     * @param event - {@link TickEvent}
     * @virtual
     * @example
     * Update(event){
     *  this.transform.translate(new JSGL.Vector2(1, 0).multiply(event.deltaTime));
     * }
     */
    Update(event: TickEvent): void;
    /**
     * Invoked at last update in every frame.
     * @method
     * @param event - {@link TickEvent}
     * @virtual
     * @example
     * Update(event){
     *  this.transform.translate(new JSGL.Vector2(1, 0).multiply(event.deltaTime));
     * }
     */
    FixedUpdate(event: TickEvent): void;
}
