UNPKG

@kitten-science/kitten-scientists

Version:

Add-on for the wonderful incremental browser game: https://kittensgame.com/web/

297 lines 13.1 kB
import type { Maybe } from "@oliversalzburg/js-utils/data/nil.js"; import type { KittenScientists } from "../KittenScientists.js"; import type { Building, BuildingMeta } from "./buildings.js"; import type { Game } from "./game.js"; import type { ReligionUpgrade, TranscendenceUpgrade, TranscendenceUpgradeInfo, ZiggurathUpgrade, ZiggurathUpgradeInfo } from "./religion.js"; import type { TechInfo } from "./science.js"; import type { SpaceBuilding } from "./space.js"; import type { ChronoForgeUpgrade, VoidSpaceUpgrade, VoidSpaceUpgradeInfo } from "./time.js"; import type { UpgradeInfo } from "./workshop.js"; export declare const Seasons: readonly ["autumn", "spring", "summer", "winter"]; export type Season = (typeof Seasons)[number]; export declare const Cycles: readonly ["charon", "umbra", "yarn", "helios", "cath", "redmoon", "dune", "piscine", "terminus", "kairo"]; export type Cycle = (typeof Cycles)[number]; export declare const ResourcesCraftable: readonly ["alloy", "beam", "bloodstone", "blueprint", "compedium", "concrate", "eludium", "gear", "kerosene", "manuscript", "megalith", "parchment", "plate", "scaffold", "ship", "slab", "steel", "tanker", "tMythril", "thorium", "wood"]; export type ResourceCraftable = (typeof ResourcesCraftable)[number]; export declare const Resources: readonly ["alloy", "beam", "bloodstone", "blueprint", "compedium", "concrate", "eludium", "gear", "kerosene", "manuscript", "megalith", "parchment", "plate", "scaffold", "ship", "slab", "steel", "tanker", "tMythril", "thorium", "wood", "alicorn", "antimatter", "blackcoin", "burnedParagon", "catnip", "coal", "culture", "elderBox", "faith", "furs", "gflops", "gold", "hashrates", "iron", "ivory", "karma", "kittens", "manpower", "minerals", "necrocorn", "oil", "paragon", "relic", "science", "sorrow", "spice", "starchart", "tears", "temporalFlux", "timeCrystal", "titanium", "unicorns", "unobtainium", "uranium", "void", "wrappingPaper", "zebras"]; export type Resource = (typeof Resources)[number]; export declare const TabIds: readonly ["Bonfire", "Religion", "Science", "Space", "Time", "Trade", "Village", "Workshop"]; export type TabId = (typeof TabIds)[number]; export declare const Jobs: readonly ["any", "engineer", "farmer", "geologist", "hunter", "miner", "priest", "scholar", "woodcutter"]; export type Job = (typeof Jobs)[number]; export declare const Traits: readonly ["chemist", "engineer", "manager", "metallurgist", "merchant", "none", "scientist", "wise"]; export type Trait = (typeof Traits)[number]; export type AllBuildings = Building | ChronoForgeUpgrade | ReligionUpgrade | SpaceBuilding | TranscendenceUpgrade | VoidSpaceUpgrade | ZiggurathUpgrade; /** * A combination of a resource and an amount. */ export type Price = { name: Resource; val: number; }; export type Panel = { children: Array<BuildButton>; visible: boolean; }; export type Control = {}; export type Button<TModel extends ButtonModel = ButtonModel, TController extends ButtonController = ButtonController> = Control & { model: TModel | null; controller: TController; game: Game; domNode: HTMLDivElement; container: unknown; tab: string | null; buttonTitle: string | null; new (opts: unknown, game: Game): Button; setOpts: (opts: unknown) => void; init: () => void; updateVisible: () => void; updateEnabled: () => void; update: () => void; render: (btnContainer: unknown) => void; animate: () => void; onClick: (event: MouseEvent) => void; onKeyPress: (event: KeyboardEvent) => void; afterRender: () => void; addLink: (linkModel: unknown) => void; addLinkList: (links: Array<unknown>) => void; }; /** * Not necessarily a button, but a KG UI element. */ export type BuildButton<T = string, TModel extends ButtonModel = ButtonModel, TController extends ButtonController = BuildingBtnController | BuildingNotStackableBtnController | BuildingStackableBtnController | ButtonController | ButtonModernController | EmbassyButtonController | FixCryochamberBtnController | PolicyBtnController | RefineTearsBtnController | ShatterTCBtnController | TechButtonController | TransformBtnController> = Button<TModel, TController> & { children: Array<BuildButton>; controller: TController; domNode: HTMLDivElement; id: T; model: TModel | null; onClick: () => void; render: () => void; }; export type GameTab = { buttons: Array<BuildButton>; children: Array<BuildButton>; render: () => void; tabId: TabId; visible: boolean; }; export type Kitten = { age: number; color: number; engineerSpeciality: ResourceCraftable | null; exp: number; isAdopted: boolean; isLeader: boolean; isSenator: boolean; job: Job; name: string; rank: number; rarity: number; skills: { priest: number; }; surname: string; trait: { name: Trait; title: string; }; variety: number; }; export type Challenge = "1000Years" | "anarchy" | "atheism" | "energy" | "ironWill" | "pacifism" | "postApocalypse" | "winterIsComing"; export type ButtonControllerOptions = Record<string, unknown>; export type ButtonModelDefaults = { name: string; description: string; visible: boolean; enabled: boolean; handler: null; prices: Array<Price> | null; priceRatio: null; twoRow: null; refundPercentage: number; highlightUnavailable: boolean; resourceIsLimited: string; multiplyEffects: boolean; }; export type ButtonModel = { options: ButtonControllerOptions; } & ButtonModelDefaults; export type ButtonController = { new (game: Game, controllerOpts?: ButtonControllerOptions): ButtonController; fetchModel: (options: ButtonControllerOptions) => ButtonModel; fetchExtendedModel: (model: ButtonModel) => void; initModel: (options: ButtonControllerOptions) => ButtonModel; defaults: () => ButtonModelDefaults; createPriceLineModel: (model: ButtonModel, price: unknown) => unknown; hasResources: (model: ButtonModel, prices?: Array<unknown>) => boolean; /** * Updates the `enabled` field in the model of the button. * @param model The button this controller is associated with. */ updateEnabled: (model: ButtonModel) => void; /** * Does nothing by default. Can invoke custom handler. * @param model The button this controller is associated with. */ updateVisible: (model: ButtonModel) => void; getPrices: (model: ButtonModel) => Array<Price>; getName: (model: ButtonModel) => string; getDescription: (model: ButtonModel) => string; /** @deprecated */ adjustPrice: (model: ButtonModel, ratio: number) => void; /** @deprecated */ rejustPrice: (model: ButtonModel, ratio: number) => void; payPrice: (model: ButtonModel) => void; clickHandler: (model: ButtonModel, event: Event) => void; buyItem: (model: ButtonModel | null, event: Event | null, callback: (success: boolean) => void) => void; refund: (model: ButtonModel) => void; }; export type ButtonModernModel = { metadata: BuildingMeta | TechInfo | TranscendenceUpgradeInfo | UpgradeInfo | VoidSpaceUpgradeInfo | ZiggurathUpgradeInfo; } & ButtonModel; export type ButtonModernController = ButtonController & { new (game: Game): ButtonModernController; initModel: (options: ButtonControllerOptions) => ButtonModernModel; fetchModel: (options: ButtonControllerOptions) => ButtonModernModel; getMetadata: (model: ButtonModernModel) => BuildingMeta | null; getEffects: (model: ButtonModernModel) => unknown; getTotalEffects: (model: ButtonModernModel) => unknown; getNextEffectValue: (model: ButtonModernModel, effectName: string) => unknown; getFlavor: (model: ButtonModernModel) => string; hasSellLink: (model: ButtonModernModel) => boolean; metadataHasChanged: (model: ButtonModernModel) => void; off: (model: ButtonModernModel, amt: number) => void; offAll: (model: ButtonModernModel) => void; on: (model: ButtonModernModel, amt: number) => void; onAll: (model: ButtonModernModel) => void; sell: (event: Event, model: ButtonModernModel) => void; sellInternal: (model: ButtonModernModel, end: number) => void; decrementValue: (model: ButtonModernModel) => void; updateVisible: (model: ButtonModernModel) => void; handleTogglableOnOffClick: (model: ButtonModernModel) => void; handleToggleAutomationLinkClick: (model: ButtonModernModel) => void; }; export type BuildingBtnController = ButtonModernController & { new (game: Game): BuildingBtnController; }; export type BuildingNotStackableBtnController = BuildingBtnController & { new (game: Game): BuildingNotStackableBtnController; }; export type BuildingStackableBtnController = BuildingBtnController & { new (game: Game): BuildingStackableBtnController; _buyItem_step2: (model: ButtonModel, event: Event, callback: (success: boolean) => void) => void; build: (model: ButtonModel, maxBld: number) => void; incrementValue: (model: ButtonModel) => void; }; export type EmbassyButtonController = BuildingStackableBtnController & { new (game: Game): EmbassyButtonController; }; export type FixCryochamberBtnController = ButtonModernController & { new (game: Game): EmbassyButtonController; doFixCryochamber: (model: ButtonModernModel) => boolean; }; export type GatherCatnipButtonController = ButtonModernController & { new (game: Game): GatherCatnipButtonController; }; export type PolicyBtnController = BuildingNotStackableBtnController & { new (game: Game): PolicyBtnController; shouldBeBough: (model: ButtonModel, game: Game) => boolean; }; export type RefineTearsBtnController = ButtonModernController & { new (game: Game): ButtonModernController; _newLink: (model: ButtonModel, divider: number) => Link; buyItem: (model: ButtonModel | null, event: Event | null, callback: (success: boolean) => void, count: number) => void; refine: () => void; }; export type ShatterTCBtnController = ButtonModernController & { new (game: Game): ButtonModernController; doShatterAmt: (model: ButtonModel, amt: number) => void; }; export type TechButtonController = BuildingNotStackableBtnController & { new (game: Game): TechButtonController; }; export type Link = { visible: boolean; title: string; tooltip: string; getDisplayValueExt: () => string; handler: (event: Event, callback: (success: boolean) => void) => void; }; export type TransformBtnController<TOptions = Record<string, unknown>> = ButtonModernController & { new (game: Game, options: TOptions): TransformBtnController<TOptions>; _transform: (model: ButtonModel, amt: number) => boolean; _newLink: (model: ButtonModel, divider: number) => Link; controllerOpts: TOptions; }; export type ClassList = { diplomacy: { ui: { EmbassyButtonController: EmbassyButtonController; }; }; game: { ui: { GatherCatnipButtonController: GatherCatnipButtonController; }; }; ui: { BuildingBtnController: BuildingBtnController; ButtonController: ButtonController; ButtonModernController: ButtonModernController; BuildingStackableBtnController: BuildingStackableBtnController; PolicyBtnController: PolicyBtnController; religion: { RefineTearsBtnController: RefineTearsBtnController; TransformBtnController: TransformBtnController; }; time: { FixCryochamberBtnController: FixCryochamberBtnController; ShatterTCBtnController: ShatterTCBtnController; }; }; }; export type ComInterface = { nuclearunicorn: { game: { ui: { TechButtonController: TechButtonController; }; }; }; }; export type I18nEngine = (key: string, args?: Array<number | string>) => string; declare global { const classes: ClassList; const com: ComInterface; const game: Game; let unsafeWindow: Window | undefined; interface Window { $: JQuery; $I?: Maybe<I18nEngine>; dojo: { clone: <T>(subject: T) => T; subscribe: <TEvent extends string>(event: TEvent, handler: (...args: Array<any>) => void) => [TEvent, number]; unsubscribe: (handle: [string, number]) => void; }; game?: Maybe<Game>; gamePage?: Maybe<Game>; kittenScientists?: KittenScientists; LZString: { compressToBase64: (input: string) => string; compressToUTF16: (input: string) => string; decompressFromBase64: (input: string) => string; decompressFromUTF16: (input: string) => string; }; } } export * from "./buildings.js"; export * from "./game.js"; export * from "./releases.js"; export * from "./religion.js"; export * from "./save.js"; export * from "./science.js"; export * from "./space.js"; export * from "./time.js"; export * from "./trade.js"; export * from "./workshop.js"; //# sourceMappingURL=index.d.ts.map