export type BehaviorTreeStatus = "success" | "failure" | "running";
export type BlackboardValue = number | string | boolean | readonly unknown[] | Record<string, unknown> | null | undefined;
export interface BlackboardChange {
    readonly key: string;
    readonly value: BlackboardValue;
    readonly previous: BlackboardValue;
    readonly version: number;
}
export interface BehaviorTreeContext {
    readonly blackboard: Blackboard;
    readonly deltaSeconds: number;
    readonly depth: number;
}
export interface BehaviorTreeTickResult {
    readonly status: BehaviorTreeStatus;
    readonly tickCount: number;
    readonly trace: readonly string[];
    readonly blackboardVersion: number;
}
export declare abstract class BehaviorTreeNode {
    readonly name: string;
    status: BehaviorTreeStatus;
    running: boolean;
    constructor(name: string);
    abstract tick(context: BehaviorTreeContext): BehaviorTreeStatus;
    reset(): void;
}
export declare class Blackboard {
    readonly parent?: Blackboard | undefined;
    private readonly values;
    private readonly changes;
    private localVersion;
    constructor(parent?: Blackboard | undefined);
    get version(): number;
    set(key: string, value: BlackboardValue): void;
    get<T extends BlackboardValue = BlackboardValue>(key: string, fallback?: T): T;
    has(key: string): boolean;
    snapshot(): Record<string, BlackboardValue>;
    changeLog(): readonly BlackboardChange[];
}
export declare class BehaviorAction extends BehaviorTreeNode {
    private readonly action;
    constructor(name: string, action: (context: BehaviorTreeContext) => BehaviorTreeStatus);
    tick(context: BehaviorTreeContext): BehaviorTreeStatus;
}
export declare class BehaviorCondition extends BehaviorTreeNode {
    private readonly condition;
    constructor(name: string, condition: (context: BehaviorTreeContext) => boolean);
    tick(context: BehaviorTreeContext): BehaviorTreeStatus;
}
export declare class BehaviorSequence extends BehaviorTreeNode {
    readonly children: readonly BehaviorTreeNode[];
    private currentIndex;
    constructor(name: string, children: readonly BehaviorTreeNode[]);
    tick(context: BehaviorTreeContext): BehaviorTreeStatus;
    reset(): void;
}
export declare class BehaviorSelector extends BehaviorTreeNode {
    readonly children: readonly BehaviorTreeNode[];
    private currentIndex;
    constructor(name: string, children: readonly BehaviorTreeNode[]);
    tick(context: BehaviorTreeContext): BehaviorTreeStatus;
    reset(): void;
}
export declare class BehaviorTree {
    readonly root: BehaviorTreeNode;
    readonly blackboard: Blackboard;
    private tickCounter;
    private lastTrace;
    constructor(root: BehaviorTreeNode, blackboard?: Blackboard);
    tick(deltaSeconds: number): BehaviorTreeTickResult;
    reset(): void;
    private tickNode;
}
//# sourceMappingURL=BehaviorTree.d.ts.map