mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-24 16:13:24 +08:00
256 lines
8.5 KiB
TypeScript
256 lines
8.5 KiB
TypeScript
import { RenderFunction, RenderItem, RenderItemPosition } from '../item';
|
||
import { Transform } from '../transform';
|
||
import {
|
||
FloorLayer,
|
||
ILayerGroupRenderExtends,
|
||
ILayerRenderExtends
|
||
} from '../preset/layer';
|
||
import type { EnemyCollection } from '@/game/enemy/damage';
|
||
import {
|
||
BezierParams,
|
||
CircleParams,
|
||
EllipseParams,
|
||
ILineProperty,
|
||
LineParams,
|
||
QuadParams,
|
||
RectRCircleParams,
|
||
RectREllipseParams
|
||
} from '../preset/graphics';
|
||
import { ElementAnchor, ElementLocator, ElementScale } from '../utils';
|
||
import { CustomContainerRenderFn } from '../container';
|
||
|
||
export interface CustomProps {
|
||
_item: (props: BaseProps) => RenderItem;
|
||
}
|
||
|
||
export interface BaseProps {
|
||
/** 元素的横坐标 */
|
||
x?: number;
|
||
/** 元素的纵坐标 */
|
||
y?: number;
|
||
/** 元素的横向锚点位置 */
|
||
anchorX?: number;
|
||
/** 元素的纵向锚点位置 */
|
||
anchorY?: number;
|
||
/** 元素的纵深,值越大越靠上 */
|
||
zIndex?: number;
|
||
/** 元素的宽度 */
|
||
width?: number;
|
||
/** 元素的高度 */
|
||
height?: number;
|
||
/** 元素的滤镜 */
|
||
filter?: string;
|
||
/** 是否启用高清画布 */
|
||
hd?: boolean;
|
||
/** 是否启用抗锯齿 */
|
||
anti?: boolean;
|
||
/** 是否不启用抗锯齿,优先级大于 anti,主要用于像素图片渲染 */
|
||
noanti?: boolean;
|
||
/** 元素是否隐藏,可以用于一些画面效果,也可以用于调试 */
|
||
hidden?: boolean;
|
||
/** 元素的变换矩阵 */
|
||
transform?: Transform;
|
||
/** 元素的定位模式,static 表示常规定位,absolute 定位模式下元素位置始终处于左上角 */
|
||
type?: RenderItemPosition;
|
||
/** 是否启用缓存,用处较少,主要用于一些默认不启用缓存的元素的特殊优化 */
|
||
cache?: boolean;
|
||
/** 是否不启用缓存,优先级大于 cache,用处较少,主要用于一些特殊优化 */
|
||
nocache?: boolean;
|
||
/** 是否启用变换矩阵下穿,下穿模式下,当前元素会使用由父元素传递过来的变换矩阵,而非元素自身的 */
|
||
fall?: boolean;
|
||
/** 这个元素的唯一标识符,不可重复 */
|
||
id?: string;
|
||
/** 这个元素的不透明度 */
|
||
alpha?: number;
|
||
/** 这个元素与已渲染内容的混合模式,默认为 source-over */
|
||
composite?: GlobalCompositeOperation;
|
||
/** 鼠标放在这个元素上时的光标样式 */
|
||
cursor?: string;
|
||
/**
|
||
* 定位属性,可以填 `[横坐标,纵坐标,宽度,高度,x锚点,y锚点]`,
|
||
* 对于横坐标与纵坐标、宽度与高度、x锚点与y锚点,两两一组要么都填,要么都不填
|
||
* 是 x, y, width, height, anchorX, anchorY 的简写属性
|
||
*/
|
||
loc?: ElementLocator;
|
||
/** 锚点属性,可以填 `[x锚点,y锚点]`,是 anchorX, anchorY 的简写属性 */
|
||
anc?: ElementAnchor;
|
||
/** 放缩属性,可以填 `[x比例,y比例]`,是 transform 的简写属性之一 */
|
||
scale?: ElementScale;
|
||
/** 旋转属性,单位弧度,是 transform 的简写属性之一 */
|
||
rotate?: number;
|
||
/** 这个元素是否不会触发任何交互事件(cursor 属性也会无效),当执行到此元素时,会下穿至下一个元素 */
|
||
noevent?: boolean;
|
||
}
|
||
|
||
export interface SpriteProps extends BaseProps {
|
||
render?: RenderFunction;
|
||
}
|
||
|
||
export interface ContainerProps extends BaseProps {}
|
||
|
||
export interface ConatinerCustomProps extends ContainerProps {
|
||
render?: CustomContainerRenderFn;
|
||
}
|
||
|
||
export interface GL2Props extends BaseProps {}
|
||
|
||
export interface ShaderProps extends BaseProps {}
|
||
|
||
export interface TextProps extends BaseProps {
|
||
text?: string;
|
||
fillStyle?: CanvasStyle;
|
||
strokeStyle?: CanvasStyle;
|
||
font?: string;
|
||
strokeWidth?: number;
|
||
}
|
||
|
||
export interface ImageProps extends BaseProps {
|
||
image: CanvasImageSource;
|
||
}
|
||
|
||
export interface CommentProps extends BaseProps {
|
||
text?: string;
|
||
}
|
||
|
||
export interface LayerGroupProps extends BaseProps {
|
||
cellSize?: number;
|
||
blockSize?: number;
|
||
floorId?: FloorIds;
|
||
bindThisFloor?: boolean;
|
||
camera?: Transform;
|
||
ex?: readonly ILayerGroupRenderExtends[];
|
||
layers?: readonly FloorLayer[];
|
||
}
|
||
|
||
export interface LayerProps extends BaseProps {
|
||
layer?: FloorLayer;
|
||
mapWidth?: number;
|
||
mapHeight?: number;
|
||
cellSize?: number;
|
||
background?: AllNumbers;
|
||
floorImage?: FloorAnimate[];
|
||
ex?: readonly ILayerRenderExtends[];
|
||
}
|
||
|
||
export interface AnimateProps extends BaseProps {}
|
||
|
||
export interface DamageProps extends BaseProps {
|
||
mapWidth?: number;
|
||
mapHeight?: number;
|
||
cellSize?: number;
|
||
enemy?: EnemyCollection;
|
||
font?: string;
|
||
strokeStyle?: CanvasStyle;
|
||
strokeWidth?: number;
|
||
}
|
||
|
||
export interface GraphicPropsBase extends BaseProps, Partial<ILineProperty> {
|
||
/** 是否填充,若填写 {@link stroke},那么表现为先填充后描边 */
|
||
fill?: boolean;
|
||
/** 是否描边,若填写 {@link fill},那么表现为先填充后描边 */
|
||
stroke?: boolean;
|
||
/** 是否先描边后填充,优先级最高,若设置,则 {@link fill} 与 {@link stroke} 无效。 */
|
||
strokeAndFill?: boolean;
|
||
/** 填充原则,比如 `nonzero` 表示非零环绕原则,默认为奇偶环绕原则 `evenodd` */
|
||
fillRule?: CanvasFillRule;
|
||
/** 填充样式 */
|
||
fillStyle?: CanvasStyle;
|
||
/** 描边样式 */
|
||
strokeStyle?: CanvasStyle;
|
||
/** 在交互时,是否只检查交互位置只在描边上,对 fill, stroke, strokeAndFill 均有效 */
|
||
actionStroke?: boolean;
|
||
}
|
||
|
||
export interface RectProps extends GraphicPropsBase {}
|
||
|
||
export interface CirclesProps extends GraphicPropsBase {
|
||
radius?: number;
|
||
start?: number;
|
||
end?: number;
|
||
/**
|
||
* 圆属性参数,可以填 `[半径,起始角度,终止角度]`,是 radius, start, end 的简写,
|
||
* 其中半径可选,后两项要么都填,要么都不填
|
||
*/
|
||
circle?: CircleParams;
|
||
}
|
||
|
||
export interface EllipseProps extends GraphicPropsBase {
|
||
radiusX?: number;
|
||
radiusY?: number;
|
||
start?: number;
|
||
end?: number;
|
||
/**
|
||
* 椭圆属性参数,可以填 `[x半径,y半径,起始角度,终止角度]`,是 radiusX, radiusY, start, end 的简写,
|
||
* 其中前两项和后两项要么都填,要么都不填
|
||
*/
|
||
ellipse?: EllipseParams;
|
||
}
|
||
|
||
export interface LineProps extends GraphicPropsBase {
|
||
x1?: number;
|
||
y1?: number;
|
||
x2?: number;
|
||
y2?: number;
|
||
/** 直线属性参数,可以填 `[x1, y1, x2, y2]`,都是必填 */
|
||
line?: LineParams;
|
||
}
|
||
|
||
export interface BezierProps extends GraphicPropsBase {
|
||
sx?: number;
|
||
sy?: number;
|
||
cp1x?: number;
|
||
cp1y?: number;
|
||
cp2x?: number;
|
||
cp2y?: number;
|
||
ex?: number;
|
||
ey?: number;
|
||
/** 三次贝塞尔曲线参数,可以填 `[sx, sy, cp1x, cp1y, cp2x, cp2y, ex, ey]`,都是必填 */
|
||
curve?: BezierParams;
|
||
}
|
||
|
||
export interface QuadraticProps extends GraphicPropsBase {
|
||
sx?: number;
|
||
sy?: number;
|
||
cpx?: number;
|
||
cpy?: number;
|
||
ex?: number;
|
||
ey?: number;
|
||
/** 二次贝塞尔曲线参数,可以填 `[sx, sy, cpx, cpy, ex, ey]`,都是必填 */
|
||
curve?: QuadParams;
|
||
}
|
||
|
||
export interface PathProps extends GraphicPropsBase {
|
||
path?: Path2D;
|
||
}
|
||
|
||
export interface RectRProps extends GraphicPropsBase {
|
||
/**
|
||
* 圆形圆角参数,可以填 `[r1, r2, r3, r4]`,后三项可选。填写不同数量下的表现:
|
||
* - 1个:每个角都是 `r1` 半径的圆
|
||
* - 2个:左上和右下是 `r1` 半径的圆,右上和左下是 `r2` 半径的圆
|
||
* - 3个:左上是 `r1` 半径的圆,右上和左下是 `r2` 半径的圆,右下是 `r3` 半径的圆
|
||
* - 4个:左上、右上、左下、右下 分别是 `r1, r2, r3, r4` 半径的圆
|
||
*/
|
||
circle?: RectRCircleParams;
|
||
/**
|
||
* 椭圆圆角参数,可以填 `[rx1, ry1, rx2, ry2, rx3, ry3, rx4, ry4]`,
|
||
* 两两一组,后三组可选,填写不同数量下的表现:
|
||
* - 1组:每个角都是 `[rx1, ry1]` 半径的椭圆
|
||
* - 2组:左上和右下是 `[rx1, ry1]` 半径的椭圆,右上和左下是 `[rx2, ry2]` 半径的椭圆
|
||
* - 3组:左上是 `[rx1, ry1]` 半径的椭圆,右上和左下是 `[rx2, ey2]` 半径的椭圆,右下是 `[rx3, ry3]` 半径的椭圆
|
||
* - 4组:左上、右上、左下、右下 分别是 `[rx1, ry1], [rx2, ry2], [rx3, ry3], [rx4, ry4]` 半径的椭圆
|
||
*/
|
||
ellipse?: RectREllipseParams;
|
||
}
|
||
|
||
export interface IconProps extends BaseProps {
|
||
icon: AllNumbers;
|
||
frame?: number;
|
||
animate?: boolean;
|
||
}
|
||
|
||
export interface WinskinProps extends BaseProps {
|
||
image: ImageIds;
|
||
borderSize?: number;
|
||
}
|