@pixi-ui-editor/runtime-pixi 0.1.1 → 0.3.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.
- package/README.md +46 -11
- package/dist/assets/fonts.d.ts.map +1 -1
- package/dist/assets/fonts.js +2 -2
- package/dist/assets/fonts.js.map +1 -1
- package/dist/assets/spine.js +1 -1
- package/dist/assets/spine.js.map +1 -1
- package/dist/assets/spine.test.d.ts +2 -0
- package/dist/assets/spine.test.d.ts.map +1 -0
- package/dist/assets/spine.test.js +42 -0
- package/dist/assets/spine.test.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +84 -6
- package/dist/index.test.js.map +1 -1
- package/dist/layout.d.ts +33 -6
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +64 -11
- package/dist/layout.js.map +1 -1
- package/dist/scene.d.ts +30 -3
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +62 -32
- package/dist/scene.js.map +1 -1
- package/dist/views/NodeView.d.ts +3 -2
- package/dist/views/NodeView.d.ts.map +1 -1
- package/dist/views/NodeView.js +11 -6
- package/dist/views/NodeView.js.map +1 -1
- package/dist/views/SpineNodeView.d.ts +7 -3
- package/dist/views/SpineNodeView.d.ts.map +1 -1
- package/dist/views/SpineNodeView.js +43 -7
- package/dist/views/SpineNodeView.js.map +1 -1
- package/dist/views/basic.d.ts +12 -4
- package/dist/views/basic.d.ts.map +1 -1
- package/dist/views/basic.js +39 -15
- package/dist/views/basic.js.map +1 -1
- package/dist/views/createNodeView.d.ts +7 -3
- package/dist/views/createNodeView.d.ts.map +1 -1
- package/dist/views/createNodeView.js +13 -4
- package/dist/views/createNodeView.js.map +1 -1
- package/package.json +3 -3
package/dist/views/basic.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type UINode } from "@pixi-ui-editor/schema";
|
|
1
|
+
import { type LayoutProfileId, type UINode } from "@pixi-ui-editor/schema";
|
|
2
2
|
import { Container, Texture } from "pixi.js";
|
|
3
3
|
import { NodeView } from "./NodeView.js";
|
|
4
4
|
export declare class ContainerNodeView extends NodeView {
|
|
@@ -13,17 +13,25 @@ export declare class LayoutGroupNodeView extends NodeView {
|
|
|
13
13
|
addLayoutChild<T extends Container[]>(...children: T): T[0];
|
|
14
14
|
protected syncContent(node: UINode, transform: UINode["transform"]): void;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Ноде-картинке источник не обязателен: без `assetId` она рисует белый прямоугольник своего размера,
|
|
18
|
+
* а серо-синяя заглушка остаётся признаком того, что назначенный ассет не загрузился.
|
|
19
|
+
*/
|
|
16
20
|
export declare class ImageNodeView extends NodeView {
|
|
17
|
-
constructor(assetId: string, textures: ReadonlyMap<string, Texture> | undefined);
|
|
21
|
+
constructor(assetId: string | undefined, textures: ReadonlyMap<string, Texture> | undefined);
|
|
18
22
|
protected syncContent(node: UINode, transform: UINode["transform"]): void;
|
|
19
23
|
}
|
|
20
24
|
export declare class TextNodeView extends NodeView {
|
|
21
25
|
private readonly fonts?;
|
|
22
26
|
constructor(text: string, fonts?: ReadonlyMap<string, string> | undefined);
|
|
23
|
-
protected syncContent(node: UINode, transform: UINode["transform"]): void;
|
|
27
|
+
protected syncContent(node: UINode, transform: UINode["transform"], profile: LayoutProfileId): void;
|
|
24
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Содержимое инстанса приходит обычными детьми из общего резолвера иерархии. Собственный контент
|
|
31
|
+
* нужен только как заметная заглушка, когда определение пресета отсутствует в документе.
|
|
32
|
+
*/
|
|
25
33
|
export declare class PrefabInstanceNodeView extends NodeView {
|
|
26
|
-
constructor(
|
|
34
|
+
constructor(resolved: boolean);
|
|
27
35
|
protected syncContent(_node: UINode, transform: UINode["transform"]): void;
|
|
28
36
|
}
|
|
29
37
|
//# sourceMappingURL=basic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAA0B,OAAO,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,SAAS,CAAC,WAAW,IAAI,IAAI;CAC9B;AAED,yHAAyH;AACzH,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAO9D,IAAI,YAAY,IAAI,SAAS,CAA+B;IAE5D,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAI3D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAW1E;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAM3F,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAmB1E;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAArC,IAAI,EAAE,MAAM,EAAmB,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,YAAA;IAK9E,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;CAYpG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,QAAQ;gBACtC,QAAQ,EAAE,OAAO;IAK7B,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAG3E"}
|
package/dist/views/basic.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Container, Graphics, Sprite, Text } from "pixi.js";
|
|
2
2
|
import { NodeView } from "./NodeView.js";
|
|
3
|
+
import { resolveTextStyle } from "../layout.js";
|
|
3
4
|
export class ContainerNodeView extends NodeView {
|
|
4
5
|
syncContent() { }
|
|
5
6
|
}
|
|
@@ -38,23 +39,41 @@ export class LayoutGroupNodeView extends NodeView {
|
|
|
38
39
|
this.background.setSize(transform.width, transform.height);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Ноде-картинке источник не обязателен: без `assetId` она рисует белый прямоугольник своего размера,
|
|
44
|
+
* а серо-синяя заглушка остаётся признаком того, что назначенный ассет не загрузился.
|
|
45
|
+
*/
|
|
41
46
|
export class ImageNodeView extends NodeView {
|
|
42
47
|
constructor(assetId, textures) {
|
|
43
48
|
super(textures);
|
|
44
|
-
const texture = this.textureFor(assetId);
|
|
49
|
+
const texture = assetId === undefined ? undefined : this.textureFor(assetId);
|
|
45
50
|
this.setContent(texture !== undefined ? new Sprite(texture) : new Graphics());
|
|
46
51
|
}
|
|
47
52
|
syncContent(node, transform) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
if (node.type !== "image")
|
|
54
|
+
return;
|
|
55
|
+
const texture = node.assetId === undefined ? undefined : this.textureFor(node.assetId);
|
|
56
|
+
// Sprite ↔ Graphics меняются местами прямо здесь: структурный ключ сцены не включает assetId,
|
|
57
|
+
// поэтому смена ассета (в том числе на None) не пересобирает view.
|
|
58
|
+
if (texture !== undefined) {
|
|
59
|
+
if (!(this.content instanceof Sprite))
|
|
60
|
+
this.setContent(new Sprite(texture));
|
|
61
|
+
const sprite = this.content;
|
|
62
|
+
// Keep the Sprite and its layout rectangle stable when its image asset changes.
|
|
63
|
+
if (sprite.texture !== texture)
|
|
64
|
+
sprite.texture = texture;
|
|
65
|
+
sprite.setSize(transform.width, transform.height);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (!(this.content instanceof Graphics))
|
|
69
|
+
this.setContent(new Graphics());
|
|
70
|
+
const graphics = this.content.clear().rect(0, 0, transform.width, transform.height);
|
|
71
|
+
if (node.assetId === undefined)
|
|
72
|
+
graphics.fill(0xffffff);
|
|
73
|
+
else
|
|
74
|
+
graphics.fill(0x4a5568).stroke({ width: 1, color: 0x94a3b8 });
|
|
75
|
+
}
|
|
76
|
+
this.content.alpha = node.opacity ?? 1;
|
|
58
77
|
}
|
|
59
78
|
}
|
|
60
79
|
export class TextNodeView extends NodeView {
|
|
@@ -64,11 +83,11 @@ export class TextNodeView extends NodeView {
|
|
|
64
83
|
this.fonts = fonts;
|
|
65
84
|
this.setContent(new Text({ text, style: { fontFamily: "Arial", fontSize: 24, fill: 0xffffff } }));
|
|
66
85
|
}
|
|
67
|
-
syncContent(node, transform) {
|
|
86
|
+
syncContent(node, transform, profile) {
|
|
68
87
|
if (node.type !== "text" || !(this.content instanceof Text))
|
|
69
88
|
return;
|
|
70
89
|
this.content.text = node.text;
|
|
71
|
-
const style = node
|
|
90
|
+
const style = resolveTextStyle(node, profile);
|
|
72
91
|
if (style === undefined)
|
|
73
92
|
return;
|
|
74
93
|
this.content.style = { fontFamily: style.fontAssetId === undefined ? style.fontFamily : this.fonts?.get(style.fontAssetId) ?? style.fontFamily, fontSize: style.fontSize, fontWeight: style.fontWeight, fontStyle: style.fontStyle, fill: style.fill, align: style.align, wordWrap: style.wordWrap, breakWords: style.breakWords, wordWrapWidth: transform.width, lineHeight: style.lineHeight, letterSpacing: style.letterSpacing, stroke: style.stroke === undefined ? undefined : { color: style.stroke.color, width: style.stroke.width } };
|
|
@@ -79,10 +98,15 @@ export class TextNodeView extends NodeView {
|
|
|
79
98
|
this.content.y = style.verticalAlign === "middle" ? (transform.height - bounds.height) / 2 - bounds.y : style.verticalAlign === "bottom" ? transform.height - bounds.height - bounds.y : -bounds.y;
|
|
80
99
|
}
|
|
81
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Содержимое инстанса приходит обычными детьми из общего резолвера иерархии. Собственный контент
|
|
103
|
+
* нужен только как заметная заглушка, когда определение пресета отсутствует в документе.
|
|
104
|
+
*/
|
|
82
105
|
export class PrefabInstanceNodeView extends NodeView {
|
|
83
|
-
constructor(
|
|
106
|
+
constructor(resolved) {
|
|
84
107
|
super();
|
|
85
|
-
|
|
108
|
+
if (!resolved)
|
|
109
|
+
this.setContent(new Graphics());
|
|
86
110
|
}
|
|
87
111
|
syncContent(_node, transform) {
|
|
88
112
|
if (this.content instanceof Graphics)
|
package/dist/views/basic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAW,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAW,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IACnC,WAAW,KAAU,CAAC;CACjC;AAED,yHAAyH;AACzH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC9B,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;IACzC,UAAU,CAAU;IAE5B,YAAY,QAAkD;QAC5D,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,2FAA2F;QAC3F,+EAA+E;QAC/E,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,YAAY,KAAgB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAE5D,cAAc,CAAwB,GAAG,QAAW;QAClD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClD,CAAC;IAES,WAAW,CAAC,IAAY,EAAE,SAA8B;QAChE,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO;QAChH,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAAC,CAAC;YAClI,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;aAC9G,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAA2B,EAAE,QAAkD;QACzF,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAChF,CAAC;IAES,WAAW,CAAC,IAAY,EAAE,SAA8B;QAChE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvF,8FAA8F;QAC9F,mEAAmE;QACnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,MAAM,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;YACtC,gFAAgF;YAChF,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,QAAQ,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAI,IAAI,CAAC,OAAoB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAClG,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBACnD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,OAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACG;IAA3C,YAAY,IAAY,EAAmB,KAAmC;QAC5E,KAAK,EAAE,CAAC;QADiC,UAAK,GAAL,KAAK,CAA8B;QAE5E,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACpG,CAAC;IAES,WAAW,CAAC,IAAY,EAAE,SAA8B,EAAE,OAAwB;QAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC;YAAE,OAAO;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAChhB,2FAA2F;QAC3F,2FAA2F;QAC3F,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAChI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9K,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACrM,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD,YAAY,QAAiB;QAC3B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,UAAU,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAES,WAAW,CAAC,KAAa,EAAE,SAA8B;QACjE,IAAI,IAAI,CAAC,OAAO,YAAY,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1H,CAAC;CACF"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { type ParticleEffectDefinition, type UINode } from "@pixi-ui-editor/schema";
|
|
1
|
+
import { type ParticleEffectDefinition, type SpineReferenceFrame, type UINode } from "@pixi-ui-editor/schema";
|
|
2
2
|
import { type SkeletonData } from "@esotericsoftware/spine-pixi-v8";
|
|
3
3
|
import type { Sound } from "@pixi/sound";
|
|
4
|
-
import {
|
|
4
|
+
import { Texture, type Ticker } from "pixi.js";
|
|
5
5
|
import { NodeView, type SceneInteractionMode } from "./NodeView.js";
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* `hasPrefab` только сообщает, существует ли определение пресета: содержимое инстанса приходит его
|
|
8
|
+
* обычными детьми из общего резолвера иерархии, а не отдельной веткой сборки.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createNodeView(node: UINode, interaction: SceneInteractionMode, textures?: ReadonlyMap<string, Texture>, spines?: ReadonlyMap<string, SkeletonData>, hasPrefab?: (prefabId: string) => boolean, fonts?: ReadonlyMap<string, string>, sounds?: ReadonlyMap<string, Sound>, effect?: ParticleEffectDefinition, spineReferenceFrame?: SpineReferenceFrame, ticker?: Ticker): NodeView;
|
|
7
11
|
/**
|
|
8
12
|
* Every asset a node references: the image, the Spine data, or each of a button's state images.
|
|
9
13
|
* Single source of truth for "which assets does this node use" — texture loading and the editor's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNodeView.d.ts","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,wBAAwB,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createNodeView.d.ts","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,wBAAwB,EAAE,KAAK,mBAAmB,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACjI,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAa,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1D,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAMpE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,wBAAwB,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CA6BjY;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA8C1D"}
|
|
@@ -6,7 +6,11 @@ import { ScrollViewNodeView } from "./ScrollViewNodeView.js";
|
|
|
6
6
|
import { SpineNodeView } from "./SpineNodeView.js";
|
|
7
7
|
import { ProgressBarNodeView, SliderNodeView } from "./ValueControlNodeViews.js";
|
|
8
8
|
import { ParticleEmitterNodeView } from "./ParticleEmitterNodeView.js";
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* `hasPrefab` только сообщает, существует ли определение пресета: содержимое инстанса приходит его
|
|
11
|
+
* обычными детьми из общего резолвера иерархии, а не отдельной веткой сборки.
|
|
12
|
+
*/
|
|
13
|
+
export function createNodeView(node, interaction, textures, spines, hasPrefab, fonts, sounds, effect, spineReferenceFrame, ticker) {
|
|
10
14
|
switch (node.type) {
|
|
11
15
|
case "container":
|
|
12
16
|
return new ContainerNodeView();
|
|
@@ -21,7 +25,7 @@ export function createNodeView(node, interaction, textures, spines, expandPrefab
|
|
|
21
25
|
case "text":
|
|
22
26
|
return new TextNodeView(node.text, fonts);
|
|
23
27
|
case "spine":
|
|
24
|
-
return new SpineNodeView(spines?.get(node.assetId), node.animation, node.loop ?? true);
|
|
28
|
+
return new SpineNodeView(spines?.get(node.assetId), node.animation, node.autoplay ?? true, node.loop ?? true, node.animationSpeed ?? 1, interaction === "authoring", spineReferenceFrame, ticker);
|
|
25
29
|
case "button":
|
|
26
30
|
return new ButtonNodeView(node, textures, interaction, sounds);
|
|
27
31
|
case "input":
|
|
@@ -33,7 +37,7 @@ export function createNodeView(node, interaction, textures, spines, expandPrefab
|
|
|
33
37
|
case "particle-emitter":
|
|
34
38
|
return effect === undefined ? new ContainerNodeView() : new ParticleEmitterNodeView(effect, textures);
|
|
35
39
|
case "prefab-instance":
|
|
36
|
-
return new PrefabInstanceNodeView(
|
|
40
|
+
return new PrefabInstanceNodeView(hasPrefab?.(node.prefabId) ?? false);
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
/**
|
|
@@ -44,6 +48,7 @@ export function createNodeView(node, interaction, textures, spines, expandPrefab
|
|
|
44
48
|
export function collectNodeAssetIds(node) {
|
|
45
49
|
switch (node.type) {
|
|
46
50
|
case "image":
|
|
51
|
+
return node.assetId === undefined ? [] : [node.assetId];
|
|
47
52
|
case "spine":
|
|
48
53
|
return [node.assetId];
|
|
49
54
|
case "button":
|
|
@@ -65,7 +70,11 @@ export function collectNodeAssetIds(node) {
|
|
|
65
70
|
case "scroll-view":
|
|
66
71
|
return [];
|
|
67
72
|
case "text":
|
|
68
|
-
return
|
|
73
|
+
return [...new Set([
|
|
74
|
+
node.style?.fontAssetId,
|
|
75
|
+
node.textStyleOverrides?.desktop?.fontAssetId,
|
|
76
|
+
node.textStyleOverrides?.mobile?.fontAssetId,
|
|
77
|
+
].filter((assetId) => assetId !== undefined))];
|
|
69
78
|
case "input": {
|
|
70
79
|
const ids = [];
|
|
71
80
|
if (node.backgroundAssetId !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNodeView.js","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"createNodeView.js","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixi-ui-editor/runtime-pixi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "PixiJS runtime that renders Pixi UI Editor scene documents in a game.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@esotericsoftware/spine-pixi-v8": "
|
|
24
|
+
"@esotericsoftware/spine-pixi-v8": "~4.2.119",
|
|
25
25
|
"@pixi/layout": "3.2.1",
|
|
26
26
|
"@pixi/sound": "^6.0.1",
|
|
27
27
|
"@pixi/ui": "2.3.2",
|
|
28
28
|
"pixi.js": "^8.19.0",
|
|
29
29
|
"yoga-layout": "^3.2.1",
|
|
30
|
-
"@pixi-ui-editor/schema": "0.
|
|
30
|
+
"@pixi-ui-editor/schema": "0.3.0"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "tsc -p tsconfig.json",
|