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.
Files changed (96) hide show
  1. package/package.json +51 -17
  2. package/src/components/Canvas.ts +134 -0
  3. package/src/components/Container.ts +46 -0
  4. package/src/components/DisplayObject.ts +458 -0
  5. package/src/components/DrawMap/index.ts +65 -0
  6. package/src/components/Graphic.ts +147 -0
  7. package/src/components/NineSliceSprite.ts +46 -0
  8. package/src/components/ParticleEmitter.ts +39 -0
  9. package/src/components/Scene.ts +6 -0
  10. package/src/components/Sprite.ts +493 -0
  11. package/src/components/Text.ts +145 -0
  12. package/src/components/Tilemap/Tile.ts +79 -0
  13. package/src/components/Tilemap/TileGroup.ts +207 -0
  14. package/src/components/Tilemap/TileLayer.ts +163 -0
  15. package/src/components/Tilemap/TileSet.ts +41 -0
  16. package/src/components/Tilemap/index.ts +80 -0
  17. package/src/components/TilingSprite.ts +39 -0
  18. package/src/components/Viewport.ts +159 -0
  19. package/src/components/index.ts +13 -0
  20. package/src/components/types/DisplayObject.ts +69 -0
  21. package/src/components/types/MouseEvent.ts +3 -0
  22. package/src/components/types/Spritesheet.ts +389 -0
  23. package/src/components/types/index.ts +4 -0
  24. package/src/directives/Drag.ts +84 -0
  25. package/src/directives/KeyboardControls.ts +922 -0
  26. package/src/directives/Scheduler.ts +101 -0
  27. package/src/directives/Sound.ts +91 -0
  28. package/src/directives/Transition.ts +45 -0
  29. package/src/directives/ViewportCull.ts +40 -0
  30. package/src/directives/ViewportFollow.ts +26 -0
  31. package/src/directives/index.ts +7 -0
  32. package/src/engine/animation.ts +113 -0
  33. package/src/engine/bootstrap.ts +19 -0
  34. package/src/engine/directive.ts +23 -0
  35. package/src/engine/reactive.ts +379 -0
  36. package/src/engine/signal.ts +138 -0
  37. package/src/engine/trigger.ts +40 -0
  38. package/src/engine/utils.ts +135 -0
  39. package/src/hooks/addContext.ts +6 -0
  40. package/src/hooks/useProps.ts +155 -0
  41. package/src/hooks/useRef.ts +21 -0
  42. package/src/index.ts +13 -0
  43. package/src/utils/Ease.ts +33 -0
  44. package/src/utils/RadialGradient.ts +86 -0
  45. package/.gitattributes +0 -22
  46. package/.npmignore +0 -163
  47. package/canvasengine-1.3.0.all.min.js +0 -21
  48. package/canvasengine.js +0 -5802
  49. package/core/DB.js +0 -24
  50. package/core/ModelServer.js +0 -348
  51. package/core/Users.js +0 -190
  52. package/core/engine-common.js +0 -952
  53. package/doc/cocoonjs.md +0 -36
  54. package/doc/doc-lang.yml +0 -43
  55. package/doc/doc-router.yml +0 -14
  56. package/doc/doc-tuto.yml +0 -9
  57. package/doc/doc.yml +0 -39
  58. package/doc/element.md +0 -37
  59. package/doc/entity.md +0 -90
  60. package/doc/extend.md +0 -47
  61. package/doc/get_started.md +0 -19
  62. package/doc/images/entity.png +0 -0
  63. package/doc/multitouch.md +0 -58
  64. package/doc/nodejs.md +0 -142
  65. package/doc/scene.md +0 -44
  66. package/doc/text.md +0 -156
  67. package/examples/server/client.html +0 -31
  68. package/examples/server/server.js +0 -16
  69. package/examples/tiled_server/client.html +0 -52
  70. package/examples/tiled_server/images/tiles_spritesheet.png +0 -0
  71. package/examples/tiled_server/server/map.json +0 -50
  72. package/examples/tiled_server/server/map.tmx +0 -16
  73. package/examples/tiled_server/server/server.js +0 -16
  74. package/extends/Animation.js +0 -910
  75. package/extends/Effect.js +0 -252
  76. package/extends/Gleed2d.js +0 -252
  77. package/extends/Hit.js +0 -1509
  78. package/extends/Input.js +0 -699
  79. package/extends/Marshal.js +0 -716
  80. package/extends/Scrolling.js +0 -388
  81. package/extends/Soundmanager2.js +0 -5466
  82. package/extends/Spritesheet.js +0 -196
  83. package/extends/Text.js +0 -366
  84. package/extends/Tiled.js +0 -403
  85. package/extends/Window.js +0 -575
  86. package/extends/gamepad.js +0 -397
  87. package/extends/socket.io.min.js +0 -2
  88. package/extends/swf/soundmanager2.swf +0 -0
  89. package/extends/swf/soundmanager2_debug.swf +0 -0
  90. package/extends/swf/soundmanager2_flash9.swf +0 -0
  91. package/extends/swf/soundmanager2_flash9_debug.swf +0 -0
  92. package/extends/swf/soundmanager2_flash_xdomain.zip +0 -0
  93. package/extends/workers/transition.js +0 -43
  94. package/index.js +0 -46
  95. package/license.txt +0 -19
  96. 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
+ }
@@ -0,0 +1,6 @@
1
+ import { h } from "../engine/signal";
2
+ import { Container } from "./Container";
3
+
4
+ export function Scene(props) {
5
+ return h(Container)
6
+ }