@rbxts/flamework-tycoon
Version:
73 lines (72 loc) • 3.01 kB
TypeScript
import { Modding, OnStart } from "@flamework/core";
import { BaseComponent, Components } from "@flamework/components";
import { TycoonService } from "../TycoonService";
import { BaseTycoonComponent } from "../BaseTycoonComponent";
import { TycoonLogger } from "../TycoonLogger";
import { Constructor } from "@flamework/components/out/utility";
import { AbstractConstructor } from "@flamework/core/out/utility";
import { Signal } from "@rbxts/signals-tooling";
type InferBaseTycoonGenerics<T extends BaseTycoonItem<any, any, any>> = T extends BaseTycoonItem<infer A, infer I, infer D> ? [A, I, D] : never;
type AttrubutesGuard<T extends BaseTycoonItem<any, any, any>> = Required<{
[K in keyof InferBaseTycoonGenerics<T>[0]]: Modding.Generic<InferBaseTycoonGenerics<T>[0][K], "guard">;
}>;
export interface TycoonItemConfig {
tag?: string;
defaults?: Record<string, unknown>;
}
export interface TycoonItemMetadata<T extends BaseTycoonItem = BaseTycoonItem> {
AttributesGuard: AttrubutesGuard<T>;
InstanceGuard: Modding.Generic<InferBaseTycoonGenerics<T>[1], "guard">;
DataGuard: Modding.Generic<InferBaseTycoonGenerics<T>[2], "guard">;
}
export declare const DecoratedTycoonItems: Set<Constructor<BaseTycoonItem<any, any, any>>>;
/**
* Register a class as a tycoon item.
*
* @metadata reflect identifier flamework:implements flamework:parameters injectable macro
*/
export declare const TycoonItem: <T extends BaseTycoonItem>(config?: TycoonItemConfig, metadata?: Modding.Many<TycoonItemMetadata<T>>) => (ctor: AbstractConstructor<T>) => void;
interface Attributes {
Id?: string;
}
export declare abstract class BaseTycoonItem<A extends object = {}, I extends Instance = Instance, D extends {} = {}> extends BaseComponent<A & Attributes, I> implements OnStart {
readonly TycoonService: TycoonService;
private logger;
private components;
private _tycoon;
private __janitor;
private isLocked;
private baseParent;
private id;
private isDestroyed;
private dataGuard;
readonly LockChanged: Signal<(isLocked: boolean) => void>;
constructor(TycoonService: TycoonService, logger: TycoonLogger, components: Components);
onStart(): void;
onSetup(): void;
protected GetTycoon(): BaseTycoonComponent<{}, Instance, import("../../utility").TycoonData>;
private initEvents;
private validateData;
private initLockState;
private hasUnlockedTag;
private initId;
private fallbackPath;
private buildId;
protected mutateData(newData: D): void;
private clearData;
protected abstract generateData(): D;
GetId(): string;
GetData(): D;
TryGetData(): D | undefined;
IsLocked(): boolean;
protected onAppear(): Promise<void>;
protected onDisappear(): Promise<void>;
protected onDestroyed(): void;
Disappear(): void;
Appear(): void;
protected setParentWhenUnlocked(): void;
protected setParentWhenLocked(): void;
/** @hidden */
destroy(): void;
}
export {};