@playcanvas/web-components 0.2.12 → 0.5.0

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 (41) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +84 -84
  3. package/dist/components/element-component.d.ts +12 -0
  4. package/dist/components/light-component.d.ts +48 -0
  5. package/dist/components/splat-component.d.ts +0 -13
  6. package/dist/pwc.cjs +298 -207
  7. package/dist/pwc.cjs.map +1 -1
  8. package/dist/pwc.js +298 -207
  9. package/dist/pwc.js.map +1 -1
  10. package/dist/pwc.min.js +1 -1
  11. package/dist/pwc.min.js.map +1 -1
  12. package/dist/pwc.mjs +299 -208
  13. package/dist/pwc.mjs.map +1 -1
  14. package/package.json +76 -64
  15. package/src/app.ts +612 -606
  16. package/src/asset.ts +159 -159
  17. package/src/async-element.ts +46 -46
  18. package/src/colors.ts +150 -150
  19. package/src/components/camera-component.ts +557 -557
  20. package/src/components/collision-component.ts +183 -183
  21. package/src/components/component.ts +97 -97
  22. package/src/components/element-component.ts +367 -341
  23. package/src/components/light-component.ts +570 -466
  24. package/src/components/listener-component.ts +30 -30
  25. package/src/components/particlesystem-component.ts +155 -155
  26. package/src/components/render-component.ts +147 -147
  27. package/src/components/rigidbody-component.ts +227 -227
  28. package/src/components/screen-component.ts +157 -157
  29. package/src/components/script-component.ts +270 -270
  30. package/src/components/script.ts +90 -90
  31. package/src/components/sound-component.ts +230 -230
  32. package/src/components/sound-slot.ts +288 -288
  33. package/src/components/splat-component.ts +102 -133
  34. package/src/entity.ts +360 -360
  35. package/src/index.ts +63 -63
  36. package/src/material.ts +141 -141
  37. package/src/model.ts +111 -111
  38. package/src/module.ts +43 -43
  39. package/src/scene.ts +217 -217
  40. package/src/sky.ts +293 -293
  41. package/src/utils.ts +71 -71
package/src/index.ts CHANGED
@@ -1,63 +1,63 @@
1
- /**
2
- * The Engine Web Components module provides a set of Web Components for the PlayCanvas Engine.
3
- * While these components are normally instantiated in a declarative fashion using HTML, this
4
- * reference covers the TypeScript/JavaScript API that allows these components to be created
5
- * programmatically.
6
- *
7
- * @module EngineWebComponents
8
- */
9
-
10
- /* eslint-disable import/order */
11
-
12
- // Note that order matters here (e.g. pc-entity must be defined before components)
13
- import { AsyncElement } from './async-element';
14
- import { ModuleElement } from './module';
15
- import { AppElement } from './app';
16
- import { EntityElement } from './entity';
17
- import { AssetElement } from './asset';
18
- import { ListenerComponentElement } from './components/listener-component';
19
- import { CameraComponentElement } from './components/camera-component';
20
- import { CollisionComponentElement } from './components/collision-component';
21
- import { ComponentElement } from './components/component';
22
- import { ElementComponentElement } from './components/element-component';
23
- import { LightComponentElement } from './components/light-component';
24
- import { ParticleSystemComponentElement } from './components/particlesystem-component';
25
- import { RenderComponentElement } from './components/render-component';
26
- import { RigidBodyComponentElement } from './components/rigidbody-component';
27
- import { ScreenComponentElement } from './components/screen-component';
28
- import { ScriptComponentElement } from './components/script-component';
29
- import { ScriptElement } from './components/script';
30
- import { SoundComponentElement } from './components/sound-component';
31
- import { SoundSlotElement } from './components/sound-slot';
32
- import { SplatComponentElement } from './components/splat-component';
33
- import { MaterialElement } from './material';
34
- import { ModelElement } from './model';
35
- import { SceneElement } from './scene';
36
- import { SkyElement } from './sky';
37
-
38
- export {
39
- AsyncElement,
40
- ModuleElement,
41
- AppElement,
42
- EntityElement,
43
- AssetElement,
44
- CameraComponentElement,
45
- CollisionComponentElement,
46
- ComponentElement,
47
- ElementComponentElement,
48
- ParticleSystemComponentElement,
49
- LightComponentElement,
50
- ListenerComponentElement,
51
- RenderComponentElement,
52
- RigidBodyComponentElement,
53
- ScreenComponentElement,
54
- ScriptComponentElement,
55
- ScriptElement,
56
- SoundComponentElement,
57
- SoundSlotElement,
58
- SplatComponentElement,
59
- MaterialElement,
60
- ModelElement,
61
- SceneElement,
62
- SkyElement
63
- };
1
+ /**
2
+ * The Engine Web Components module provides a set of Web Components for the PlayCanvas Engine.
3
+ * While these components are normally instantiated in a declarative fashion using HTML, this
4
+ * reference covers the TypeScript/JavaScript API that allows these components to be created
5
+ * programmatically.
6
+ *
7
+ * @module EngineWebComponents
8
+ */
9
+
10
+ /* eslint-disable import/order */
11
+
12
+ // Note that order matters here (e.g. pc-entity must be defined before components)
13
+ import { AsyncElement } from './async-element';
14
+ import { ModuleElement } from './module';
15
+ import { AppElement } from './app';
16
+ import { EntityElement } from './entity';
17
+ import { AssetElement } from './asset';
18
+ import { ListenerComponentElement } from './components/listener-component';
19
+ import { CameraComponentElement } from './components/camera-component';
20
+ import { CollisionComponentElement } from './components/collision-component';
21
+ import { ComponentElement } from './components/component';
22
+ import { ElementComponentElement } from './components/element-component';
23
+ import { LightComponentElement } from './components/light-component';
24
+ import { ParticleSystemComponentElement } from './components/particlesystem-component';
25
+ import { RenderComponentElement } from './components/render-component';
26
+ import { RigidBodyComponentElement } from './components/rigidbody-component';
27
+ import { ScreenComponentElement } from './components/screen-component';
28
+ import { ScriptComponentElement } from './components/script-component';
29
+ import { ScriptElement } from './components/script';
30
+ import { SoundComponentElement } from './components/sound-component';
31
+ import { SoundSlotElement } from './components/sound-slot';
32
+ import { SplatComponentElement } from './components/splat-component';
33
+ import { MaterialElement } from './material';
34
+ import { ModelElement } from './model';
35
+ import { SceneElement } from './scene';
36
+ import { SkyElement } from './sky';
37
+
38
+ export {
39
+ AsyncElement,
40
+ ModuleElement,
41
+ AppElement,
42
+ EntityElement,
43
+ AssetElement,
44
+ CameraComponentElement,
45
+ CollisionComponentElement,
46
+ ComponentElement,
47
+ ElementComponentElement,
48
+ ParticleSystemComponentElement,
49
+ LightComponentElement,
50
+ ListenerComponentElement,
51
+ RenderComponentElement,
52
+ RigidBodyComponentElement,
53
+ ScreenComponentElement,
54
+ ScriptComponentElement,
55
+ ScriptElement,
56
+ SoundComponentElement,
57
+ SoundSlotElement,
58
+ SplatComponentElement,
59
+ MaterialElement,
60
+ ModelElement,
61
+ SceneElement,
62
+ SkyElement
63
+ };
package/src/material.ts CHANGED
@@ -1,141 +1,141 @@
1
- import { Color, StandardMaterial, Texture } from 'playcanvas';
2
-
3
- import { AssetElement } from './asset';
4
- import { parseColor } from './utils';
5
-
6
- /**
7
- * The MaterialElement interface provides properties and methods for manipulating
8
- * {@link https://developer.playcanvas.com/user-manual/web-components/tags/pc-material/ | `<pc-material>`} elements.
9
- * The MaterialElement interface also inherits the properties and methods of the
10
- * {@link HTMLElement} interface.
11
- */
12
- class MaterialElement extends HTMLElement {
13
- private _diffuse = new Color(1, 1, 1);
14
-
15
- private _diffuseMap = '';
16
-
17
- private _metalnessMap = '';
18
-
19
- private _normalMap = '';
20
-
21
- private _roughnessMap = '';
22
-
23
- material: StandardMaterial | null = null;
24
-
25
- createMaterial() {
26
- this.material = new StandardMaterial();
27
- this.material.glossInvert = false;
28
- this.material.useMetalness = false;
29
- this.material.diffuse = this._diffuse;
30
- this.diffuseMap = this._diffuseMap;
31
- this.metalnessMap = this._metalnessMap;
32
- this.normalMap = this._normalMap;
33
- this.roughnessMap = this._roughnessMap;
34
- this.material.update();
35
- }
36
-
37
- disconnectedCallback() {
38
- if (this.material) {
39
- this.material.destroy();
40
- this.material = null;
41
- }
42
- }
43
-
44
- setMap(map: string, property: 'diffuseMap' | 'metalnessMap' | 'normalMap' | 'glossMap') {
45
- if (this.material) {
46
- const asset = AssetElement.get(map);
47
- if (asset) {
48
- if (asset.loaded) {
49
- this.material[property] = asset.resource as Texture;
50
- this.material[property]!.anisotropy = 4;
51
- } else {
52
- asset.once('load', () => {
53
- this.material![property] = asset.resource as Texture;
54
- this.material![property]!.anisotropy = 4;
55
- this.material!.update();
56
- });
57
- }
58
- }
59
- }
60
- }
61
-
62
- set diffuse(value: Color) {
63
- this._diffuse = value;
64
- if (this.material) {
65
- this.material.diffuse = value;
66
- }
67
- }
68
-
69
- get diffuse(): Color {
70
- return this._diffuse;
71
- }
72
-
73
- set diffuseMap(value: string) {
74
- this._diffuseMap = value;
75
- this.setMap(value, 'diffuseMap');
76
- }
77
-
78
- get diffuseMap() {
79
- return this._diffuseMap;
80
- }
81
-
82
- set metalnessMap(value: string) {
83
- this._metalnessMap = value;
84
- this.setMap(value, 'metalnessMap');
85
- }
86
-
87
- get metalnessMap() {
88
- return this._metalnessMap;
89
- }
90
-
91
- set normalMap(value: string) {
92
- this._normalMap = value;
93
- this.setMap(value, 'normalMap');
94
- }
95
-
96
- get normalMap() {
97
- return this._normalMap;
98
- }
99
-
100
- set roughnessMap(value: string) {
101
- this._roughnessMap = value;
102
- this.setMap(value, 'glossMap');
103
- }
104
-
105
- get roughnessMap() {
106
- return this._roughnessMap;
107
- }
108
-
109
- static get(id: string) {
110
- const materialElement = document.querySelector<MaterialElement>(`pc-material[id="${id}"]`);
111
- return materialElement?.material;
112
- }
113
-
114
- static get observedAttributes() {
115
- return ['diffuse', 'diffuse-map', 'metalness-map', 'normal-map', 'roughness-map'];
116
- }
117
-
118
- attributeChangedCallback(name: string, _oldValue: string, newValue: string) {
119
- switch (name) {
120
- case 'diffuse':
121
- this.diffuse = parseColor(newValue);
122
- break;
123
- case 'diffuse-map':
124
- this.diffuseMap = newValue;
125
- break;
126
- case 'metalness-map':
127
- this.metalnessMap = newValue;
128
- break;
129
- case 'normal-map':
130
- this.normalMap = newValue;
131
- break;
132
- case 'roughness-map':
133
- this.roughnessMap = newValue;
134
- break;
135
- }
136
- }
137
- }
138
-
139
- customElements.define('pc-material', MaterialElement);
140
-
141
- export { MaterialElement };
1
+ import { Color, StandardMaterial, Texture } from 'playcanvas';
2
+
3
+ import { AssetElement } from './asset';
4
+ import { parseColor } from './utils';
5
+
6
+ /**
7
+ * The MaterialElement interface provides properties and methods for manipulating
8
+ * {@link https://developer.playcanvas.com/user-manual/web-components/tags/pc-material/ | `<pc-material>`} elements.
9
+ * The MaterialElement interface also inherits the properties and methods of the
10
+ * {@link HTMLElement} interface.
11
+ */
12
+ class MaterialElement extends HTMLElement {
13
+ private _diffuse = new Color(1, 1, 1);
14
+
15
+ private _diffuseMap = '';
16
+
17
+ private _metalnessMap = '';
18
+
19
+ private _normalMap = '';
20
+
21
+ private _roughnessMap = '';
22
+
23
+ material: StandardMaterial | null = null;
24
+
25
+ createMaterial() {
26
+ this.material = new StandardMaterial();
27
+ this.material.glossInvert = false;
28
+ this.material.useMetalness = false;
29
+ this.material.diffuse = this._diffuse;
30
+ this.diffuseMap = this._diffuseMap;
31
+ this.metalnessMap = this._metalnessMap;
32
+ this.normalMap = this._normalMap;
33
+ this.roughnessMap = this._roughnessMap;
34
+ this.material.update();
35
+ }
36
+
37
+ disconnectedCallback() {
38
+ if (this.material) {
39
+ this.material.destroy();
40
+ this.material = null;
41
+ }
42
+ }
43
+
44
+ setMap(map: string, property: 'diffuseMap' | 'metalnessMap' | 'normalMap' | 'glossMap') {
45
+ if (this.material) {
46
+ const asset = AssetElement.get(map);
47
+ if (asset) {
48
+ if (asset.loaded) {
49
+ this.material[property] = asset.resource as Texture;
50
+ this.material[property]!.anisotropy = 4;
51
+ } else {
52
+ asset.once('load', () => {
53
+ this.material![property] = asset.resource as Texture;
54
+ this.material![property]!.anisotropy = 4;
55
+ this.material!.update();
56
+ });
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ set diffuse(value: Color) {
63
+ this._diffuse = value;
64
+ if (this.material) {
65
+ this.material.diffuse = value;
66
+ }
67
+ }
68
+
69
+ get diffuse(): Color {
70
+ return this._diffuse;
71
+ }
72
+
73
+ set diffuseMap(value: string) {
74
+ this._diffuseMap = value;
75
+ this.setMap(value, 'diffuseMap');
76
+ }
77
+
78
+ get diffuseMap() {
79
+ return this._diffuseMap;
80
+ }
81
+
82
+ set metalnessMap(value: string) {
83
+ this._metalnessMap = value;
84
+ this.setMap(value, 'metalnessMap');
85
+ }
86
+
87
+ get metalnessMap() {
88
+ return this._metalnessMap;
89
+ }
90
+
91
+ set normalMap(value: string) {
92
+ this._normalMap = value;
93
+ this.setMap(value, 'normalMap');
94
+ }
95
+
96
+ get normalMap() {
97
+ return this._normalMap;
98
+ }
99
+
100
+ set roughnessMap(value: string) {
101
+ this._roughnessMap = value;
102
+ this.setMap(value, 'glossMap');
103
+ }
104
+
105
+ get roughnessMap() {
106
+ return this._roughnessMap;
107
+ }
108
+
109
+ static get(id: string) {
110
+ const materialElement = document.querySelector<MaterialElement>(`pc-material[id="${id}"]`);
111
+ return materialElement?.material;
112
+ }
113
+
114
+ static get observedAttributes() {
115
+ return ['diffuse', 'diffuse-map', 'metalness-map', 'normal-map', 'roughness-map'];
116
+ }
117
+
118
+ attributeChangedCallback(name: string, _oldValue: string, newValue: string) {
119
+ switch (name) {
120
+ case 'diffuse':
121
+ this.diffuse = parseColor(newValue);
122
+ break;
123
+ case 'diffuse-map':
124
+ this.diffuseMap = newValue;
125
+ break;
126
+ case 'metalness-map':
127
+ this.metalnessMap = newValue;
128
+ break;
129
+ case 'normal-map':
130
+ this.normalMap = newValue;
131
+ break;
132
+ case 'roughness-map':
133
+ this.roughnessMap = newValue;
134
+ break;
135
+ }
136
+ }
137
+ }
138
+
139
+ customElements.define('pc-material', MaterialElement);
140
+
141
+ export { MaterialElement };
package/src/model.ts CHANGED
@@ -1,111 +1,111 @@
1
- import { ContainerResource, Entity } from 'playcanvas';
2
-
3
- import { AssetElement } from './asset';
4
- import { AsyncElement } from './async-element';
5
-
6
- /**
7
- * The ModelElement interface provides properties and methods for manipulating
8
- * {@link https://developer.playcanvas.com/user-manual/web-components/tags/pc-model/ | `<pc-model>`} elements.
9
- * The ModelElement interface also inherits the properties and methods of the
10
- * {@link HTMLElement} interface.
11
- */
12
- class ModelElement extends AsyncElement {
13
- private _asset: string = '';
14
-
15
- private _entity: Entity | null = null;
16
-
17
- connectedCallback() {
18
- this._loadModel();
19
- this._onReady();
20
- }
21
-
22
- disconnectedCallback() {
23
- this._unloadModel();
24
- }
25
-
26
- private _instantiate(container: ContainerResource) {
27
- this._entity = container.instantiateRenderEntity();
28
-
29
- // @ts-ignore
30
- if (container.animations.length > 0) {
31
- this._entity.addComponent('anim');
32
- // @ts-ignore
33
- this._entity.anim.assignAnimation('animation', container.animations[0].resource);
34
- }
35
-
36
- const parentEntityElement = this.closestEntity;
37
- if (parentEntityElement) {
38
- parentEntityElement.ready().then(() => {
39
- parentEntityElement.entity!.addChild(this._entity!);
40
- });
41
- } else {
42
- const appElement = this.closestApp;
43
- if (appElement) {
44
- appElement.ready().then(() => {
45
- appElement.app!.root.addChild(this._entity!);
46
- });
47
- }
48
- }
49
- }
50
-
51
- private async _loadModel() {
52
- this._unloadModel();
53
-
54
- const appElement = await this.closestApp?.ready();
55
- const app = appElement?.app;
56
-
57
- const asset = AssetElement.get(this._asset);
58
- if (!asset) {
59
- return;
60
- }
61
-
62
- if (asset.loaded) {
63
- this._instantiate(asset.resource as ContainerResource);
64
- } else {
65
- asset.once('load', () => {
66
- this._instantiate(asset.resource as ContainerResource);
67
- });
68
- app!.assets.load(asset);
69
- }
70
- }
71
-
72
- private _unloadModel() {
73
- this._entity?.destroy();
74
- this._entity = null;
75
- }
76
-
77
- /**
78
- * Sets the id of the `pc-asset` to use for the model.
79
- * @param value - The asset ID.
80
- */
81
- set asset(value: string) {
82
- this._asset = value;
83
- if (this.isConnected) {
84
- this._loadModel();
85
- }
86
- }
87
-
88
- /**
89
- * Gets the id of the `pc-asset` to use for the model.
90
- * @returns The asset ID.
91
- */
92
- get asset(): string {
93
- return this._asset;
94
- }
95
-
96
- static get observedAttributes() {
97
- return ['asset'];
98
- }
99
-
100
- attributeChangedCallback(name: string, _oldValue: string, newValue: string) {
101
- switch (name) {
102
- case 'asset':
103
- this.asset = newValue;
104
- break;
105
- }
106
- }
107
- }
108
-
109
- customElements.define('pc-model', ModelElement);
110
-
111
- export { ModelElement };
1
+ import { ContainerResource, Entity } from 'playcanvas';
2
+
3
+ import { AssetElement } from './asset';
4
+ import { AsyncElement } from './async-element';
5
+
6
+ /**
7
+ * The ModelElement interface provides properties and methods for manipulating
8
+ * {@link https://developer.playcanvas.com/user-manual/web-components/tags/pc-model/ | `<pc-model>`} elements.
9
+ * The ModelElement interface also inherits the properties and methods of the
10
+ * {@link HTMLElement} interface.
11
+ */
12
+ class ModelElement extends AsyncElement {
13
+ private _asset: string = '';
14
+
15
+ private _entity: Entity | null = null;
16
+
17
+ connectedCallback() {
18
+ this._loadModel();
19
+ this._onReady();
20
+ }
21
+
22
+ disconnectedCallback() {
23
+ this._unloadModel();
24
+ }
25
+
26
+ private _instantiate(container: ContainerResource) {
27
+ this._entity = container.instantiateRenderEntity();
28
+
29
+ // @ts-ignore
30
+ if (container.animations.length > 0) {
31
+ this._entity.addComponent('anim');
32
+ // @ts-ignore
33
+ this._entity.anim.assignAnimation('animation', container.animations[0].resource);
34
+ }
35
+
36
+ const parentEntityElement = this.closestEntity;
37
+ if (parentEntityElement) {
38
+ parentEntityElement.ready().then(() => {
39
+ parentEntityElement.entity!.addChild(this._entity!);
40
+ });
41
+ } else {
42
+ const appElement = this.closestApp;
43
+ if (appElement) {
44
+ appElement.ready().then(() => {
45
+ appElement.app!.root.addChild(this._entity!);
46
+ });
47
+ }
48
+ }
49
+ }
50
+
51
+ private async _loadModel() {
52
+ this._unloadModel();
53
+
54
+ const appElement = await this.closestApp?.ready();
55
+ const app = appElement?.app;
56
+
57
+ const asset = AssetElement.get(this._asset);
58
+ if (!asset) {
59
+ return;
60
+ }
61
+
62
+ if (asset.loaded) {
63
+ this._instantiate(asset.resource as ContainerResource);
64
+ } else {
65
+ asset.once('load', () => {
66
+ this._instantiate(asset.resource as ContainerResource);
67
+ });
68
+ app!.assets.load(asset);
69
+ }
70
+ }
71
+
72
+ private _unloadModel() {
73
+ this._entity?.destroy();
74
+ this._entity = null;
75
+ }
76
+
77
+ /**
78
+ * Sets the id of the `pc-asset` to use for the model.
79
+ * @param value - The asset ID.
80
+ */
81
+ set asset(value: string) {
82
+ this._asset = value;
83
+ if (this.isConnected) {
84
+ this._loadModel();
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Gets the id of the `pc-asset` to use for the model.
90
+ * @returns The asset ID.
91
+ */
92
+ get asset(): string {
93
+ return this._asset;
94
+ }
95
+
96
+ static get observedAttributes() {
97
+ return ['asset'];
98
+ }
99
+
100
+ attributeChangedCallback(name: string, _oldValue: string, newValue: string) {
101
+ switch (name) {
102
+ case 'asset':
103
+ this.asset = newValue;
104
+ break;
105
+ }
106
+ }
107
+ }
108
+
109
+ customElements.define('pc-model', ModelElement);
110
+
111
+ export { ModelElement };