hzengine-core
Version:
An Visual Novel Engine for Zepp OS
168 lines (167 loc) • 6.88 kB
TypeScript
import { HZEngineCore, Platform } from "../index.js";
import { Storage } from "../storage/index.js";
export declare class UI<PlatformType extends Platform = any> {
_core: HZEngineCore<PlatformType>;
constructor(_core: HZEngineCore<PlatformType>);
private _initUI;
private _cleanUI;
resetUI(): void;
private accessor _layerList;
get layerList(): Map<string, UI.Layer<PlatformType>>;
addLayer(name: string, z_index: number): void;
getLayer(name: string): UI.Layer<PlatformType> | undefined;
private _viewClassMap;
registerView<PropType extends Storage.Saveable<PropType>>(name: string, cls: UI.ViewClass<PropType, PlatformType>): void;
private accessor _nextViewId;
private accessor _viewMap;
getView(id: number): UI.View<Storage.Saveable<unknown>, PlatformType> | null;
createView<PropType extends Storage.Saveable<PropType>>(name: string, layer: string, prop: PropType, isSave: boolean): UI.View<PropType, PlatformType>;
updateView<PropType extends Storage.Saveable<PropType>>(viewInstance: UI.View<PropType, PlatformType>, new_prop: PropType): void;
destroyView(viewInstance: UI.View<Storage.Saveable<unknown>, PlatformType>): void;
/**由調用者提供id,創建一個View,不會處理isSave,也不會更新viewMap */
private _produceViewWithId;
private accessor _routerMap;
getRouter(tag: string): UI.Router<PlatformType> | undefined;
addRouter(tag: string, layer: string, isSave?: boolean): UI.Router<PlatformType>;
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<PropType extends Storage.Saveable<PropType>, PlatformType extends Platform> = {
new (layer: string, core: HZEngineCore<PlatformType>): View<PropType, PlatformType>;
};
abstract class View<PropType extends Storage.Saveable<PropType>, PlatformType extends Platform = any> {
layer: string;
core: HZEngineCore<PlatformType>;
id: number | null;
name: string | null;
isSave: boolean;
private _prop;
get prop(): PropType | null;
private set prop(value);
constructor(layer: string, core: HZEngineCore<PlatformType>);
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<unknown>;
}
}
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<PlatformType extends Platform> extends View<Message, PlatformType> {
}
interface MenuItemData {
text: string;
position: [path: string, index: number];
enable_js_expression?: string;
}
type MenuViewProp = {
itemList: MenuItemData[];
};
abstract class MenuView<PlatformType extends Platform> extends View<MenuViewProp, PlatformType> {
}
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<PlatformType extends Platform> extends View<FgImgViewProp, PlatformType> {
}
/**
* cg等显示在`bg`layer上的图片View
*/
type BgImgViewProp = {
imgPath: string;
offset: Coordinate;
size: Size;
};
abstract class BgImgView<PlatformType extends Platform> extends View<FgImgViewProp, PlatformType> {
}
class Layer<PlatformType extends Platform> {
_core: HZEngineCore<PlatformType>;
name: string;
z_index: number;
widgetFactory: ReturnType<PlatformType["createUILayer"]>;
constructor(_core: HZEngineCore<PlatformType>, name: string, z_index: number);
destroy(): void;
}
namespace Layer {
}
class Router<PlatformType extends Platform> {
private _ui;
tag: string;
layer: string;
isSave: boolean;
constructor(_ui: UI<PlatformType>, tag: string, layer: string, isSave?: boolean);
serialize(): Router.Serialized;
defaultRouteStrategy: Router.RouteStrategy;
static deserialize<PlatformType extends Platform>(ui: UI<PlatformType>, data: Router.Serialized): Router<PlatformType>;
viewStack: [view_name: string, prop: Storage.Saveable<unknown>][];
get length(): number;
activeViewInstance: View<Storage.Saveable<unknown>, PlatformType> | null;
push<T extends Storage.Saveable<T>>(view_name: string, prop: T, strategy?: Router.RouteStrategy): void;
pop<T extends Storage.Saveable<T>>(back_prop?: T, strategy?: Router.RouteStrategy): void;
replace<T extends Storage.Saveable<T>>(view_name: string, prop: T, strategy?: Router.RouteStrategy): void;
update<T extends Storage.Saveable<T>>(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<unknown>][];
activeViewId: number | null;
}
interface RouteStrategy<PropType extends Storage.Saveable<PropType> = Storage.Saveable<unknown>, PlatformType extends Platform = any> {
destroy?(viewInstance: View<PropType, PlatformType>, ui: UI<PlatformType>): void;
create?(viewName: string, layer: string, prop: PropType, ui: UI<PlatformType>, isSave: boolean): View<Storage.Saveable<PropType>, PlatformType>;
update?(viewInstance: View<PropType, PlatformType>, prop: PropType, ui: UI<PlatformType>): void;
}
}
}