UNPKG

@rbxts/flamework-tycoon

Version:
73 lines (72 loc) 3.01 kB
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 {};