import { HZEngineCore, Platform } from "../index.js"; import { Storage } from "../storage/index.js"; export declare class UI { _core: HZEngineCore; constructor(_core: HZEngineCore); private _initUI; private _cleanUI; resetUI(): void; private accessor _layerList; get layerList(): Map>; addLayer(name: string, z_index: number): void; getLayer(name: string): UI.Layer | undefined; private _viewClassMap; registerView>(name: string, cls: UI.ViewClass): void; private accessor _nextViewId; private accessor _viewMap; getView(id: number): UI.View, PlatformType> | null; createView>(name: string, layer: string, prop: PropType, isSave: boolean): UI.View; updateView>(viewInstance: UI.View, new_prop: PropType): void; destroyView(viewInstance: UI.View, PlatformType>): void; /**由調用者提供id,創建一個View,不會處理isSave,也不會更新viewMap */ private _produceViewWithId; private accessor _routerMap; getRouter(tag: string): UI.Router | undefined; addRouter(tag: string, layer: string, isSave?: boolean): UI.Router; getScreenSize(): { width: number; height: number; }; /** * 根据 BasicUniversalProp 计算屏幕上的位置 * @param prop 包含 BasicUniversalProp 的 prop * @param size (可选)图像的尺寸,若不指定,返回的anchor坐标和origin坐标一样 * @returns */ calcPosition(prop: UI.BasicUniversalProp, size?: UI.Size): { /** 锚点(算上偏移)的屏幕位置 */ anchor: UI.Coordinate; /** 图像左上角的屏幕位置 */ origin: UI.Coordinate; }; } export declare namespace UI { type ViewClass, PlatformType extends Platform> = { new (layer: string, core: HZEngineCore): View; }; abstract class View, PlatformType extends Platform = any> { layer: string; core: HZEngineCore; id: number | null; name: string | null; isSave: boolean; private _prop; get prop(): PropType | null; private set prop(value); constructor(layer: string, core: HZEngineCore); create(prop: PropType): void; protected abstract onCreate(prop: PropType): void; commit(prop: PropType): void; protected abstract onCommit(prop: PropType): void; destroy(): void; protected abstract onDestroy(): void; serialize(): View.Serialized; } namespace View { interface Serialized { name: string; layer: string; prop: Storage.Saveable; } } interface BasicUniversalProp { alpha?: number; xalign?: number; yalign?: number; xanchor?: number; yanchor?: number; xoffset?: number; yoffset?: number; } interface Message { who: string; what: string; } abstract class MessageView extends View { } interface MenuItemData { text: string; position: [path: string, index: number]; enable_js_expression?: string; } type MenuViewProp = { itemList: MenuItemData[]; }; abstract class MenuView extends View { } type Coordinate = { x: number; y: number; }; type Size = { width: number; height: number; }; /** * 立绘/道具等显示在`fg`layer上的图片View */ type FgImgViewProp = { imgPath: string; offset: Coordinate; size: Size; }; abstract class FgImgView extends View { } /** * cg等显示在`bg`layer上的图片View */ type BgImgViewProp = { imgPath: string; offset: Coordinate; size: Size; }; abstract class BgImgView extends View { } class Layer { _core: HZEngineCore; name: string; z_index: number; widgetFactory: ReturnType; constructor(_core: HZEngineCore, name: string, z_index: number); destroy(): void; } namespace Layer { } class Router { private _ui; tag: string; layer: string; isSave: boolean; constructor(_ui: UI, tag: string, layer: string, isSave?: boolean); serialize(): Router.Serialized; defaultRouteStrategy: Router.RouteStrategy; static deserialize(ui: UI, data: Router.Serialized): Router; viewStack: [view_name: string, prop: Storage.Saveable][]; get length(): number; activeViewInstance: View, PlatformType> | null; push>(view_name: string, prop: T, strategy?: Router.RouteStrategy): void; pop>(back_prop?: T, strategy?: Router.RouteStrategy): void; replace>(view_name: string, prop: T, strategy?: Router.RouteStrategy): void; update>(prop: T, strategy?: Router.RouteStrategy): void; clear(strategy?: Router.RouteStrategy): void; } namespace Router { interface Serialized { tag: string; layer: string; isSave: boolean; viewStack: [view_name: string, prop: Storage.Saveable][]; activeViewId: number | null; } interface RouteStrategy = Storage.Saveable, PlatformType extends Platform = any> { destroy?(viewInstance: View, ui: UI): void; create?(viewName: string, layer: string, prop: PropType, ui: UI, isSave: boolean): View, PlatformType>; update?(viewInstance: View, prop: PropType, ui: UI): void; } } }