mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-31 15:09:26 +08:00
feat: Icon元素框架 & animate元素名称冲突
This commit is contained in:
parent
4a55255b74
commit
f66b185afc
@ -3,6 +3,7 @@ import { Sprite } from '../sprite';
|
|||||||
import { ERenderItemEvent, RenderItem, RenderItemPosition } from '../item';
|
import { ERenderItemEvent, RenderItem, RenderItemPosition } from '../item';
|
||||||
import { Transform } from '../transform';
|
import { Transform } from '../transform';
|
||||||
import { ElementNamespace, ComponentInternalInstance } from 'vue';
|
import { ElementNamespace, ComponentInternalInstance } from 'vue';
|
||||||
|
import { AutotileRenderable, RenderableData } from '../cache';
|
||||||
|
|
||||||
type CanvasStyle = string | CanvasGradient | CanvasPattern;
|
type CanvasStyle = string | CanvasGradient | CanvasPattern;
|
||||||
|
|
||||||
@ -186,3 +187,50 @@ export class Comment extends RenderItem {
|
|||||||
transform: Transform
|
transform: Transform
|
||||||
): void {}
|
): void {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface EIconEvent extends ERenderItemEvent {}
|
||||||
|
|
||||||
|
export class Icon extends RenderItem<EIconEvent> {
|
||||||
|
/** 图标id */
|
||||||
|
icon: AllNumbers = 0;
|
||||||
|
/** 帧数 */
|
||||||
|
frame: number = 0;
|
||||||
|
/** 是否启用动画 */
|
||||||
|
animate: boolean = false;
|
||||||
|
/** 图标的渲染信息 */
|
||||||
|
private renderable?: RenderableData | AutotileRenderable;
|
||||||
|
|
||||||
|
protected render(
|
||||||
|
canvas: MotaOffscreenCanvas2D,
|
||||||
|
transform: Transform
|
||||||
|
): void {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置图标
|
||||||
|
* @param id 图标id
|
||||||
|
*/
|
||||||
|
setIcon(id: AllIds | AllNumbers) {}
|
||||||
|
|
||||||
|
patchProp(
|
||||||
|
key: string,
|
||||||
|
prevValue: any,
|
||||||
|
nextValue: any,
|
||||||
|
namespace?: ElementNamespace,
|
||||||
|
parentComponent?: ComponentInternalInstance | null
|
||||||
|
): void {
|
||||||
|
switch (key) {
|
||||||
|
case 'icon':
|
||||||
|
this.setIcon(nextValue);
|
||||||
|
return;
|
||||||
|
case 'animate':
|
||||||
|
if (!this.assertType(nextValue, 'boolean', key)) return;
|
||||||
|
this.animate = nextValue;
|
||||||
|
return;
|
||||||
|
case 'frame':
|
||||||
|
if (!this.assertType(nextValue, 'number', key)) return;
|
||||||
|
this.frame = nextValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.patchProp(key, prevValue, nextValue, namespace, parentComponent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@ import {
|
|||||||
EllipseProps,
|
EllipseProps,
|
||||||
GL2Props,
|
GL2Props,
|
||||||
GraphicsProps,
|
GraphicsProps,
|
||||||
|
IconProps,
|
||||||
ImageProps,
|
ImageProps,
|
||||||
LayerGroupProps,
|
LayerGroupProps,
|
||||||
LayerProps,
|
LayerProps,
|
||||||
@ -34,7 +35,7 @@ import { ERenderItemEvent, RenderItem } from '../item';
|
|||||||
import { ESpriteEvent, Sprite } from '../sprite';
|
import { ESpriteEvent, Sprite } from '../sprite';
|
||||||
import { EContainerEvent } from '../container';
|
import { EContainerEvent } from '../container';
|
||||||
import { EGL2Event } from '../gl2';
|
import { EGL2Event } from '../gl2';
|
||||||
import { EImageEvent, ETextEvent } from '../preset/misc';
|
import { EIconEvent, EImageEvent, ETextEvent } from '../preset/misc';
|
||||||
import { ELayerEvent, ELayerGroupEvent } from '../preset/layer';
|
import { ELayerEvent, ELayerGroupEvent } from '../preset/layer';
|
||||||
import { EAnimateEvent } from '../preset/animate';
|
import { EAnimateEvent } from '../preset/animate';
|
||||||
import { EDamageEvent } from '../preset/damage';
|
import { EDamageEvent } from '../preset/damage';
|
||||||
@ -86,7 +87,7 @@ declare module 'vue/jsx-runtime' {
|
|||||||
layer: TagDefine<LayerProps, ELayerEvent>;
|
layer: TagDefine<LayerProps, ELayerEvent>;
|
||||||
'layer-group': TagDefine<LayerGroupProps, ELayerGroupEvent>;
|
'layer-group': TagDefine<LayerGroupProps, ELayerGroupEvent>;
|
||||||
damage: TagDefine<DamageProps, EDamageEvent>;
|
damage: TagDefine<DamageProps, EDamageEvent>;
|
||||||
animate: TagDefine<AnimateProps, EAnimateEvent>;
|
animation: TagDefine<AnimateProps, EAnimateEvent>;
|
||||||
graphics: TagDefine<GraphicsProps, ERenderItemEvent>;
|
graphics: TagDefine<GraphicsProps, ERenderItemEvent>;
|
||||||
'g-rect': TagDefine<RectProps, ERenderItemEvent>;
|
'g-rect': TagDefine<RectProps, ERenderItemEvent>;
|
||||||
'g-circle': TagDefine<CirclesProps, ERenderItemEvent>;
|
'g-circle': TagDefine<CirclesProps, ERenderItemEvent>;
|
||||||
@ -95,6 +96,7 @@ declare module 'vue/jsx-runtime' {
|
|||||||
'g-bezier': TagDefine<BezierProps, ERenderItemEvent>;
|
'g-bezier': TagDefine<BezierProps, ERenderItemEvent>;
|
||||||
'g-quad': TagDefine<QuadraticProps, ERenderItemEvent>;
|
'g-quad': TagDefine<QuadraticProps, ERenderItemEvent>;
|
||||||
'g-path': TagDefine<PathProps, ERenderItemEvent>;
|
'g-path': TagDefine<PathProps, ERenderItemEvent>;
|
||||||
|
icon: TagDefine<IconProps, EIconEvent>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import { ElementNamespace, VNodeProps } from 'vue';
|
|||||||
import { Container } from '../container';
|
import { Container } from '../container';
|
||||||
import { MotaRenderer } from '../render';
|
import { MotaRenderer } from '../render';
|
||||||
import { Sprite } from '../sprite';
|
import { Sprite } from '../sprite';
|
||||||
import { Comment, Image, Text } from '../preset/misc';
|
import { Comment, Icon, Image, Text } from '../preset/misc';
|
||||||
import { Shader } from '../shader';
|
import { Shader } from '../shader';
|
||||||
import { Animate, Damage, EDamageEvent, Layer, LayerGroup } from '../preset';
|
import { Animate, Damage, EDamageEvent, Layer, LayerGroup } from '../preset';
|
||||||
import {
|
import {
|
||||||
@ -167,7 +167,7 @@ tagMap.register('layer-group', (_0, _1, props) => {
|
|||||||
tagMap.register<EDamageEvent, Damage>('damage', (_0, _1, props) => {
|
tagMap.register<EDamageEvent, Damage>('damage', (_0, _1, props) => {
|
||||||
return new Damage();
|
return new Damage();
|
||||||
});
|
});
|
||||||
tagMap.register('animate', (_0, _1, props) => {
|
tagMap.register('animation', (_0, _1, props) => {
|
||||||
return new Animate();
|
return new Animate();
|
||||||
});
|
});
|
||||||
tagMap.register('graphics', standardElement(Graphics));
|
tagMap.register('graphics', standardElement(Graphics));
|
||||||
@ -178,3 +178,4 @@ tagMap.register('g-line', standardElement(Line));
|
|||||||
tagMap.register('g-bezier', standardElement(BezierCurve));
|
tagMap.register('g-bezier', standardElement(BezierCurve));
|
||||||
tagMap.register('g-quad', standardElement(QuadraticCurve));
|
tagMap.register('g-quad', standardElement(QuadraticCurve));
|
||||||
tagMap.register('g-path', standardElement(Path));
|
tagMap.register('g-path', standardElement(Path));
|
||||||
|
tagMap.register('icon', standardElement(Icon));
|
||||||
|
@ -105,3 +105,5 @@ export interface BezierProps extends BaseProps {}
|
|||||||
export interface QuadraticProps extends BaseProps {}
|
export interface QuadraticProps extends BaseProps {}
|
||||||
|
|
||||||
export interface PathProps extends BaseProps {}
|
export interface PathProps extends BaseProps {}
|
||||||
|
|
||||||
|
export interface IconProps extends BaseProps {}
|
||||||
|
@ -11,7 +11,7 @@ const FSHOST = 'http://127.0.0.1:3000/';
|
|||||||
|
|
||||||
const custom = [
|
const custom = [
|
||||||
'container', 'image', 'sprite', 'shader', 'text', 'comment', 'custom',
|
'container', 'image', 'sprite', 'shader', 'text', 'comment', 'custom',
|
||||||
'layer', 'layer-group', 'animate', 'damage', 'graphics'
|
'layer', 'layer-group', 'animate', 'damage', 'graphics', 'icon'
|
||||||
]
|
]
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
|
Loading…
Reference in New Issue
Block a user