import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSSecureCoding } from "../Foundation/NSSecureCoding.js";
import type { _GKComponent } from "./GKComponent.js";
export declare class _GKEntity extends _NSObject {
    static alloc(): _GKEntity;
    static new(): _GKEntity;
    /** Creates a new entity ready to have components added to it. */
    static entity(): _GKEntity;
    /** Creates a new entity ready to have components added to it. */
    init(): _GKEntity;
    /**
     * General update loop for this entity, which also updates all components in this entity that are not currently in a dedicated component system. Per-entity component updates is a simpler and less flexible option to using per-component updates, however both can not be allowed to occur at the same time for a component. Thus components that are added to dedicated component systems will not be updated here as they have opted for the more powerful feature of per-component systems. Update those components via their system instead. @see GKComponentSystem @param seconds elapsed time, in seconds, since last frame
     */
    updateWithDeltaTime$(seconds: number): void;
    /**
     * Adds a component to this entity. If a component of the same class already exists it is overwritten with the new component. @param component the component to be added @see GKComponent
     */
    addComponent$(component: _GKComponent): void;
    removeComponentForClass$(componentClass: NobjcObject): void;
    componentForClass$(componentClass: NobjcObject): _GKComponent | null;
    /**
     * Access the current set of components as an array. Note: this is not the internal array of components, but rather a newly created array of the current component mapping.
     */
    components(): _NSArray;
}
export interface _GKEntity extends _NSCopying, _NSSecureCoding {
}
