canvasengine 1.3.0 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +51 -17
- package/src/components/Canvas.ts +134 -0
- package/src/components/Container.ts +46 -0
- package/src/components/DisplayObject.ts +458 -0
- package/src/components/DrawMap/index.ts +65 -0
- package/src/components/Graphic.ts +147 -0
- package/src/components/NineSliceSprite.ts +46 -0
- package/src/components/ParticleEmitter.ts +39 -0
- package/src/components/Scene.ts +6 -0
- package/src/components/Sprite.ts +493 -0
- package/src/components/Text.ts +145 -0
- package/src/components/Tilemap/Tile.ts +79 -0
- package/src/components/Tilemap/TileGroup.ts +207 -0
- package/src/components/Tilemap/TileLayer.ts +163 -0
- package/src/components/Tilemap/TileSet.ts +41 -0
- package/src/components/Tilemap/index.ts +80 -0
- package/src/components/TilingSprite.ts +39 -0
- package/src/components/Viewport.ts +159 -0
- package/src/components/index.ts +13 -0
- package/src/components/types/DisplayObject.ts +69 -0
- package/src/components/types/MouseEvent.ts +3 -0
- package/src/components/types/Spritesheet.ts +389 -0
- package/src/components/types/index.ts +4 -0
- package/src/directives/Drag.ts +84 -0
- package/src/directives/KeyboardControls.ts +922 -0
- package/src/directives/Scheduler.ts +101 -0
- package/src/directives/Sound.ts +91 -0
- package/src/directives/Transition.ts +45 -0
- package/src/directives/ViewportCull.ts +40 -0
- package/src/directives/ViewportFollow.ts +26 -0
- package/src/directives/index.ts +7 -0
- package/src/engine/animation.ts +113 -0
- package/src/engine/bootstrap.ts +19 -0
- package/src/engine/directive.ts +23 -0
- package/src/engine/reactive.ts +379 -0
- package/src/engine/signal.ts +138 -0
- package/src/engine/trigger.ts +40 -0
- package/src/engine/utils.ts +135 -0
- package/src/hooks/addContext.ts +6 -0
- package/src/hooks/useProps.ts +155 -0
- package/src/hooks/useRef.ts +21 -0
- package/src/index.ts +13 -0
- package/src/utils/Ease.ts +33 -0
- package/src/utils/RadialGradient.ts +86 -0
- package/.gitattributes +0 -22
- package/.npmignore +0 -163
- package/canvasengine-1.3.0.all.min.js +0 -21
- package/canvasengine.js +0 -5802
- package/core/DB.js +0 -24
- package/core/ModelServer.js +0 -348
- package/core/Users.js +0 -190
- package/core/engine-common.js +0 -952
- package/doc/cocoonjs.md +0 -36
- package/doc/doc-lang.yml +0 -43
- package/doc/doc-router.yml +0 -14
- package/doc/doc-tuto.yml +0 -9
- package/doc/doc.yml +0 -39
- package/doc/element.md +0 -37
- package/doc/entity.md +0 -90
- package/doc/extend.md +0 -47
- package/doc/get_started.md +0 -19
- package/doc/images/entity.png +0 -0
- package/doc/multitouch.md +0 -58
- package/doc/nodejs.md +0 -142
- package/doc/scene.md +0 -44
- package/doc/text.md +0 -156
- package/examples/server/client.html +0 -31
- package/examples/server/server.js +0 -16
- package/examples/tiled_server/client.html +0 -52
- package/examples/tiled_server/images/tiles_spritesheet.png +0 -0
- package/examples/tiled_server/server/map.json +0 -50
- package/examples/tiled_server/server/map.tmx +0 -16
- package/examples/tiled_server/server/server.js +0 -16
- package/extends/Animation.js +0 -910
- package/extends/Effect.js +0 -252
- package/extends/Gleed2d.js +0 -252
- package/extends/Hit.js +0 -1509
- package/extends/Input.js +0 -699
- package/extends/Marshal.js +0 -716
- package/extends/Scrolling.js +0 -388
- package/extends/Soundmanager2.js +0 -5466
- package/extends/Spritesheet.js +0 -196
- package/extends/Text.js +0 -366
- package/extends/Tiled.js +0 -403
- package/extends/Window.js +0 -575
- package/extends/gamepad.js +0 -397
- package/extends/socket.io.min.js +0 -2
- package/extends/swf/soundmanager2.swf +0 -0
- package/extends/swf/soundmanager2_debug.swf +0 -0
- package/extends/swf/soundmanager2_flash9.swf +0 -0
- package/extends/swf/soundmanager2_flash9_debug.swf +0 -0
- package/extends/swf/soundmanager2_flash_xdomain.zip +0 -0
- package/extends/workers/transition.js +0 -43
- package/index.js +0 -46
- package/license.txt +0 -19
- package/readme.md +0 -483
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { effect, signal } from "@signe/reactive";
|
|
2
|
+
import { loop } from "../../engine/reactive";
|
|
3
|
+
import { h } from "../../engine/signal";
|
|
4
|
+
import { useProps } from "../../hooks/useProps";
|
|
5
|
+
import { Container } from "../Container";
|
|
6
|
+
import { Sprite } from "../Sprite";
|
|
7
|
+
|
|
8
|
+
interface TileData {
|
|
9
|
+
id: number;
|
|
10
|
+
rect: [number, number, number, number];
|
|
11
|
+
drawIn: [number, number];
|
|
12
|
+
layerIndex: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function ImageMap(props) {
|
|
16
|
+
const { imageSource, tileData } = useProps(props);
|
|
17
|
+
const tiles = signal<TileData[]>([]);
|
|
18
|
+
|
|
19
|
+
effect(async () => {
|
|
20
|
+
const data = await fetch(tileData()).then((response) => response.json());
|
|
21
|
+
const objects = data;
|
|
22
|
+
if (props.objects) {
|
|
23
|
+
objects.push(...props.objects(data));
|
|
24
|
+
}
|
|
25
|
+
tiles.set(objects);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const createLayeredTiles = () => {
|
|
29
|
+
const layers = [createTileLayer(0), createTileLayer(1, true), createTileLayer(2)];
|
|
30
|
+
|
|
31
|
+
return h(Container, props, ...layers);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const createTileLayer = (layerIndex: number, sortableChildren = false) => {
|
|
35
|
+
return h(
|
|
36
|
+
Container,
|
|
37
|
+
{
|
|
38
|
+
sortableChildren,
|
|
39
|
+
},
|
|
40
|
+
loop(tiles, (object) => {
|
|
41
|
+
|
|
42
|
+
if (object.tag && layerIndex == 1) {
|
|
43
|
+
return object
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
object.layerIndex ||= 1;
|
|
47
|
+
if (object.layerIndex !== layerIndex) return null;
|
|
48
|
+
|
|
49
|
+
const [x, y, width, height] = object.rect;
|
|
50
|
+
const [drawX, drawY] = object.drawIn;
|
|
51
|
+
|
|
52
|
+
return h(Sprite, {
|
|
53
|
+
image: imageSource(),
|
|
54
|
+
x: drawX,
|
|
55
|
+
y: drawY,
|
|
56
|
+
rectangle: { x, y, width, height },
|
|
57
|
+
zIndex: drawY + height - 70,
|
|
58
|
+
// zIndex: 0
|
|
59
|
+
});
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return createLayeredTiles();
|
|
65
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { effect, Signal } from "@signe/reactive";
|
|
2
|
+
import { Graphics as PixiGraphics } from "pixi.js";
|
|
3
|
+
import { createComponent, registerComponent } from "../engine/reactive";
|
|
4
|
+
import { DisplayObject } from "./DisplayObject";
|
|
5
|
+
import { DisplayObjectProps } from "./types/DisplayObject";
|
|
6
|
+
import { useProps } from "../hooks/useProps";
|
|
7
|
+
|
|
8
|
+
interface GraphicsProps extends DisplayObjectProps {
|
|
9
|
+
draw?: (graphics: PixiGraphics) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface RectProps extends DisplayObjectProps {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
color: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface CircleProps extends DisplayObjectProps {
|
|
19
|
+
radius: number;
|
|
20
|
+
color: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface EllipseProps extends DisplayObjectProps {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
color: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface TriangleProps extends DisplayObjectProps {
|
|
30
|
+
base: number;
|
|
31
|
+
height: number;
|
|
32
|
+
color: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface SvgProps extends DisplayObjectProps {
|
|
36
|
+
svg: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class CanvasGraphics extends DisplayObject(PixiGraphics) {
|
|
40
|
+
onInit(props: GraphicsProps) {
|
|
41
|
+
super.onInit(props);
|
|
42
|
+
if (props.draw) {
|
|
43
|
+
effect(() => {
|
|
44
|
+
this.clear();
|
|
45
|
+
props.draw?.(this);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface CanvasGraphics extends PixiGraphics {}
|
|
52
|
+
|
|
53
|
+
registerComponent("Graphics", CanvasGraphics);
|
|
54
|
+
|
|
55
|
+
export function Graphics(props: GraphicsProps) {
|
|
56
|
+
return createComponent("Graphics", props);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function Rect(props: RectProps) {
|
|
60
|
+
const { width, height, color, borderRadius, border } = useProps(props, {
|
|
61
|
+
borderRadius: null,
|
|
62
|
+
border: null
|
|
63
|
+
})
|
|
64
|
+
return Graphics({
|
|
65
|
+
draw: (g) => {
|
|
66
|
+
if (borderRadius()) {
|
|
67
|
+
g.roundRect(0, 0, width(), height(), borderRadius());
|
|
68
|
+
} else {
|
|
69
|
+
g.rect(0, 0, width(), height());
|
|
70
|
+
}
|
|
71
|
+
if (border) {
|
|
72
|
+
g.stroke(border);
|
|
73
|
+
}
|
|
74
|
+
g.fill(color());
|
|
75
|
+
},
|
|
76
|
+
...props
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function drawShape(g: PixiGraphics, shape: 'circle' | 'ellipse', props: {
|
|
81
|
+
radius: Signal<number>;
|
|
82
|
+
color: Signal<string>;
|
|
83
|
+
border: Signal<number>;
|
|
84
|
+
} | {
|
|
85
|
+
width: Signal<number>;
|
|
86
|
+
height: Signal<number>;
|
|
87
|
+
color: Signal<string>;
|
|
88
|
+
border: Signal<number>;
|
|
89
|
+
}) {
|
|
90
|
+
const { color, border } = props;
|
|
91
|
+
if ('radius' in props) {
|
|
92
|
+
g.circle(0, 0, props.radius());
|
|
93
|
+
} else {
|
|
94
|
+
g.ellipse(0, 0, props.width() / 2, props.height() / 2);
|
|
95
|
+
}
|
|
96
|
+
if (border()) {
|
|
97
|
+
g.stroke(border());
|
|
98
|
+
}
|
|
99
|
+
g.fill(color());
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function Circle(props: CircleProps) {
|
|
103
|
+
const { radius, color, border } = useProps(props, {
|
|
104
|
+
border: null
|
|
105
|
+
})
|
|
106
|
+
return Graphics({
|
|
107
|
+
draw: (g) => drawShape(g, 'circle', { radius, color, border }),
|
|
108
|
+
...props
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function Ellipse(props: EllipseProps) {
|
|
113
|
+
const { width, height, color, border } = useProps(props, {
|
|
114
|
+
border: null
|
|
115
|
+
})
|
|
116
|
+
return Graphics({
|
|
117
|
+
draw: (g) => drawShape(g, 'ellipse', { width, height, color, border }),
|
|
118
|
+
...props
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function Triangle(props: TriangleProps) {
|
|
123
|
+
const { width, height, color, border } = useProps(props, {
|
|
124
|
+
border: null,
|
|
125
|
+
color: '#000'
|
|
126
|
+
})
|
|
127
|
+
return Graphics({
|
|
128
|
+
draw: (g) => {
|
|
129
|
+
g.moveTo(0, height());
|
|
130
|
+
g.lineTo(width() / 2, 0);
|
|
131
|
+
g.lineTo(width(), height());
|
|
132
|
+
g.lineTo(0, height());
|
|
133
|
+
g.fill(color());
|
|
134
|
+
if (border) {
|
|
135
|
+
g.stroke(border);
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
...props
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function Svg(props: SvgProps) {
|
|
143
|
+
return Graphics({
|
|
144
|
+
draw: (g) => g.svg(props.svg),
|
|
145
|
+
...props
|
|
146
|
+
})
|
|
147
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Assets, NineSliceSprite as PixiNineSliceSprite, Texture } from "pixi.js";
|
|
2
|
+
import { createComponent, registerComponent } from "../engine/reactive";
|
|
3
|
+
import { DisplayObject } from "./DisplayObject";
|
|
4
|
+
import { DisplayObjectProps } from "./types/DisplayObject";
|
|
5
|
+
|
|
6
|
+
interface NineSliceSpriteProps extends DisplayObjectProps {
|
|
7
|
+
image?: string;
|
|
8
|
+
texture?: Texture;
|
|
9
|
+
width?: number;
|
|
10
|
+
height?: number;
|
|
11
|
+
leftWidth?: number;
|
|
12
|
+
rightWidth?: number;
|
|
13
|
+
topHeight?: number;
|
|
14
|
+
bottomHeight?: number;
|
|
15
|
+
roundPixels?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class CanvasNineSliceSprite extends DisplayObject(PixiNineSliceSprite) {
|
|
19
|
+
constructor() {
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
super({
|
|
22
|
+
width: 0,
|
|
23
|
+
height: 0
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async onUpdate(props: NineSliceSpriteProps) {
|
|
28
|
+
for (const [key, value] of Object.entries(props)) {
|
|
29
|
+
if (value !== undefined) {
|
|
30
|
+
if (key === 'image') {
|
|
31
|
+
this.texture = await Assets.load(value);
|
|
32
|
+
} else if (key in this) {
|
|
33
|
+
(this as any)[key] = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface CanvasNineSliceSprite extends PixiNineSliceSprite {}
|
|
41
|
+
|
|
42
|
+
registerComponent("NineSliceSprite", CanvasNineSliceSprite);
|
|
43
|
+
|
|
44
|
+
export function NineSliceSprite(props: NineSliceSpriteProps) {
|
|
45
|
+
return createComponent("NineSliceSprite", props);
|
|
46
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as particles from "@barvynkoa/particle-emitter";
|
|
2
|
+
import { createComponent, registerComponent } from "../engine/reactive";
|
|
3
|
+
import { CanvasContainer } from "./Container";
|
|
4
|
+
import { Signal } from "@signe/reactive";
|
|
5
|
+
|
|
6
|
+
class CanvasParticlesEmitter extends CanvasContainer {
|
|
7
|
+
private emitter: particles.Emitter | null;
|
|
8
|
+
private elapsed: number = Date.now();
|
|
9
|
+
|
|
10
|
+
onMount(params) {
|
|
11
|
+
super.onMount(params);
|
|
12
|
+
const { props } = params;
|
|
13
|
+
const tick: Signal = props.context.tick;
|
|
14
|
+
this.emitter = new particles.Emitter(this as any, props.config);
|
|
15
|
+
//this.emitter.emit = true
|
|
16
|
+
|
|
17
|
+
this.subscriptionTick = tick.observable.subscribe((value) => {
|
|
18
|
+
if (!this.emitter) return;
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
this.emitter.update((now - this.elapsed) * 0.001);
|
|
21
|
+
this.elapsed = now;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
onUpdate(props) {}
|
|
26
|
+
|
|
27
|
+
onDestroy(): void {
|
|
28
|
+
super.onDestroy();
|
|
29
|
+
this.emitter?.destroy();
|
|
30
|
+
this.emitter = null;
|
|
31
|
+
this.subscriptionTick.unsubscribe();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
registerComponent("ParticlesEmitter", CanvasParticlesEmitter);
|
|
36
|
+
|
|
37
|
+
export function ParticlesEmitter(props) {
|
|
38
|
+
return createComponent("ParticlesEmitter", props);
|
|
39
|
+
}
|