@rbxts/flamework-tycoon
Version:
72 lines (71 loc) • 3 kB
TypeScript
/// <reference types="@rbxts/compiler-types" />
/// <reference types="@rbxts/compiler-types" />
/// <reference types="@rbxts/types" />
/// <reference types="@rbxts/compiler-types" />
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";
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;
}
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<{}, Instance, {}>>(config?: TycoonItemConfig, metadata?: Modding.Many<TycoonItemMetadata<T>>) => (ctor: AbstractConstructor<T>) => void;
interface Attributes {
Id?: string;
}
export declare abstract class BaseTycoonItem<A extends Attributes = {}, I extends Instance = Instance, D extends {} = {}> extends BaseComponent<A, I> implements OnStart {
readonly TycoonService: TycoonService;
private logger;
private components;
private _tycoon;
private __janitor;
private isLocked;
private baseParent;
private id;
private isDestroyed;
private dataGuard;
constructor(TycoonService: TycoonService, logger: TycoonLogger, components: Components);
onStart(): void;
onSetup(): void;
protected GetTycoon(): BaseTycoonComponent<{}, Model, import("../../utility").ITycoonData>;
private initEvents;
private validateData;
private initLockState;
private haveLockTag;
private initId;
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 {};