@pixi-ui-editor/runtime-pixi 0.3.0 → 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.
- package/README.md +81 -2
- package/dist/SceneViewport.d.ts +17 -0
- package/dist/SceneViewport.d.ts.map +1 -0
- package/dist/SceneViewport.js +35 -0
- package/dist/SceneViewport.js.map +1 -0
- package/dist/assets/bitmapFonts.d.ts +22 -0
- package/dist/assets/bitmapFonts.d.ts.map +1 -0
- package/dist/assets/bitmapFonts.js +75 -0
- package/dist/assets/bitmapFonts.js.map +1 -0
- package/dist/assets/cache.d.ts +31 -0
- package/dist/assets/cache.d.ts.map +1 -0
- package/dist/assets/cache.js +20 -0
- package/dist/assets/cache.js.map +1 -0
- package/dist/assets/fonts.d.ts +1 -1
- 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/loadTexture.d.ts +9 -0
- package/dist/assets/loadTexture.d.ts.map +1 -0
- package/dist/assets/loadTexture.js +14 -0
- package/dist/assets/loadTexture.js.map +1 -0
- package/dist/assets/textures.d.ts +4 -5
- package/dist/assets/textures.d.ts.map +1 -1
- package/dist/assets/textures.js +31 -20
- package/dist/assets/textures.js.map +1 -1
- package/dist/controls.d.ts +9 -1
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +23 -0
- package/dist/controls.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +95 -3
- package/dist/index.test.js.map +1 -1
- package/dist/layout.d.ts +10 -4
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +13 -0
- package/dist/layout.js.map +1 -1
- package/dist/localization.d.ts +42 -0
- package/dist/localization.d.ts.map +1 -0
- package/dist/localization.js +73 -0
- package/dist/localization.js.map +1 -0
- package/dist/scene.d.ts +24 -13
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +66 -14
- package/dist/scene.js.map +1 -1
- package/dist/views/ButtonNodeView.d.ts +16 -3
- package/dist/views/ButtonNodeView.d.ts.map +1 -1
- package/dist/views/ButtonNodeView.js +94 -27
- package/dist/views/ButtonNodeView.js.map +1 -1
- package/dist/views/CheckboxNodeView.d.ts +47 -0
- package/dist/views/CheckboxNodeView.d.ts.map +1 -0
- package/dist/views/CheckboxNodeView.js +127 -0
- package/dist/views/CheckboxNodeView.js.map +1 -0
- package/dist/views/NodeView.d.ts +8 -0
- package/dist/views/NodeView.d.ts.map +1 -1
- package/dist/views/NodeView.js +8 -0
- package/dist/views/NodeView.js.map +1 -1
- package/dist/views/StagedButtonNodeView.d.ts +81 -0
- package/dist/views/StagedButtonNodeView.d.ts.map +1 -0
- package/dist/views/StagedButtonNodeView.js +275 -0
- package/dist/views/StagedButtonNodeView.js.map +1 -0
- package/dist/views/basic.d.ts +97 -2
- package/dist/views/basic.d.ts.map +1 -1
- package/dist/views/basic.js +273 -8
- package/dist/views/basic.js.map +1 -1
- package/dist/views/createNodeView.d.ts +1 -1
- package/dist/views/createNodeView.d.ts.map +1 -1
- package/dist/views/createNodeView.js +30 -4
- package/dist/views/createNodeView.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { describeLocalizedText, isTextNode, resolveOwnerNodeGraph } from "@pixi-ui-editor/schema";
|
|
2
|
+
import { TextNodeView } from "./views/basic.js";
|
|
3
|
+
/**
|
|
4
|
+
* Локализация уже построенной сцены.
|
|
5
|
+
*
|
|
6
|
+
* Контроллер владеет только строками: он мутирует существующие `TextNodeView` через их
|
|
7
|
+
* инкрементальный `setText`, поэтому смена локали, внешнего переводчика, параметров или самой копии
|
|
8
|
+
* документа не пересобирает root, не меняет identity `NodeView` и не трогает live-состояние
|
|
9
|
+
* контролов. Fallback и интерполяция целиком принадлежат `@pixi-ui-editor/schema`.
|
|
10
|
+
*/
|
|
11
|
+
export class SceneLocalization {
|
|
12
|
+
document;
|
|
13
|
+
scene;
|
|
14
|
+
views;
|
|
15
|
+
nodes;
|
|
16
|
+
requestedLocale;
|
|
17
|
+
translate;
|
|
18
|
+
params;
|
|
19
|
+
constructor(document, scene, views, options = {}) {
|
|
20
|
+
this.document = document;
|
|
21
|
+
this.scene = scene;
|
|
22
|
+
this.views = views;
|
|
23
|
+
this.nodes = collectTextNodes(document, scene);
|
|
24
|
+
this.requestedLocale = options.locale;
|
|
25
|
+
this.translate = options.translate;
|
|
26
|
+
this.params = options.params;
|
|
27
|
+
this.refresh();
|
|
28
|
+
}
|
|
29
|
+
get catalog() { return this.document.localization; }
|
|
30
|
+
get baseLocale() { return this.document.localization.baseLocale; }
|
|
31
|
+
get locale() { return this.requestedLocale ?? this.baseLocale; }
|
|
32
|
+
/** Полный каталог документа: словари всех локалей, а не только активной. */
|
|
33
|
+
entries() { return this.document.localization.entries; }
|
|
34
|
+
setLocale(locale) { this.requestedLocale = locale; this.refresh(); }
|
|
35
|
+
setTranslate(translate) { this.translate = translate; this.refresh(); }
|
|
36
|
+
setParams(params) { this.params = params; this.refresh(); }
|
|
37
|
+
/**
|
|
38
|
+
* Новая иммутабельная копия документа: редакторский store заменяет документ целиком, и переводы
|
|
39
|
+
* вместе с key references обязаны обновиться без пересборки сцены.
|
|
40
|
+
*/
|
|
41
|
+
syncDocument(document) {
|
|
42
|
+
this.document = document;
|
|
43
|
+
this.nodes = collectTextNodes(document, this.scene);
|
|
44
|
+
this.refresh();
|
|
45
|
+
}
|
|
46
|
+
refresh() {
|
|
47
|
+
for (const node of this.nodes) {
|
|
48
|
+
const view = this.views.get(node.id);
|
|
49
|
+
if (!(view instanceof TextNodeView))
|
|
50
|
+
continue;
|
|
51
|
+
// Вся цепочка, включая случай «ключа нет», принадлежит резолверу схемы: `source: "literal"`
|
|
52
|
+
// и означает, что нода локализацию не запрашивает и снова показывает авторскую строку.
|
|
53
|
+
const resolution = describeLocalizedText({ text: node.text, textKey: node.textKey, catalog: this.document.localization, locale: this.locale, translate: this.translate, params: this.params });
|
|
54
|
+
if (resolution.source === "literal") {
|
|
55
|
+
view.setLocalizedText(undefined);
|
|
56
|
+
view.setText(resolution.value);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
view.setLocalizedText(resolution.value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Текстовые ноды сцены, включая развёрнутые пресеты.
|
|
65
|
+
*
|
|
66
|
+
* Синтетическая сцена prefab-view в присланном документе отсутствует, поэтому её описание берётся
|
|
67
|
+
* из захваченного объекта: определения пресетов при этом всё равно читаются из нового документа.
|
|
68
|
+
*/
|
|
69
|
+
function collectTextNodes(document, scene) {
|
|
70
|
+
const current = document.scenes.find((candidate) => candidate.id === scene.id) ?? scene;
|
|
71
|
+
return resolveOwnerNodeGraph(document, current).nodes.filter(isTextNode);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=localization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"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"}
|
package/dist/scene.d.ts
CHANGED
|
@@ -2,8 +2,11 @@ import { type SkeletonData } from "@esotericsoftware/spine-pixi-v8";
|
|
|
2
2
|
import { type EffectDefinition, type LayoutProfileId, type ProjectDocument, type Scene, type SpineReferenceFrame, type UINode } from "@pixi-ui-editor/schema";
|
|
3
3
|
import { Container, Texture, type Ticker } from "pixi.js";
|
|
4
4
|
import { type FileUrlResolver } from "./assets/textures.js";
|
|
5
|
+
import type { SceneAssetCache } from "./assets/cache.js";
|
|
5
6
|
import { type LayoutSize } from "./layout.js";
|
|
6
7
|
import { type SceneInteractionMode } from "./views/NodeView.js";
|
|
8
|
+
import { SceneLocalization, type SceneLocalizationOptions } from "./localization.js";
|
|
9
|
+
import { SceneViewport } from "./SceneViewport.js";
|
|
7
10
|
import type { Sound } from "@pixi/sound";
|
|
8
11
|
export type BuildSceneViewOptions = {
|
|
9
12
|
/** Explicit: an editor canvas must pass "authoring", Preview and the consuming app "runtime". */
|
|
@@ -11,6 +14,7 @@ export type BuildSceneViewOptions = {
|
|
|
11
14
|
textures?: ReadonlyMap<string, Texture>;
|
|
12
15
|
spines?: ReadonlyMap<string, SkeletonData>;
|
|
13
16
|
fonts?: ReadonlyMap<string, string>;
|
|
17
|
+
bitmapFonts?: ReadonlyMap<string, string>;
|
|
14
18
|
sounds?: ReadonlyMap<string, Sound>;
|
|
15
19
|
/**
|
|
16
20
|
* The host's own Application ticker, driving self-updating content such as Spine skeletons.
|
|
@@ -20,12 +24,21 @@ export type BuildSceneViewOptions = {
|
|
|
20
24
|
ticker?: Ticker;
|
|
21
25
|
/** Called after Yoga changes a managed rectangle; authoring hosts use it to refresh overlays. */
|
|
22
26
|
onLayout?: () => void;
|
|
27
|
+
/**
|
|
28
|
+
* Начальное состояние локализации. Опция необязательна: при наличии `Text.textKey` base locale
|
|
29
|
+
* каталога применяется и без неё, а документ без ключей выглядит ровно как раньше.
|
|
30
|
+
*/
|
|
31
|
+
localization?: SceneLocalizationOptions;
|
|
32
|
+
/** Internal host boundary override: prefab views are spawnable content, not screen viewports. */
|
|
33
|
+
clipToViewport?: boolean;
|
|
23
34
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
root: Container;
|
|
35
|
+
export type SceneViewResult = {
|
|
36
|
+
root: SceneViewport;
|
|
27
37
|
nodeViews: Map<string, Container>;
|
|
38
|
+
localization: SceneLocalization;
|
|
28
39
|
};
|
|
40
|
+
/** Builds a PixiJS display tree for a scene without depending on DOM or editor state. */
|
|
41
|
+
export declare function buildSceneView(document: ProjectDocument, sceneId: string, profile: LayoutProfileId, options: BuildSceneViewOptions): SceneViewResult;
|
|
29
42
|
/**
|
|
30
43
|
* Applies a node's resolved transform, visibility, and content to an existing display object,
|
|
31
44
|
* so editors can update views in place without rebuilding the scene tree.
|
|
@@ -43,26 +56,24 @@ export type PrefabViewConfiguration = Pick<Extract<UINode, {
|
|
|
43
56
|
instanceId?: string;
|
|
44
57
|
};
|
|
45
58
|
/** Builds a fresh runtime prefab instance without requiring it to already exist in a scene. */
|
|
46
|
-
export declare function buildPrefabView(document: ProjectDocument, prefabId: string, profile: LayoutProfileId, options: BuildSceneViewOptions, configuration?: PrefabViewConfiguration): {
|
|
47
|
-
root: Container;
|
|
48
|
-
nodeViews: Map<string, Container>;
|
|
59
|
+
export declare function buildPrefabView(document: ProjectDocument, prefabId: string, profile: LayoutProfileId, options: BuildSceneViewOptions, configuration?: PrefabViewConfiguration): SceneViewResult & {
|
|
49
60
|
instanceId: string;
|
|
50
61
|
};
|
|
51
62
|
/** Loads a prefab's assets and returns a fresh display tree suitable for dynamic game-code spawning. */
|
|
52
63
|
export declare function loadPrefabView(document: ProjectDocument, prefabId: string, profile: LayoutProfileId, resolveFileUrl: FileUrlResolver, options: {
|
|
53
64
|
interaction: SceneInteractionMode;
|
|
54
65
|
ticker?: Ticker;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
localization?: SceneLocalizationOptions;
|
|
67
|
+
assetCache?: SceneAssetCache;
|
|
68
|
+
}, configuration?: PrefabViewConfiguration): Promise<SceneViewResult & {
|
|
58
69
|
instanceId: string;
|
|
59
70
|
}>;
|
|
60
71
|
/** Loads a scene's textures and Spine data, then builds its display tree in one call. */
|
|
61
72
|
export declare function loadSceneView(document: ProjectDocument, sceneId: string, profile: LayoutProfileId, resolveFileUrl: FileUrlResolver, options: {
|
|
62
73
|
interaction: SceneInteractionMode;
|
|
63
74
|
ticker?: Ticker;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}>;
|
|
75
|
+
localization?: SceneLocalizationOptions;
|
|
76
|
+
clipToViewport?: boolean;
|
|
77
|
+
assetCache?: SceneAssetCache;
|
|
78
|
+
}): Promise<SceneViewResult>;
|
|
68
79
|
//# sourceMappingURL=scene.d.ts.map
|
package/dist/scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
|
package/dist/scene.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import { createStableId, isLayoutGroup, isParticleEffect, resolveOwnerNodeGraph } from "@pixi-ui-editor/schema";
|
|
1
|
+
import { createStableId, isLayoutGroup, isParticleEffect, resolveLayoutGroupSettings, resolveOwnerNodeGraph } from "@pixi-ui-editor/schema";
|
|
2
2
|
import { Container } from "pixi.js";
|
|
3
3
|
import { loadSceneSpines } from "./assets/spine.js";
|
|
4
4
|
import { loadSceneTextures } from "./assets/textures.js";
|
|
5
5
|
import { loadSceneFonts } from "./assets/fonts.js";
|
|
6
|
+
import { loadSceneBitmapFonts } from "./assets/bitmapFonts.js";
|
|
6
7
|
import { getCanvasLogicalSize, getCanvasScale, resolveAnchoredTransform, resolveProfileTransform } from "./layout.js";
|
|
7
8
|
import { NodeView } from "./views/NodeView.js";
|
|
9
|
+
import { CheckboxNodeView } from "./views/CheckboxNodeView.js";
|
|
8
10
|
import { createNodeView } from "./views/createNodeView.js";
|
|
9
11
|
import { applyLayoutGroup, applyLayoutItem, createGridLineBreak, initializePixiLayout, LayoutItemContainer } from "./layoutGroups.js";
|
|
10
12
|
import { LayoutGroupNodeView } from "./views/basic.js";
|
|
11
13
|
import { ScrollItemContainer } from "./scrollView.js";
|
|
12
14
|
import { ScrollViewNodeView } from "./views/ScrollViewNodeView.js";
|
|
13
15
|
import { SpineNodeView } from "./views/SpineNodeView.js";
|
|
16
|
+
import { SceneLocalization } from "./localization.js";
|
|
17
|
+
import { SceneViewport } from "./SceneViewport.js";
|
|
14
18
|
function spineReferenceFrameFor(document, node) {
|
|
15
19
|
if (node.type !== "spine")
|
|
16
20
|
return undefined;
|
|
@@ -20,7 +24,7 @@ function spineReferenceFrameFor(document, node) {
|
|
|
20
24
|
/** Builds a PixiJS display tree for a scene without depending on DOM or editor state. */
|
|
21
25
|
export function buildSceneView(document, sceneId, profile, options) {
|
|
22
26
|
initializePixiLayout();
|
|
23
|
-
const { interaction, textures, spines, fonts, sounds, ticker, onLayout } = options;
|
|
27
|
+
const { interaction, textures, spines, fonts, bitmapFonts, sounds, ticker, onLayout } = options;
|
|
24
28
|
const scene = document.scenes.find((candidate) => candidate.id === sceneId);
|
|
25
29
|
if (scene === undefined) {
|
|
26
30
|
throw new Error(`Scene '${sceneId}' does not exist in the project document.`);
|
|
@@ -44,16 +48,24 @@ export function buildSceneView(document, sceneId, profile, options) {
|
|
|
44
48
|
}
|
|
45
49
|
const resolved = resolveProfileTransform(node, profile);
|
|
46
50
|
const transform = resolveAnchoredTransform(resolved.transform, parentSize);
|
|
47
|
-
const view = createNodeView(node, interaction, textures, spines, (prefabId) => prefabIds.has(prefabId), fonts, sounds, node.type === "particle-emitter" ? document.effects.find((effect) => effect.id === node.effectId && isParticleEffect(effect)) : undefined, spineReferenceFrameFor(document, node), ticker);
|
|
51
|
+
const view = createNodeView(node, interaction, textures, spines, (prefabId) => prefabIds.has(prefabId), fonts, sounds, node.type === "particle-emitter" ? document.effects.find((effect) => effect.id === node.effectId && isParticleEffect(effect)) : undefined, spineReferenceFrameFor(document, node), ticker, bitmapFonts);
|
|
48
52
|
if (isLayoutGroup(node))
|
|
49
53
|
applyLayoutGroup(view, node, profile, parentSize);
|
|
50
54
|
// Yoga owns only the group's inner layoutContent; the outer NodeView keeps authored transform.
|
|
51
55
|
view.update(node, profile, parentSize);
|
|
52
56
|
nodeViews.set(node.id, view);
|
|
53
57
|
// Прямые дети корня сцены разрешают якоря относительно логического Canvas, а не размера корня.
|
|
58
|
+
// Прямой ребёнок grid-layout (сам `node` здесь) не владеет своим отрисованным размером: Unity-подобная
|
|
59
|
+
// фиксированная ячейка полностью переопределяет authored transform (см. applyLayoutItem). Его
|
|
60
|
+
// собственным потомкам нужен именно cellWidth/cellHeight, а не anchor-resolved authored-размер —
|
|
61
|
+
// иначе они не отслеживают изменение Cell width/height и якорятся относительно устаревшего размера.
|
|
62
|
+
const gridParent = node.parentId === null ? undefined : nodesById.get(node.parentId);
|
|
63
|
+
const gridCell = gridParent?.type === "grid-layout" ? resolveLayoutGroupSettings(gridParent, profile) : undefined;
|
|
54
64
|
const childSize = node.parentId === null
|
|
55
65
|
? rootSize
|
|
56
|
-
:
|
|
66
|
+
: gridCell !== undefined
|
|
67
|
+
? { width: gridCell.cellWidth, height: gridCell.cellHeight }
|
|
68
|
+
: { width: transform.width, height: transform.height };
|
|
57
69
|
for (const [childIndex, childId] of node.children.entries()) {
|
|
58
70
|
const childNode = nodesById.get(childId);
|
|
59
71
|
const childView = buildNode(childId, childSize);
|
|
@@ -92,9 +104,44 @@ export function buildSceneView(document, sceneId, profile, options) {
|
|
|
92
104
|
};
|
|
93
105
|
const canvasRoot = buildOwner(canvasSize);
|
|
94
106
|
canvasRoot.scale.set(canvasScale);
|
|
95
|
-
const hostRoot = new
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
const hostRoot = new SceneViewport(canvasRoot, screenSize, options.clipToViewport ?? interaction === "runtime");
|
|
108
|
+
// Контроллер применяет переводы сразу к уже созданным views, поэтому keyed Text показывает
|
|
109
|
+
// базовую локаль без единого дополнительного вызова со стороны хоста.
|
|
110
|
+
const localization = new SceneLocalization(document, scene, nodeViews, options.localization);
|
|
111
|
+
wireCheckboxGroups(owner.nodes, nodeViews);
|
|
112
|
+
return { root: hostRoot, nodeViews, localization };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Authored `group` gives sibling checkboxes radio-button behavior: checking one force-unchecks its
|
|
116
|
+
* live group-mates (same `parentId`, same `group`), without touching the document. Runs once per
|
|
117
|
+
* scene build; `CheckboxNodeView.forceCheck` never re-emits `onCheck`, so this can't recurse.
|
|
118
|
+
*/
|
|
119
|
+
function wireCheckboxGroups(nodes, nodeViews) {
|
|
120
|
+
const byGroup = new Map();
|
|
121
|
+
for (const node of nodes) {
|
|
122
|
+
if (node.type !== "checkbox" || node.group === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
const view = nodeViews.get(node.id);
|
|
125
|
+
if (!(view instanceof CheckboxNodeView))
|
|
126
|
+
continue;
|
|
127
|
+
const key = `${node.parentId ?? ""}::${node.group}`;
|
|
128
|
+
const group = byGroup.get(key) ?? [];
|
|
129
|
+
group.push(view);
|
|
130
|
+
byGroup.set(key, group);
|
|
131
|
+
}
|
|
132
|
+
for (const group of byGroup.values()) {
|
|
133
|
+
if (group.length < 2)
|
|
134
|
+
continue;
|
|
135
|
+
for (const view of group) {
|
|
136
|
+
view.onCheck.connect((checked) => {
|
|
137
|
+
if (!checked)
|
|
138
|
+
return;
|
|
139
|
+
for (const other of group)
|
|
140
|
+
if (other !== view)
|
|
141
|
+
other.forceCheck(false);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
98
145
|
}
|
|
99
146
|
/**
|
|
100
147
|
* Applies a node's resolved transform, visibility, and content to an existing display object,
|
|
@@ -158,20 +205,25 @@ function prefabScene(document, prefabId, configuration = {}) {
|
|
|
158
205
|
/** Builds a fresh runtime prefab instance without requiring it to already exist in a scene. */
|
|
159
206
|
export function buildPrefabView(document, prefabId, profile, options, configuration = {}) {
|
|
160
207
|
const synthetic = prefabScene(document, prefabId, configuration);
|
|
161
|
-
return { ...buildSceneView(synthetic.document, synthetic.sceneId, profile, options), instanceId: synthetic.instanceId };
|
|
208
|
+
return { ...buildSceneView(synthetic.document, synthetic.sceneId, profile, { ...options, clipToViewport: false }), instanceId: synthetic.instanceId };
|
|
162
209
|
}
|
|
163
210
|
/** Loads a prefab's assets and returns a fresh display tree suitable for dynamic game-code spawning. */
|
|
164
211
|
export async function loadPrefabView(document, prefabId, profile, resolveFileUrl, options, configuration = {}) {
|
|
165
212
|
const synthetic = prefabScene(document, prefabId, configuration);
|
|
166
|
-
return { ...await loadSceneView(synthetic.document, synthetic.sceneId, profile, resolveFileUrl, options), instanceId: synthetic.instanceId };
|
|
213
|
+
return { ...await loadSceneView(synthetic.document, synthetic.sceneId, profile, resolveFileUrl, { ...options, clipToViewport: false }), instanceId: synthetic.instanceId };
|
|
167
214
|
}
|
|
168
215
|
/** Loads a scene's textures and Spine data, then builds its display tree in one call. */
|
|
169
216
|
export async function loadSceneView(document, sceneId, profile, resolveFileUrl, options) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
217
|
+
// Без assetCache каждый вызов начинает с пустых кэшей: для одиночной загрузки сцены это нормально, а вот
|
|
218
|
+
// игровой код, который поднимает пресеты по одному, обязан передать собственный кэш — иначе один и тот же
|
|
219
|
+
// скелет, атлас и текстура парсятся заново на каждую вьюху и дублируются в видеопамяти.
|
|
220
|
+
const cache = options.assetCache;
|
|
221
|
+
const [textures, spines, fonts, bitmapFonts] = await Promise.all([
|
|
222
|
+
loadSceneTextures(document, sceneId, (asset) => (asset.type === "image" ? resolveFileUrl(asset.source.uri) : undefined), resolveFileUrl, cache?.textures, cache?.spritesheets, cache?.bitmapFonts),
|
|
223
|
+
loadSceneSpines(document, sceneId, resolveFileUrl, cache?.spines),
|
|
224
|
+
loadSceneFonts(document, sceneId, resolveFileUrl, cache?.fonts),
|
|
225
|
+
loadSceneBitmapFonts(document, sceneId, resolveFileUrl, cache?.bitmapFonts),
|
|
174
226
|
]);
|
|
175
|
-
return buildSceneView(document, sceneId, profile, { interaction: options.interaction, textures, spines, fonts, ticker: options.ticker });
|
|
227
|
+
return buildSceneView(document, sceneId, profile, { interaction: options.interaction, textures, spines, fonts, bitmapFonts, ticker: options.ticker, localization: options.localization, clipToViewport: options.clipToViewport });
|
|
176
228
|
}
|
|
177
229
|
//# sourceMappingURL=scene.js.map
|
package/dist/scene.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ButtonStateKey, type UINode } from "@pixi-ui-editor/schema";
|
|
1
|
+
import { type ButtonStateKey, type LayoutPadding, type UINode } from "@pixi-ui-editor/schema";
|
|
2
2
|
import { FancyButton } from "@pixi/ui";
|
|
3
3
|
import type { Sound } from "@pixi/sound";
|
|
4
4
|
import { Texture } from "pixi.js";
|
|
@@ -10,18 +10,31 @@ export type ButtonNode = Extract<UINode, {
|
|
|
10
10
|
* Adapts a button node to `@pixi/ui`'s `FancyButton`, which owns the pointer state machine —
|
|
11
11
|
* this class never reimplements it. Optional states fall back to the normal image, and runtime
|
|
12
12
|
* changes to `enabled` or the current state stay in the view: they never touch the document.
|
|
13
|
+
*
|
|
14
|
+
* `nineSlice`, when set, applies the same borders to all four state views (`NineSliceSprite`
|
|
15
|
+
* instead of `Sprite`) — the button's frame shape is normally the same regardless of which state
|
|
16
|
+
* image is currently shown.
|
|
13
17
|
*/
|
|
14
18
|
export declare class ButtonNodeView extends NodeView {
|
|
15
|
-
private
|
|
16
|
-
private
|
|
19
|
+
private button;
|
|
20
|
+
private stateViews;
|
|
17
21
|
private readonly interaction;
|
|
18
22
|
private readonly sounds;
|
|
19
23
|
private soundAssetIds;
|
|
20
24
|
private enabledState;
|
|
21
25
|
constructor(node: ButtonNode, textures: ReadonlyMap<string, Texture> | undefined, interaction: SceneInteractionMode, sounds?: ReadonlyMap<string, Sound>);
|
|
26
|
+
private static createStateView;
|
|
27
|
+
/**
|
|
28
|
+
* (Re)builds `FancyButton` and its four state views. `FancyButton` has no API to replace a view
|
|
29
|
+
* after construction, so any change to a view's *type* — nine-slice toggled, or an asset
|
|
30
|
+
* finishing an async load — goes through here instead of `syncContent`'s cheap in-place path.
|
|
31
|
+
*/
|
|
32
|
+
private buildButton;
|
|
22
33
|
/** In authoring mode `enabled` may only drive the visuals: `FancyButton` couples it to `eventMode`. */
|
|
23
34
|
private applyEnabled;
|
|
24
35
|
protected syncContent(node: UINode, transform: UINode["transform"]): void;
|
|
36
|
+
/** Editor-only live preview of nine-slice border edits while dragging the canvas gizmo. */
|
|
37
|
+
previewNineSlice(nineSlice: LayoutPadding): void;
|
|
25
38
|
get enabled(): boolean;
|
|
26
39
|
set enabled(value: boolean);
|
|
27
40
|
get state(): ButtonStateKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonNodeView.d.ts","sourceRoot":"","sources":["../../src/views/ButtonNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ButtonNodeView.d.ts","sourceRoot":"","sources":["../../src/views/ButtonNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAgD,OAAO,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAK7D;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,YAAY,CAAU;gBAElB,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;IAUxJ,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA6BnB,uGAAuG;IACvG,OAAO,CAAC,YAAY;IAMpB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAoDzE,2FAA2F;IAC3F,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAWhD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,mGAAmG;IACnG,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIrC,IAAI,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,CAAgC;IACrE,IAAI,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,CAA+B;IAClE,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,CAA6B;IAC5D,IAAI,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,CAAgC;IACrE,IAAI,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,CAA8B;CAChE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BUTTON_STATE_KEYS } from "@pixi-ui-editor/schema";
|
|
2
2
|
import { FancyButton } from "@pixi/ui";
|
|
3
|
-
import { Graphics, Sprite } from "pixi.js";
|
|
3
|
+
import { Graphics, NineSliceSprite, Sprite } from "pixi.js";
|
|
4
4
|
import { NodeView } from "./NodeView.js";
|
|
5
5
|
const FANCY_STATE_BY_KEY = { normal: "default", hover: "hover", pressed: "pressed", disabled: "disabled" };
|
|
6
6
|
const KEY_BY_FANCY_STATE = { default: "normal", hover: "hover", pressed: "pressed", disabled: "disabled" };
|
|
@@ -8,6 +8,10 @@ const KEY_BY_FANCY_STATE = { default: "normal", hover: "hover", pressed: "presse
|
|
|
8
8
|
* Adapts a button node to `@pixi/ui`'s `FancyButton`, which owns the pointer state machine —
|
|
9
9
|
* this class never reimplements it. Optional states fall back to the normal image, and runtime
|
|
10
10
|
* changes to `enabled` or the current state stay in the view: they never touch the document.
|
|
11
|
+
*
|
|
12
|
+
* `nineSlice`, when set, applies the same borders to all four state views (`NineSliceSprite`
|
|
13
|
+
* instead of `Sprite`) — the button's frame shape is normally the same regardless of which state
|
|
14
|
+
* image is currently shown.
|
|
11
15
|
*/
|
|
12
16
|
export class ButtonNodeView extends NodeView {
|
|
13
17
|
button;
|
|
@@ -21,34 +25,51 @@ export class ButtonNodeView extends NodeView {
|
|
|
21
25
|
this.interaction = interaction;
|
|
22
26
|
this.sounds = sounds;
|
|
23
27
|
this.soundAssetIds = node.sounds;
|
|
28
|
+
this.enabledState = node.enabled;
|
|
29
|
+
this.buildButton(node);
|
|
30
|
+
this.applyEnabled(node.enabled);
|
|
31
|
+
}
|
|
32
|
+
static createStateView(texture, nineSlice) {
|
|
33
|
+
if (texture === undefined)
|
|
34
|
+
return new Graphics();
|
|
35
|
+
return nineSlice === undefined
|
|
36
|
+
? new Sprite(texture)
|
|
37
|
+
: new NineSliceSprite({ texture, leftWidth: nineSlice.left, topHeight: nineSlice.top, rightWidth: nineSlice.right, bottomHeight: nineSlice.bottom });
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* (Re)builds `FancyButton` and its four state views. `FancyButton` has no API to replace a view
|
|
41
|
+
* after construction, so any change to a view's *type* — nine-slice toggled, or an asset
|
|
42
|
+
* finishing an async load — goes through here instead of `syncContent`'s cheap in-place path.
|
|
43
|
+
*/
|
|
44
|
+
buildButton(node) {
|
|
45
|
+
const nineSlice = node.nineSlice;
|
|
46
|
+
const normalTexture = this.textureFor(node.states.normalAssetId);
|
|
24
47
|
const stateViews = {};
|
|
25
|
-
const normalTexture = textures?.get(node.states.normalAssetId);
|
|
26
48
|
const viewFor = (state, assetId) => {
|
|
27
|
-
const texture = (assetId === undefined ? undefined :
|
|
28
|
-
const view = texture
|
|
49
|
+
const texture = (assetId === undefined ? undefined : this.textureFor(assetId)) ?? normalTexture;
|
|
50
|
+
const view = ButtonNodeView.createStateView(texture, nineSlice);
|
|
29
51
|
stateViews[state] = view;
|
|
30
52
|
return view;
|
|
31
53
|
};
|
|
32
|
-
|
|
54
|
+
const button = new FancyButton({
|
|
33
55
|
defaultView: viewFor("normal", node.states.normalAssetId),
|
|
34
56
|
hoverView: viewFor("hover", node.states.hoverAssetId),
|
|
35
57
|
pressedView: viewFor("pressed", node.states.pressedAssetId),
|
|
36
58
|
disabledView: viewFor("disabled", node.states.disabledAssetId),
|
|
37
59
|
});
|
|
38
|
-
this.stateViews = stateViews;
|
|
39
60
|
// Authoring-сцена инертна: FancyButton уже включил себе eventMode "static", снимаем его до applyEnabled.
|
|
40
61
|
// Выделение и drag при этом не страдают: попадание ловит hitArea базового NodeView, а не это поддерево.
|
|
41
|
-
if (interaction === "authoring")
|
|
42
|
-
|
|
43
|
-
else if (sounds !== undefined) {
|
|
44
|
-
|
|
62
|
+
if (this.interaction === "authoring")
|
|
63
|
+
button.eventMode = "none";
|
|
64
|
+
else if (this.sounds !== undefined) {
|
|
65
|
+
button.onPress.connect(() => { const result = this.soundAssetIds?.pressAssetId === undefined ? undefined : this.sounds?.get(this.soundAssetIds.pressAssetId)?.play(); if (result instanceof Promise)
|
|
45
66
|
void result.catch(() => undefined); });
|
|
46
|
-
|
|
67
|
+
button.onHover.connect(() => { const result = this.soundAssetIds?.hoverAssetId === undefined ? undefined : this.sounds?.get(this.soundAssetIds.hoverAssetId)?.play(); if (result instanceof Promise)
|
|
47
68
|
void result.catch(() => undefined); });
|
|
48
69
|
}
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.setContent(
|
|
70
|
+
this.button = button;
|
|
71
|
+
this.stateViews = stateViews;
|
|
72
|
+
this.setContent(button);
|
|
52
73
|
}
|
|
53
74
|
/** In authoring mode `enabled` may only drive the visuals: `FancyButton` couples it to `eventMode`. */
|
|
54
75
|
applyEnabled(enabled) {
|
|
@@ -62,26 +83,72 @@ export class ButtonNodeView extends NodeView {
|
|
|
62
83
|
if (node.type !== "button")
|
|
63
84
|
return;
|
|
64
85
|
this.soundAssetIds = node.sounds;
|
|
65
|
-
const
|
|
86
|
+
const nineSlice = node.nineSlice;
|
|
87
|
+
const normalTexture = this.textureFor(node.states.normalAssetId);
|
|
88
|
+
// A state view's required *type* (Graphics/Sprite/NineSliceSprite) may no longer match what's
|
|
89
|
+
// needed — nine-slice toggled, or a texture finished loading after this view had to fall back
|
|
90
|
+
// to Graphics. FancyButton can't swap a view after construction, so that goes through a full
|
|
91
|
+
// rebuild; everything else (texture identity, border values, size) updates the live views in
|
|
92
|
+
// place, which is the path a nine-slice gizmo drag runs every frame.
|
|
93
|
+
let needsRebuild = false;
|
|
66
94
|
for (const state of BUTTON_STATE_KEYS) {
|
|
67
|
-
const view = this.stateViews[state];
|
|
68
95
|
const assetId = node.states[`${state}AssetId`];
|
|
69
|
-
const texture = (assetId === undefined ? undefined : this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
const texture = (assetId === undefined ? undefined : this.textureFor(assetId)) ?? normalTexture;
|
|
97
|
+
const view = this.stateViews[state];
|
|
98
|
+
const wantsNineSlice = texture !== undefined && nineSlice !== undefined;
|
|
99
|
+
const matches = texture === undefined ? view instanceof Graphics : wantsNineSlice ? view instanceof NineSliceSprite : view instanceof Sprite && !(view instanceof NineSliceSprite);
|
|
100
|
+
if (!matches) {
|
|
101
|
+
needsRebuild = true;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (needsRebuild) {
|
|
106
|
+
this.buildButton(node);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
for (const state of BUTTON_STATE_KEYS) {
|
|
110
|
+
const view = this.stateViews[state];
|
|
111
|
+
const assetId = node.states[`${state}AssetId`];
|
|
112
|
+
const texture = (assetId === undefined ? undefined : this.textureFor(assetId)) ?? normalTexture;
|
|
113
|
+
// Set the texture before the layout size: Sprite/NineSliceSprite preserve scale when their
|
|
114
|
+
// texture changes, so sizing first would shift visual bounds for a differently-sized source.
|
|
115
|
+
if (view instanceof NineSliceSprite) {
|
|
116
|
+
if (texture !== undefined && view.texture !== texture)
|
|
117
|
+
view.texture = texture;
|
|
118
|
+
if (nineSlice !== undefined) {
|
|
119
|
+
view.leftWidth = nineSlice.left;
|
|
120
|
+
view.topHeight = nineSlice.top;
|
|
121
|
+
view.rightWidth = nineSlice.right;
|
|
122
|
+
view.bottomHeight = nineSlice.bottom;
|
|
123
|
+
}
|
|
124
|
+
view.setSize(transform.width, transform.height);
|
|
125
|
+
}
|
|
126
|
+
else if (view instanceof Sprite) {
|
|
127
|
+
if (texture !== undefined && view.texture !== texture)
|
|
128
|
+
view.texture = texture;
|
|
129
|
+
view.setSize(transform.width, transform.height);
|
|
130
|
+
}
|
|
131
|
+
else if (view instanceof Graphics) {
|
|
132
|
+
view.clear().rect(0, 0, transform.width, transform.height).fill(0x4a5568).stroke({ width: 1, color: 0x94a3b8 });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
80
135
|
}
|
|
81
136
|
// Только на изменение документа: иначе любой пересчёт layout сбрасывал бы transient preview state.
|
|
82
137
|
if (node.enabled !== this.enabledState)
|
|
83
138
|
this.applyEnabled(node.enabled);
|
|
84
139
|
}
|
|
140
|
+
/** Editor-only live preview of nine-slice border edits while dragging the canvas gizmo. */
|
|
141
|
+
previewNineSlice(nineSlice) {
|
|
142
|
+
for (const state of BUTTON_STATE_KEYS) {
|
|
143
|
+
const view = this.stateViews[state];
|
|
144
|
+
if (!(view instanceof NineSliceSprite))
|
|
145
|
+
continue;
|
|
146
|
+
view.leftWidth = nineSlice.left;
|
|
147
|
+
view.topHeight = nineSlice.top;
|
|
148
|
+
view.rightWidth = nineSlice.right;
|
|
149
|
+
view.bottomHeight = nineSlice.bottom;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
85
152
|
get enabled() {
|
|
86
153
|
return this.enabledState;
|
|
87
154
|
}
|