@vived/component-pneumatic-panel 1.2.0 → 3.0.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/CHANGELOG.md +212 -0
- package/COMPONENT_KNOWLEDGE.md +642 -0
- package/LICENSE +15 -0
- package/README.md +62 -23
- package/dist/Domain/Adapters/pneumaticPanelPMAdapter.d.ts.map +1 -1
- package/dist/Domain/Controllers/applyPanelState.d.ts.map +1 -1
- package/dist/Domain/Controllers/getPanelState.d.ts.map +1 -1
- package/dist/Domain/Controllers/panelStateDefaults.d.ts +0 -1
- package/dist/Domain/Controllers/panelStateDefaults.d.ts.map +1 -1
- package/dist/Domain/Entities/PneumaticPanelEntity.d.ts +0 -4
- package/dist/Domain/Entities/PneumaticPanelEntity.d.ts.map +1 -1
- package/dist/Domain/Mocks/MockPneumaticPanelSelectUC.d.ts +0 -4
- package/dist/Domain/Mocks/MockPneumaticPanelSelectUC.d.ts.map +1 -1
- package/dist/Domain/PMs/PneumaticPanelPM.d.ts +0 -3
- package/dist/Domain/PMs/PneumaticPanelPM.d.ts.map +1 -1
- package/dist/Domain/UCs/PneumaticPanelCheckPressureUC.d.ts +4 -3
- package/dist/Domain/UCs/PneumaticPanelCheckPressureUC.d.ts.map +1 -1
- package/dist/Domain/UCs/PneumaticPanelSelectUC.d.ts +0 -14
- package/dist/Domain/UCs/PneumaticPanelSelectUC.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelBabylonView.d.ts +9 -12
- package/dist/Frameworks/Babylon/PneumaticPanelBabylonView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelExhaustView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelExhaustView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelGaugeView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelGaugeView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelHitboxView.d.ts +5 -7
- package/dist/Frameworks/Babylon/PneumaticPanelHitboxView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelLockView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelLockView.d.ts.map +1 -1
- package/dist/PneumaticPanelFacade.d.ts +1 -13
- package/dist/PneumaticPanelFacade.d.ts.map +1 -1
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1257 -51
- package/package.json +9 -2
- package/dist/.gitkeep +0 -0
- package/dist/Domain/Controllers/clearAllHighlights.d.ts +0 -9
- package/dist/Domain/Controllers/clearAllHighlights.d.ts.map +0 -1
- package/dist/Domain/Controllers/onPanelHoverEnter.d.ts +0 -7
- package/dist/Domain/Controllers/onPanelHoverEnter.d.ts.map +0 -1
- package/dist/Domain/Controllers/onPanelHoverExit.d.ts +0 -7
- package/dist/Domain/Controllers/onPanelHoverExit.d.ts.map +0 -1
- package/dist/Domain/Controllers/panelHitboxHoverEnter.d.ts +0 -7
- package/dist/Domain/Controllers/panelHitboxHoverEnter.d.ts.map +0 -1
- package/dist/Domain/Controllers/panelHitboxHoverExit.d.ts +0 -7
- package/dist/Domain/Controllers/panelHitboxHoverExit.d.ts.map +0 -1
- package/dist/Domain/Controllers/setHighlightedObject.d.ts +0 -11
- package/dist/Domain/Controllers/setHighlightedObject.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/OutlinePulseController.d.ts +0 -18
- package/dist/Frameworks/Babylon/OutlinePulseController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/OverlayPulseController.d.ts +0 -17
- package/dist/Frameworks/Babylon/OverlayPulseController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/PanelOutlineController.d.ts +0 -32
- package/dist/Frameworks/Babylon/PanelOutlineController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/ScreenSpaceOutlinePulseController.d.ts +0 -17
- package/dist/Frameworks/Babylon/ScreenSpaceOutlinePulseController.d.ts.map +0 -1
- package/dist/clipPlaneFragment-BRmzi2tV.js +0 -55
- package/dist/clipPlaneFragment-CDdVuU0n.js +0 -55
- package/dist/clipPlaneVertex-CIEg9nQi.js +0 -358
- package/dist/clipPlaneVertex-CIarPzTc.js +0 -391
- package/dist/dumpTools-BUC-AUZt.js +0 -110
- package/dist/glowBlurPostProcess.fragment-DDhSDO38.js +0 -13
- package/dist/glowBlurPostProcess.fragment-fpk0xJVe.js +0 -13
- package/dist/glowMapGeneration.fragment-BBSNxu8K.js +0 -193
- package/dist/glowMapGeneration.fragment-Cl-xwsZp.js +0 -161
- package/dist/glowMapGeneration.vertex-CzQHgJdT.js +0 -85
- package/dist/glowMapGeneration.vertex-DErxE57o.js +0 -85
- package/dist/glowMapMerge.vertex-BQosy0g5.js +0 -14
- package/dist/glowMapMerge.vertex-tVYqLRGm.js +0 -13
- package/dist/index-CmNnQLDH.js +0 -36863
- package/dist/pass.fragment-D3pYn4R1.js +0 -10
- package/dist/pneumaticPanel.glb +0 -0
- package/dist/selection.fragment-CGZK1kVt.js +0 -45
- package/dist/selection.fragment-DjWRsu7R.js +0 -45
- package/dist/selection.vertex-DY_1B2lX.js +0 -84
- package/dist/selection.vertex-PhS5tOTA.js +0 -83
- package/dist/selectionOutline.fragment-Bp__J_pC.js +0 -53
- package/dist/selectionOutline.fragment-DmyQJACa.js +0 -54
- package/dist/studio.env +0 -0
- package/dist/thinEngine-dZnz-Owz.js +0 -4
package/dist/index.js
CHANGED
|
@@ -1,53 +1,1259 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppObjectEntity as B, MemoizedBoolean as f, MemoizedNumber as S, AppObjectEntityRepo as H, getSingletonComponent as j, generateUniqueID as _, AppObjectUC as k, AppObjectPM as G, AppObjectView as g, DomainFactory as N } from "@vived/core";
|
|
2
|
+
import { getAssetBlobURL as K, BabylonEntity as z } from "@vived/app";
|
|
3
|
+
import { Color3 as F, ActionManager as r, ExecuteCodeAction as y, Animation as d, CubicEase as W, EasingFunction as R, Material as D, LoadAssetContainerAsync as $ } from "@babylonjs/core";
|
|
4
|
+
class c extends B {
|
|
5
|
+
static type = "PneumaticPanelEntity";
|
|
6
|
+
/**
|
|
7
|
+
* Retrieves the entity from an AppObject
|
|
8
|
+
*/
|
|
9
|
+
static get(e) {
|
|
10
|
+
return e.getComponent(this.type);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves the entity by AppObject ID
|
|
14
|
+
*/
|
|
15
|
+
static getById(e, t) {
|
|
16
|
+
return t.get(e)?.getComponent(this.type);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function I(n) {
|
|
20
|
+
return new q(n);
|
|
21
|
+
}
|
|
22
|
+
class q extends c {
|
|
23
|
+
memoizedExhaustOpen = new f(!1, this.notifyOnChange);
|
|
24
|
+
memoizedIsLocked = new f(!1, this.notifyOnChange);
|
|
25
|
+
memoizedPressure = new S(60, this.notifyOnChange);
|
|
26
|
+
memoizedShowGhostLockHint = new f(
|
|
27
|
+
!1,
|
|
28
|
+
this.notifyOnChange
|
|
29
|
+
);
|
|
30
|
+
memoizedPanelHitboxEnabled = new f(
|
|
31
|
+
!1,
|
|
32
|
+
this.notifyOnChange
|
|
33
|
+
);
|
|
34
|
+
get exhaustOpen() {
|
|
35
|
+
return this.memoizedExhaustOpen.val;
|
|
36
|
+
}
|
|
37
|
+
set exhaustOpen(e) {
|
|
38
|
+
this.memoizedExhaustOpen.val = e;
|
|
39
|
+
}
|
|
40
|
+
get isLocked() {
|
|
41
|
+
return this.memoizedIsLocked.val;
|
|
42
|
+
}
|
|
43
|
+
set isLocked(e) {
|
|
44
|
+
this.memoizedIsLocked.val = e;
|
|
45
|
+
}
|
|
46
|
+
get pressure() {
|
|
47
|
+
return this.memoizedPressure.val;
|
|
48
|
+
}
|
|
49
|
+
set pressure(e) {
|
|
50
|
+
this.memoizedPressure.val = e;
|
|
51
|
+
}
|
|
52
|
+
get showGhostLockHint() {
|
|
53
|
+
return this.memoizedShowGhostLockHint.val;
|
|
54
|
+
}
|
|
55
|
+
set showGhostLockHint(e) {
|
|
56
|
+
this.memoizedShowGhostLockHint.val = e;
|
|
57
|
+
}
|
|
58
|
+
get panelHitboxEnabled() {
|
|
59
|
+
return this.memoizedPanelHitboxEnabled.val;
|
|
60
|
+
}
|
|
61
|
+
set panelHitboxEnabled(e) {
|
|
62
|
+
this.memoizedPanelHitboxEnabled.val = e;
|
|
63
|
+
}
|
|
64
|
+
constructor(e) {
|
|
65
|
+
super(e, c.type);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
class P extends H {
|
|
69
|
+
static type = "PneumaticPanelRepo";
|
|
70
|
+
/**
|
|
71
|
+
* Global accessor for the singleton repository
|
|
72
|
+
*/
|
|
73
|
+
static get(e) {
|
|
74
|
+
return j(
|
|
75
|
+
P.type,
|
|
76
|
+
e
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function Q(n) {
|
|
81
|
+
return new Y(n);
|
|
82
|
+
}
|
|
83
|
+
class Y extends P {
|
|
84
|
+
pneumaticPanelEntityFactory = (e) => {
|
|
85
|
+
const t = this.appObjects.getOrCreate(e);
|
|
86
|
+
return I(t);
|
|
87
|
+
};
|
|
88
|
+
createPneumaticPanelEntity(e) {
|
|
89
|
+
const t = e ?? _(), s = this.getForAppObject(t);
|
|
90
|
+
if (s)
|
|
91
|
+
return s;
|
|
92
|
+
const i = this.pneumaticPanelEntityFactory(t);
|
|
93
|
+
return this.add(i), i;
|
|
94
|
+
}
|
|
95
|
+
deletePneumaticPanelEntity(e) {
|
|
96
|
+
const t = this.getForAppObject(e);
|
|
97
|
+
if (!t) {
|
|
98
|
+
this.warn(`Cannot delete: entity with id '${e}' not found`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
t.appObject.dispose(), this.removeForAppObject(e);
|
|
102
|
+
}
|
|
103
|
+
constructor(e) {
|
|
104
|
+
super(e, P.type);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
class l extends k {
|
|
108
|
+
static type = "PneumaticPanelToggleExhaustUC";
|
|
109
|
+
static get(e) {
|
|
110
|
+
return e.getComponent(this.type);
|
|
111
|
+
}
|
|
112
|
+
static getById(e, t) {
|
|
113
|
+
return t.get(e)?.getComponent(this.type);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function J(n) {
|
|
117
|
+
return new X(n);
|
|
118
|
+
}
|
|
119
|
+
class X extends l {
|
|
120
|
+
_maxPressure = 60;
|
|
121
|
+
onExhaustOpenedCallbacks = /* @__PURE__ */ new Set();
|
|
122
|
+
onExhaustClosedCallbacks = /* @__PURE__ */ new Set();
|
|
123
|
+
onExhaustCloseBlockedByLockCallbacks = /* @__PURE__ */ new Set();
|
|
124
|
+
get entity() {
|
|
125
|
+
try {
|
|
126
|
+
return this.getCachedLocalComponent(
|
|
127
|
+
c.type
|
|
128
|
+
);
|
|
129
|
+
} catch {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
get maxPressure() {
|
|
134
|
+
return this._maxPressure;
|
|
135
|
+
}
|
|
136
|
+
set maxPressure(e) {
|
|
137
|
+
this._maxPressure = e;
|
|
138
|
+
}
|
|
139
|
+
toggleExhaust() {
|
|
140
|
+
const e = this.entity;
|
|
141
|
+
return e ? e.isLocked ? (e.exhaustOpen && this.notifyCallbacks(
|
|
142
|
+
this.onExhaustCloseBlockedByLockCallbacks,
|
|
143
|
+
"onExhaustCloseBlockedByLock callback"
|
|
144
|
+
), !1) : (e.exhaustOpen = !e.exhaustOpen, e.pressure = e.exhaustOpen ? 0 : this._maxPressure, e.exhaustOpen ? this.notifyCallbacks(
|
|
145
|
+
this.onExhaustOpenedCallbacks,
|
|
146
|
+
"onExhaustOpened callback"
|
|
147
|
+
) : this.notifyCallbacks(
|
|
148
|
+
this.onExhaustClosedCallbacks,
|
|
149
|
+
"onExhaustClosed callback"
|
|
150
|
+
), !0) : (this.warn("Missing PneumaticPanelEntity"), !1);
|
|
151
|
+
}
|
|
152
|
+
subscribeOnExhaustOpened(e) {
|
|
153
|
+
return this.onExhaustOpenedCallbacks.add(e), () => {
|
|
154
|
+
this.onExhaustOpenedCallbacks.delete(e);
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
subscribeOnExhaustClosed(e) {
|
|
158
|
+
return this.onExhaustClosedCallbacks.add(e), () => {
|
|
159
|
+
this.onExhaustClosedCallbacks.delete(e);
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
subscribeOnExhaustCloseBlockedByLock(e) {
|
|
163
|
+
return this.onExhaustCloseBlockedByLockCallbacks.add(e), () => {
|
|
164
|
+
this.onExhaustCloseBlockedByLockCallbacks.delete(e);
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
notifyCallbacks(e, t) {
|
|
168
|
+
for (const s of e)
|
|
169
|
+
try {
|
|
170
|
+
s();
|
|
171
|
+
} catch {
|
|
172
|
+
this.warn(`${t} threw an error`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
constructor(e) {
|
|
176
|
+
super(e, l.type);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
class h extends k {
|
|
180
|
+
static type = "PneumaticPanelToggleLockUC";
|
|
181
|
+
static get(e) {
|
|
182
|
+
return e.getComponent(this.type);
|
|
183
|
+
}
|
|
184
|
+
static getById(e, t) {
|
|
185
|
+
return t.get(e)?.getComponent(this.type);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function Z(n) {
|
|
189
|
+
return new ee(n);
|
|
190
|
+
}
|
|
191
|
+
class ee extends h {
|
|
192
|
+
onPanelLockedCallbacks = /* @__PURE__ */ new Set();
|
|
193
|
+
onPanelUnlockedCallbacks = /* @__PURE__ */ new Set();
|
|
194
|
+
get entity() {
|
|
195
|
+
try {
|
|
196
|
+
return this.getCachedLocalComponent(
|
|
197
|
+
c.type
|
|
198
|
+
);
|
|
199
|
+
} catch {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
toggleLock() {
|
|
204
|
+
const e = this.entity;
|
|
205
|
+
return e ? e.isLocked ? (e.isLocked = !1, this.notifyCallbacks(
|
|
206
|
+
this.onPanelUnlockedCallbacks,
|
|
207
|
+
"onPanelUnlocked callback"
|
|
208
|
+
), !0) : e.exhaustOpen ? (e.isLocked = !0, this.notifyCallbacks(this.onPanelLockedCallbacks, "onPanelLocked callback"), !0) : !1 : (this.warn("Missing PneumaticPanelEntity"), !1);
|
|
209
|
+
}
|
|
210
|
+
subscribeOnPanelLocked(e) {
|
|
211
|
+
return this.onPanelLockedCallbacks.add(e), () => {
|
|
212
|
+
this.onPanelLockedCallbacks.delete(e);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
subscribeOnPanelUnlocked(e) {
|
|
216
|
+
return this.onPanelUnlockedCallbacks.add(e), () => {
|
|
217
|
+
this.onPanelUnlockedCallbacks.delete(e);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
notifyCallbacks(e, t) {
|
|
221
|
+
for (const s of e)
|
|
222
|
+
try {
|
|
223
|
+
s();
|
|
224
|
+
} catch {
|
|
225
|
+
this.warn(`${t} threw an error`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
constructor(e) {
|
|
229
|
+
super(e, h.type);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
class b extends k {
|
|
233
|
+
static type = "PneumaticPanelCheckPressureUC";
|
|
234
|
+
static get(e) {
|
|
235
|
+
return e.getComponent(this.type);
|
|
236
|
+
}
|
|
237
|
+
static getById(e, t) {
|
|
238
|
+
return t.get(e)?.getComponent(this.type);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function te(n) {
|
|
242
|
+
return new ne(n);
|
|
243
|
+
}
|
|
244
|
+
class ne extends b {
|
|
245
|
+
onCheckPressureCallbacks = /* @__PURE__ */ new Set();
|
|
246
|
+
checkPressure() {
|
|
247
|
+
this.notifyCallbacks(
|
|
248
|
+
this.onCheckPressureCallbacks,
|
|
249
|
+
"onCheckPressure callback"
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
subscribeOnCheckPressure(e) {
|
|
253
|
+
return this.onCheckPressureCallbacks.add(e), () => {
|
|
254
|
+
this.onCheckPressureCallbacks.delete(e);
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
notifyCallbacks(e, t) {
|
|
258
|
+
for (const s of e)
|
|
259
|
+
try {
|
|
260
|
+
s();
|
|
261
|
+
} catch {
|
|
262
|
+
this.warn(`${t} threw an error`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
constructor(e) {
|
|
266
|
+
super(e, b.type);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
class u extends k {
|
|
270
|
+
static type = "PneumaticPanelSelectUC";
|
|
271
|
+
static get(e) {
|
|
272
|
+
return e.getComponent(this.type);
|
|
273
|
+
}
|
|
274
|
+
static getById(e, t) {
|
|
275
|
+
return t.get(e)?.getComponent(this.type);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function se(n) {
|
|
279
|
+
return new ie(n);
|
|
280
|
+
}
|
|
281
|
+
class ie extends u {
|
|
282
|
+
onPanelSelectedCallbacks = /* @__PURE__ */ new Set();
|
|
283
|
+
get entity() {
|
|
284
|
+
try {
|
|
285
|
+
return this.getCachedLocalComponent(
|
|
286
|
+
c.type
|
|
287
|
+
);
|
|
288
|
+
} catch {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
enableHitbox() {
|
|
293
|
+
const e = this.entity;
|
|
294
|
+
if (!e) {
|
|
295
|
+
this.warn("Missing PneumaticPanelEntity");
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
e.panelHitboxEnabled = !0;
|
|
299
|
+
}
|
|
300
|
+
disableHitbox() {
|
|
301
|
+
const e = this.entity;
|
|
302
|
+
if (!e) {
|
|
303
|
+
this.warn("Missing PneumaticPanelEntity");
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
e.panelHitboxEnabled = !1;
|
|
307
|
+
}
|
|
308
|
+
subscribeOnPanelSelected(e) {
|
|
309
|
+
return this.onPanelSelectedCallbacks.add(e), () => {
|
|
310
|
+
this.onPanelSelectedCallbacks.delete(e);
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
notifyPanelSelected() {
|
|
314
|
+
for (const e of this.onPanelSelectedCallbacks)
|
|
315
|
+
try {
|
|
316
|
+
e();
|
|
317
|
+
} catch {
|
|
318
|
+
this.warn("onPanelSelected callback threw an error");
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
constructor(e) {
|
|
322
|
+
super(e, u.type);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function V(n, e) {
|
|
326
|
+
const t = l.getById(n, e);
|
|
327
|
+
return t ? t.toggleExhaust() : (e.submitWarning(
|
|
328
|
+
"tryToggleExhaust",
|
|
329
|
+
"Unable to find PneumaticPanelToggleExhaustUC"
|
|
330
|
+
), !1);
|
|
331
|
+
}
|
|
332
|
+
function U(n, e) {
|
|
333
|
+
const t = h.getById(n, e);
|
|
334
|
+
return t ? t.toggleLock() : (e.submitWarning(
|
|
335
|
+
"tryToggleLock",
|
|
336
|
+
"Unable to find PneumaticPanelToggleLockUC"
|
|
337
|
+
), !1);
|
|
338
|
+
}
|
|
339
|
+
function A(n, e) {
|
|
340
|
+
const t = b.getById(n, e);
|
|
341
|
+
if (!t) {
|
|
342
|
+
e.submitWarning(
|
|
343
|
+
"checkPressure",
|
|
344
|
+
"Unable to find PneumaticPanelCheckPressureUC"
|
|
345
|
+
);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
t.checkPressure();
|
|
349
|
+
}
|
|
350
|
+
function ae(n, e, t) {
|
|
351
|
+
const s = c.getById(n, e);
|
|
352
|
+
if (!s) {
|
|
353
|
+
e.submitWarning(
|
|
354
|
+
"setShowGhostLockHint",
|
|
355
|
+
"Unable to find PneumaticPanelEntity"
|
|
356
|
+
);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
s.showGhostLockHint = t;
|
|
360
|
+
}
|
|
361
|
+
const m = {
|
|
362
|
+
exhaustOpen: !1,
|
|
363
|
+
isLocked: !1,
|
|
364
|
+
showGhostLockHint: !1,
|
|
365
|
+
panelHitboxEnabled: !1
|
|
366
|
+
};
|
|
367
|
+
function oe(n, e, t) {
|
|
368
|
+
const s = c.getById(n, e);
|
|
369
|
+
return s ? {
|
|
370
|
+
version: t,
|
|
371
|
+
exhaustOpen: s.exhaustOpen,
|
|
372
|
+
isLocked: s.isLocked,
|
|
373
|
+
showGhostLockHint: s.showGhostLockHint,
|
|
374
|
+
panelHitboxEnabled: s.panelHitboxEnabled
|
|
375
|
+
} : (e.submitWarning(
|
|
376
|
+
"getPanelState",
|
|
377
|
+
"Unable to find PneumaticPanelEntity"
|
|
378
|
+
), {
|
|
379
|
+
version: t,
|
|
380
|
+
...m
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
function ce(n, e, t) {
|
|
384
|
+
const s = c.getById(n, e);
|
|
385
|
+
if (!s) {
|
|
386
|
+
e.submitWarning(
|
|
387
|
+
"applyPanelState",
|
|
388
|
+
"Unable to find PneumaticPanelEntity"
|
|
389
|
+
);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
s.exhaustOpen = t.exhaustOpen ?? m.exhaustOpen, s.isLocked = t.isLocked ?? m.isLocked, s.showGhostLockHint = t.showGhostLockHint ?? m.showGhostLockHint, s.panelHitboxEnabled = t.panelHitboxEnabled ?? m.panelHitboxEnabled;
|
|
393
|
+
}
|
|
394
|
+
function re(n, e, t) {
|
|
395
|
+
const s = l.getById(n, e);
|
|
396
|
+
return s ? s.subscribeOnExhaustOpened(t) : (e.submitWarning(
|
|
397
|
+
"onExhaustOpened",
|
|
398
|
+
"Unable to find PneumaticPanelToggleExhaustUC"
|
|
399
|
+
), () => {
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
function le(n, e, t) {
|
|
403
|
+
const s = l.getById(n, e);
|
|
404
|
+
return s ? s.subscribeOnExhaustClosed(t) : (e.submitWarning(
|
|
405
|
+
"onExhaustClosed",
|
|
406
|
+
"Unable to find PneumaticPanelToggleExhaustUC"
|
|
407
|
+
), () => {
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
function ue(n, e, t) {
|
|
411
|
+
const s = l.getById(n, e);
|
|
412
|
+
return s ? s.subscribeOnExhaustCloseBlockedByLock(t) : (e.submitWarning(
|
|
413
|
+
"onExhaustCloseBlockedByLock",
|
|
414
|
+
"Unable to find PneumaticPanelToggleExhaustUC"
|
|
415
|
+
), () => {
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
function he(n, e, t) {
|
|
419
|
+
const s = h.getById(n, e);
|
|
420
|
+
return s ? s.subscribeOnPanelLocked(t) : (e.submitWarning(
|
|
421
|
+
"onPanelLocked",
|
|
422
|
+
"Unable to find PneumaticPanelToggleLockUC"
|
|
423
|
+
), () => {
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
function de(n, e, t) {
|
|
427
|
+
const s = h.getById(n, e);
|
|
428
|
+
return s ? s.subscribeOnPanelUnlocked(t) : (e.submitWarning(
|
|
429
|
+
"onPanelUnlocked",
|
|
430
|
+
"Unable to find PneumaticPanelToggleLockUC"
|
|
431
|
+
), () => {
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
function be(n, e) {
|
|
435
|
+
const t = u.getById(n, e);
|
|
436
|
+
if (!t) {
|
|
437
|
+
e.submitWarning(
|
|
438
|
+
"enablePanelHitbox",
|
|
439
|
+
"Unable to find PneumaticPanelSelectUC"
|
|
440
|
+
);
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
t.enableHitbox();
|
|
444
|
+
}
|
|
445
|
+
function pe(n, e) {
|
|
446
|
+
const t = u.getById(n, e);
|
|
447
|
+
if (!t) {
|
|
448
|
+
e.submitWarning(
|
|
449
|
+
"disablePanelHitbox",
|
|
450
|
+
"Unable to find PneumaticPanelSelectUC"
|
|
451
|
+
);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
t.disableHitbox();
|
|
455
|
+
}
|
|
456
|
+
function me(n, e, t) {
|
|
457
|
+
const s = u.getById(n, e);
|
|
458
|
+
return s ? s.subscribeOnPanelSelected(t) : (e.submitWarning(
|
|
459
|
+
"onPanelSelected",
|
|
460
|
+
"Unable to find PneumaticPanelSelectUC"
|
|
461
|
+
), () => {
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
function Pe(n, e, t) {
|
|
465
|
+
const s = b.getById(n, e);
|
|
466
|
+
return s ? s.subscribeOnCheckPressure(t) : (e.submitWarning(
|
|
467
|
+
"onCheckPressure",
|
|
468
|
+
"Unable to find PneumaticPanelCheckPressureUC"
|
|
469
|
+
), () => {
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
function ge(n, e) {
|
|
473
|
+
const t = u.getById(n, e);
|
|
474
|
+
if (!t) {
|
|
475
|
+
e.submitWarning(
|
|
476
|
+
"panelHitboxClicked",
|
|
477
|
+
"Unable to find PneumaticPanelSelectUC"
|
|
478
|
+
);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
t.notifyPanelSelected();
|
|
482
|
+
}
|
|
483
|
+
class p extends G {
|
|
484
|
+
static type = "PneumaticPanelPM";
|
|
485
|
+
static get(e) {
|
|
486
|
+
return e.getComponent(this.type);
|
|
487
|
+
}
|
|
488
|
+
static getById(e, t) {
|
|
489
|
+
return t.get(e)?.getComponent(this.type);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
function fe(n) {
|
|
493
|
+
return new ke(n);
|
|
494
|
+
}
|
|
495
|
+
class ke extends p {
|
|
496
|
+
get entity() {
|
|
497
|
+
return this.getCachedLocalComponent(
|
|
498
|
+
c.type
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
vmsAreEqual(e, t) {
|
|
502
|
+
return e.exhaustOpen === t.exhaustOpen && e.isLocked === t.isLocked && e.pressure === t.pressure && e.showGhostLockHint === t.showGhostLockHint && e.panelHitboxEnabled === t.panelHitboxEnabled && e.subComponentsInteractive === t.subComponentsInteractive;
|
|
503
|
+
}
|
|
504
|
+
onEntityChange = () => {
|
|
505
|
+
const e = this.entity;
|
|
506
|
+
e && this.doUpdateView({
|
|
507
|
+
exhaustOpen: e.exhaustOpen,
|
|
508
|
+
isLocked: e.isLocked,
|
|
509
|
+
pressure: e.pressure,
|
|
510
|
+
showGhostLockHint: e.showGhostLockHint,
|
|
511
|
+
panelHitboxEnabled: e.panelHitboxEnabled,
|
|
512
|
+
subComponentsInteractive: !e.panelHitboxEnabled
|
|
513
|
+
});
|
|
514
|
+
};
|
|
515
|
+
constructor(e) {
|
|
516
|
+
super(e, p.type), this.entity?.addChangeObserver(this.onEntityChange), this.onEntityChange();
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
const o = {
|
|
520
|
+
defaultVM: {
|
|
521
|
+
exhaustOpen: !1,
|
|
522
|
+
isLocked: !1,
|
|
523
|
+
pressure: 60,
|
|
524
|
+
showGhostLockHint: !1,
|
|
525
|
+
panelHitboxEnabled: !1,
|
|
526
|
+
subComponentsInteractive: !0
|
|
527
|
+
},
|
|
528
|
+
subscribe: (n, e, t) => {
|
|
529
|
+
if (!n) return;
|
|
530
|
+
const s = p.getById(n, e);
|
|
531
|
+
if (!s) {
|
|
532
|
+
e.submitWarning(
|
|
533
|
+
"pneumaticPanelPMAdapter",
|
|
534
|
+
"Unable to find PneumaticPanelPM"
|
|
535
|
+
);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
s.addView(t);
|
|
539
|
+
},
|
|
540
|
+
unsubscribe: (n, e, t) => {
|
|
541
|
+
if (!n) return;
|
|
542
|
+
const s = p.getById(n, e);
|
|
543
|
+
s && s.removeView(t);
|
|
544
|
+
}
|
|
545
|
+
}, ye = {
|
|
546
|
+
/** Machine-friendly name (used in package name, imports) */
|
|
547
|
+
name: "PneumaticPanel",
|
|
548
|
+
/** Human-friendly display name */
|
|
549
|
+
displayName: "Pneumatic Panel",
|
|
550
|
+
/** Semantic version */
|
|
551
|
+
version: "0.1.0",
|
|
552
|
+
/** Whether multiple instances can exist in a scene */
|
|
553
|
+
multiInstance: !0,
|
|
554
|
+
/** 3D asset files to include in the build */
|
|
555
|
+
assets: [
|
|
556
|
+
{
|
|
557
|
+
name: "default",
|
|
558
|
+
id: "db90a1dd-8cb9-4f56-954d-7a72610281a7",
|
|
559
|
+
file: "pneumaticPanel.glb"
|
|
560
|
+
}
|
|
561
|
+
]
|
|
562
|
+
}, xe = "lock", Ce = "ghost_lock";
|
|
563
|
+
class x extends g {
|
|
564
|
+
static type = "PneumaticPanelLockView";
|
|
565
|
+
static get(e) {
|
|
566
|
+
return e.getComponent(this.type);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
function we(n) {
|
|
570
|
+
return new Me(n);
|
|
571
|
+
}
|
|
572
|
+
class Me extends x {
|
|
573
|
+
lockTransform;
|
|
574
|
+
ghostLockMesh;
|
|
575
|
+
currentVM = o.defaultVM;
|
|
576
|
+
flashTimer;
|
|
577
|
+
bindMeshes(e) {
|
|
578
|
+
this.lockTransform = this.resolveLockTransform(e), this.ghostLockMesh = this.resolveGhostLockMesh(e), this.lockTransform || this.warn("Unable to find lock transform from provided nodes"), this.ghostLockMesh || this.warn("Unable to find ghost lock mesh from provided nodes"), this.bindClickActionsOnLockChildren(), this.bindClickAction(this.ghostLockMesh), this.applyMeshes();
|
|
579
|
+
}
|
|
580
|
+
applyView = (e) => {
|
|
581
|
+
this.currentVM = e, this.applyMeshes();
|
|
582
|
+
};
|
|
583
|
+
applyMeshes() {
|
|
584
|
+
this.setLockVisible(this.currentVM.isLocked), this.setGhostLockVisible(this.shouldShowGhostLock());
|
|
585
|
+
}
|
|
586
|
+
flash() {
|
|
587
|
+
if (!this.lockTransform) return;
|
|
588
|
+
this.flashTimer !== void 0 && clearTimeout(this.flashTimer);
|
|
589
|
+
const e = this.lockTransform.getChildMeshes(!1);
|
|
590
|
+
for (const t of e)
|
|
591
|
+
t.overlayColor = new F(1, 0, 0), t.overlayAlpha = 0.3, t.renderOverlay = !0;
|
|
592
|
+
this.flashTimer = setTimeout(() => {
|
|
593
|
+
this.flashTimer = void 0;
|
|
594
|
+
for (const t of e)
|
|
595
|
+
t.renderOverlay = !1;
|
|
596
|
+
}, 400);
|
|
597
|
+
}
|
|
598
|
+
shouldShowGhostLock() {
|
|
599
|
+
return this.currentVM.exhaustOpen && !this.currentVM.isLocked;
|
|
600
|
+
}
|
|
601
|
+
setLockVisible(e) {
|
|
602
|
+
if (this.lockTransform) {
|
|
603
|
+
this.lockTransform.setEnabled(e);
|
|
604
|
+
for (const t of this.lockTransform.getChildMeshes(!1))
|
|
605
|
+
t.isPickable = e && this.currentVM.subComponentsInteractive, t.setEnabled(e);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Ghost lock visibility is driven by authored domain state only. The mesh
|
|
610
|
+
* stays enabled and pickable so the Host can reach it via
|
|
611
|
+
* `highlightGroupsByObjectId` and reveal it on hover itself (ADR-0010).
|
|
612
|
+
*/
|
|
613
|
+
setGhostLockVisible(e) {
|
|
614
|
+
this.ghostLockMesh && (this.ghostLockMesh.setEnabled(e), this.ghostLockMesh.isPickable = e && this.currentVM.subComponentsInteractive, this.ghostLockMesh.visibility = e && this.currentVM.showGhostLockHint ? 1 : 0);
|
|
615
|
+
}
|
|
616
|
+
bindClickActionsOnLockChildren() {
|
|
617
|
+
if (this.lockTransform)
|
|
618
|
+
for (const e of this.lockTransform.getChildMeshes(!1))
|
|
619
|
+
this.bindClickAction(e);
|
|
620
|
+
}
|
|
621
|
+
bindClickAction(e) {
|
|
622
|
+
if (!e) return;
|
|
623
|
+
const t = e.getScene();
|
|
624
|
+
if (!t) {
|
|
625
|
+
this.warn("Unable to wire lock mesh without a scene");
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
e.isPickable = !0, e.actionManager ??= new r(t), e.actionManager.registerAction(
|
|
629
|
+
new y(r.OnPickTrigger, () => {
|
|
630
|
+
U(this.appObject.id, this.appObjects);
|
|
631
|
+
})
|
|
632
|
+
);
|
|
633
|
+
}
|
|
634
|
+
resolveLockTransform(e) {
|
|
635
|
+
const t = e.get(xe), s = t?.getClassName();
|
|
636
|
+
if (!(!t || s !== "TransformNode" && s !== "Mesh"))
|
|
637
|
+
return t;
|
|
638
|
+
}
|
|
639
|
+
resolveGhostLockMesh(e) {
|
|
640
|
+
const t = e.get(Ce);
|
|
641
|
+
if (t)
|
|
642
|
+
return t;
|
|
643
|
+
}
|
|
644
|
+
dispose() {
|
|
645
|
+
this.flashTimer !== void 0 && clearTimeout(this.flashTimer), o.unsubscribe(
|
|
646
|
+
this.appObject.id,
|
|
647
|
+
this.appObjects,
|
|
648
|
+
this.applyView
|
|
649
|
+
), super.dispose();
|
|
650
|
+
}
|
|
651
|
+
constructor(e) {
|
|
652
|
+
super(e, x.type), o.subscribe(
|
|
653
|
+
this.appObject.id,
|
|
654
|
+
this.appObjects,
|
|
655
|
+
this.applyView
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
const Oe = "exhaust_knob";
|
|
660
|
+
class M extends g {
|
|
661
|
+
static type = "PneumaticPanelExhaustView";
|
|
662
|
+
static get(e) {
|
|
663
|
+
return e.getComponent(this.type);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
function Ee(n) {
|
|
667
|
+
return new Le(n);
|
|
668
|
+
}
|
|
669
|
+
class Le extends M {
|
|
670
|
+
exhaustKnobMesh;
|
|
671
|
+
currentVM = o.defaultVM;
|
|
672
|
+
currentAnimation;
|
|
673
|
+
bindMeshes(e) {
|
|
674
|
+
this.exhaustKnobMesh = e.get(
|
|
675
|
+
Oe
|
|
676
|
+
), this.exhaustKnobMesh || this.warn("Unable to find exhaust knob mesh from provided nodes"), this.exhaustKnobMesh?.rotationQuaternion && (this.exhaustKnobMesh.rotationQuaternion = null), this.bindClickAction(this.exhaustKnobMesh), this.exhaustKnobMesh && (this.exhaustKnobMesh.isPickable = this.currentVM.subComponentsInteractive), this.snapKnobRotation(this.currentVM.exhaustOpen);
|
|
677
|
+
}
|
|
678
|
+
applyView = (e) => {
|
|
679
|
+
const t = this.currentVM;
|
|
680
|
+
this.currentVM = e, this.animateKnobRotation(this.currentVM.exhaustOpen), e.subComponentsInteractive !== t.subComponentsInteractive && this.exhaustKnobMesh && (this.exhaustKnobMesh.isPickable = e.subComponentsInteractive);
|
|
681
|
+
};
|
|
682
|
+
snapKnobRotation(e) {
|
|
683
|
+
this.exhaustKnobMesh && (this.exhaustKnobMesh.rotation.z = e ? -Math.PI / 2 : 0);
|
|
684
|
+
}
|
|
685
|
+
animateKnobRotation(e) {
|
|
686
|
+
if (!this.exhaustKnobMesh) return;
|
|
687
|
+
const t = e ? -Math.PI / 2 : 0;
|
|
688
|
+
if (Math.abs(this.exhaustKnobMesh.rotation.z - t) < 1e-3) return;
|
|
689
|
+
this.stopCurrentAnimation();
|
|
690
|
+
const s = this.exhaustKnobMesh.getScene();
|
|
691
|
+
if (!s) {
|
|
692
|
+
this.exhaustKnobMesh.rotation.z = t;
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
const i = new d(
|
|
696
|
+
"exhaustKnobRotation",
|
|
697
|
+
"rotation.z",
|
|
698
|
+
60,
|
|
699
|
+
d.ANIMATIONTYPE_FLOAT,
|
|
700
|
+
d.ANIMATIONLOOPMODE_CONSTANT
|
|
701
|
+
), a = new W();
|
|
702
|
+
a.setEasingMode(R.EASINGMODE_EASEINOUT), i.setEasingFunction(a), i.setKeys([
|
|
703
|
+
{ frame: 0, value: this.exhaustKnobMesh.rotation.z },
|
|
704
|
+
{ frame: 15, value: t }
|
|
705
|
+
]), this.currentAnimation = s.beginDirectAnimation(
|
|
706
|
+
this.exhaustKnobMesh,
|
|
707
|
+
[i],
|
|
708
|
+
0,
|
|
709
|
+
15,
|
|
710
|
+
!1
|
|
711
|
+
);
|
|
712
|
+
}
|
|
713
|
+
shakeKnob() {
|
|
714
|
+
if (!this.exhaustKnobMesh) return;
|
|
715
|
+
const e = this.exhaustKnobMesh.getScene();
|
|
716
|
+
if (!e) return;
|
|
717
|
+
this.stopCurrentAnimation();
|
|
718
|
+
const t = this.currentVM.exhaustOpen ? -Math.PI / 2 : 0, s = Math.PI / 36, i = new d(
|
|
719
|
+
"exhaustKnobShake",
|
|
720
|
+
"rotation.z",
|
|
721
|
+
60,
|
|
722
|
+
d.ANIMATIONTYPE_FLOAT,
|
|
723
|
+
d.ANIMATIONLOOPMODE_CONSTANT
|
|
724
|
+
);
|
|
725
|
+
i.setKeys([
|
|
726
|
+
{ frame: 0, value: t },
|
|
727
|
+
{ frame: 4, value: t + s },
|
|
728
|
+
{ frame: 12, value: t - s },
|
|
729
|
+
{ frame: 18, value: t + s * 0.6 },
|
|
730
|
+
{ frame: 22, value: t - s * 0.6 },
|
|
731
|
+
{ frame: 26, value: t }
|
|
732
|
+
]), this.currentAnimation = e.beginDirectAnimation(
|
|
733
|
+
this.exhaustKnobMesh,
|
|
734
|
+
[i],
|
|
735
|
+
0,
|
|
736
|
+
26,
|
|
737
|
+
!1
|
|
738
|
+
);
|
|
739
|
+
}
|
|
740
|
+
stopCurrentAnimation() {
|
|
741
|
+
this.currentAnimation && (this.currentAnimation.stop(), this.currentAnimation = void 0);
|
|
742
|
+
}
|
|
743
|
+
bindClickAction(e) {
|
|
744
|
+
if (!e) return;
|
|
745
|
+
const t = e.getScene();
|
|
746
|
+
if (!t) {
|
|
747
|
+
this.warn("Unable to wire exhaust knob mesh without a scene");
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
e.isPickable = !0, e.actionManager ??= new r(t), e.actionManager.registerAction(
|
|
751
|
+
new y(r.OnPickTrigger, () => {
|
|
752
|
+
V(this.appObject.id, this.appObjects) || (this.shakeKnob(), x.get(this.appObject)?.flash());
|
|
753
|
+
})
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
dispose() {
|
|
757
|
+
this.stopCurrentAnimation(), o.unsubscribe(
|
|
758
|
+
this.appObject.id,
|
|
759
|
+
this.appObjects,
|
|
760
|
+
this.applyView
|
|
761
|
+
), super.dispose();
|
|
762
|
+
}
|
|
763
|
+
constructor(e) {
|
|
764
|
+
super(e, M.type), o.subscribe(
|
|
765
|
+
this.appObject.id,
|
|
766
|
+
this.appObjects,
|
|
767
|
+
this.applyView
|
|
768
|
+
);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
const Ie = "gauge";
|
|
772
|
+
class O extends g {
|
|
773
|
+
static type = "PneumaticPanelGaugeView";
|
|
774
|
+
static get(e) {
|
|
775
|
+
return e.getComponent(this.type);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
function Ve(n) {
|
|
779
|
+
return new Ue(n);
|
|
780
|
+
}
|
|
781
|
+
class Ue extends O {
|
|
782
|
+
gaugeMesh;
|
|
783
|
+
currentVM = o.defaultVM;
|
|
784
|
+
bindMeshes(e) {
|
|
785
|
+
this.gaugeMesh = e.get(Ie), this.gaugeMesh || this.warn("Unable to find gauge mesh from provided nodes"), this.bindClickAction(this.gaugeMesh), this.gaugeMesh && (this.gaugeMesh.isPickable = this.currentVM.subComponentsInteractive);
|
|
786
|
+
}
|
|
787
|
+
applyView = (e) => {
|
|
788
|
+
const t = this.currentVM;
|
|
789
|
+
this.currentVM = e, e.subComponentsInteractive !== t.subComponentsInteractive && this.gaugeMesh && (this.gaugeMesh.isPickable = e.subComponentsInteractive);
|
|
790
|
+
};
|
|
791
|
+
bindClickAction(e) {
|
|
792
|
+
if (!e) return;
|
|
793
|
+
const t = e.getScene();
|
|
794
|
+
if (!t) {
|
|
795
|
+
this.warn("Unable to wire gauge mesh without a scene");
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
e.isPickable = !0, e.actionManager ??= new r(t), e.actionManager.registerAction(
|
|
799
|
+
new y(r.OnPickTrigger, () => {
|
|
800
|
+
A(this.appObject.id, this.appObjects);
|
|
801
|
+
})
|
|
802
|
+
);
|
|
803
|
+
}
|
|
804
|
+
constructor(e) {
|
|
805
|
+
super(e, O.type), o.subscribe(
|
|
806
|
+
this.appObject.id,
|
|
807
|
+
this.appObjects,
|
|
808
|
+
this.applyView
|
|
809
|
+
);
|
|
810
|
+
}
|
|
811
|
+
dispose() {
|
|
812
|
+
o.unsubscribe(
|
|
813
|
+
this.appObject.id,
|
|
814
|
+
this.appObjects,
|
|
815
|
+
this.applyView
|
|
816
|
+
), super.dispose();
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
const Ae = "panel_hitbox";
|
|
820
|
+
class E extends g {
|
|
821
|
+
static type = "PneumaticPanelHitboxView";
|
|
822
|
+
static get(e) {
|
|
823
|
+
return e.getComponent(this.type);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
function ve(n) {
|
|
827
|
+
return new Te(n);
|
|
828
|
+
}
|
|
829
|
+
class Te extends E {
|
|
830
|
+
hitboxMesh;
|
|
831
|
+
currentVM = o.defaultVM;
|
|
832
|
+
bindMeshes(e) {
|
|
833
|
+
if (this.hitboxMesh = e.get(Ae), !this.hitboxMesh) {
|
|
834
|
+
this.warn("Unable to find panel hitbox mesh from provided nodes");
|
|
835
|
+
return;
|
|
836
|
+
}
|
|
837
|
+
const t = this.hitboxMesh.material;
|
|
838
|
+
t && (t.transparencyMode = D.MATERIAL_ALPHABLEND, t.alpha = 0), this.hitboxMesh.visibility = 0, this.hitboxMesh.isPickable = this.currentVM.panelHitboxEnabled, this.bindActions(this.hitboxMesh);
|
|
839
|
+
}
|
|
840
|
+
applyView = (e) => {
|
|
841
|
+
const t = this.currentVM;
|
|
842
|
+
this.currentVM = e, e.panelHitboxEnabled !== t.panelHitboxEnabled && this.hitboxMesh && (this.hitboxMesh.isPickable = e.panelHitboxEnabled);
|
|
843
|
+
};
|
|
844
|
+
bindActions(e) {
|
|
845
|
+
const t = e.getScene();
|
|
846
|
+
if (!t) {
|
|
847
|
+
this.warn("Unable to wire hitbox mesh without a scene");
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
e.actionManager ??= new r(t), e.actionManager.registerAction(
|
|
851
|
+
new y(r.OnPickTrigger, () => {
|
|
852
|
+
ge(this.appObject.id, this.appObjects);
|
|
853
|
+
})
|
|
854
|
+
);
|
|
855
|
+
}
|
|
856
|
+
constructor(e) {
|
|
857
|
+
super(e, E.type), o.subscribe(
|
|
858
|
+
this.appObject.id,
|
|
859
|
+
this.appObjects,
|
|
860
|
+
this.applyView
|
|
861
|
+
);
|
|
862
|
+
}
|
|
863
|
+
dispose() {
|
|
864
|
+
o.unsubscribe(
|
|
865
|
+
this.appObject.id,
|
|
866
|
+
this.appObjects,
|
|
867
|
+
this.applyView
|
|
868
|
+
), super.dispose();
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
let L = /* @__PURE__ */ new WeakMap();
|
|
872
|
+
function Be(n) {
|
|
873
|
+
let e = L.get(n);
|
|
874
|
+
return e || (e = /* @__PURE__ */ new Map(), L.set(n, e)), e;
|
|
875
|
+
}
|
|
876
|
+
async function Se(n, e, t) {
|
|
877
|
+
const s = Be(n);
|
|
878
|
+
let i = s.get(t);
|
|
879
|
+
i || (i = K(t, e).then(
|
|
880
|
+
(a) => $(a, n, {
|
|
881
|
+
pluginExtension: ".glb"
|
|
882
|
+
})
|
|
883
|
+
), s.set(t, i));
|
|
884
|
+
try {
|
|
885
|
+
return await i;
|
|
886
|
+
} catch (a) {
|
|
887
|
+
throw s.delete(t), a;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
class C extends g {
|
|
891
|
+
static type = "PneumaticPanelBabylonView";
|
|
892
|
+
static get(e) {
|
|
893
|
+
return e.getComponent(this.type);
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
function v(n) {
|
|
897
|
+
return new He(n);
|
|
898
|
+
}
|
|
899
|
+
class He extends C {
|
|
900
|
+
lockView;
|
|
901
|
+
exhaustView;
|
|
902
|
+
gaugeView;
|
|
903
|
+
hitboxView;
|
|
904
|
+
meshes = [];
|
|
905
|
+
_nodesByObjectId = /* @__PURE__ */ new Map();
|
|
906
|
+
_highlightGroupsByObjectId = /* @__PURE__ */ new Map();
|
|
907
|
+
instantiatedEntries;
|
|
908
|
+
_rootTransformNode;
|
|
909
|
+
loadPromise;
|
|
910
|
+
async load() {
|
|
911
|
+
this.meshes.length > 0 || (this.loadPromise || (this.loadPromise = this.loadInternal().catch((e) => {
|
|
912
|
+
throw this.loadPromise = void 0, e;
|
|
913
|
+
})), await this.loadPromise);
|
|
914
|
+
}
|
|
915
|
+
async loadInternal() {
|
|
916
|
+
const e = this.getScene(), t = ye.assets[0]?.id;
|
|
917
|
+
if (!t) {
|
|
918
|
+
this.appObjects.submitError(
|
|
919
|
+
"PneumaticPanelBabylonView.load",
|
|
920
|
+
"Missing PneumaticPanel default asset configuration"
|
|
921
|
+
);
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
const s = await Se(
|
|
925
|
+
e,
|
|
926
|
+
this.appObjects,
|
|
927
|
+
t
|
|
928
|
+
);
|
|
929
|
+
this.instantiatedEntries = s.instantiateModelsToScene(
|
|
930
|
+
(a) => a
|
|
931
|
+
), this._rootTransformNode = this.instantiatedEntries.rootNodes[0], this.meshes = this.collectMeshesFromRoots(
|
|
932
|
+
this.instantiatedEntries.rootNodes
|
|
933
|
+
), this._nodesByObjectId = this.buildNodeLookup(
|
|
934
|
+
this.instantiatedEntries.rootNodes
|
|
935
|
+
);
|
|
936
|
+
const i = this.meshes.filter(
|
|
937
|
+
(a) => a.metadata?.gltf?.extras?.objectId?.toLowerCase() !== "panel_hitbox"
|
|
938
|
+
);
|
|
939
|
+
this._highlightGroupsByObjectId = this.buildHighlightGroups(
|
|
940
|
+
this._nodesByObjectId,
|
|
941
|
+
i
|
|
942
|
+
), this.lockView.bindMeshes(this._nodesByObjectId), this.exhaustView.bindMeshes(this._nodesByObjectId), this.gaugeView.bindMeshes(this._nodesByObjectId), this.hitboxView.bindMeshes(this._nodesByObjectId);
|
|
943
|
+
}
|
|
944
|
+
buildHighlightGroups(e, t) {
|
|
945
|
+
const s = /* @__PURE__ */ new Map();
|
|
946
|
+
s.set("panel_hitbox", t);
|
|
947
|
+
for (const [i, a] of e)
|
|
948
|
+
i !== "panel_hitbox" && a.getClassName() === "Mesh" && s.set(i, [a]);
|
|
949
|
+
return s;
|
|
950
|
+
}
|
|
951
|
+
buildNodeLookup(e) {
|
|
952
|
+
const t = /* @__PURE__ */ new Map(), s = (i) => {
|
|
953
|
+
const a = i.metadata?.gltf?.extras?.objectId;
|
|
954
|
+
if (typeof a == "string") {
|
|
955
|
+
const w = a.toLowerCase();
|
|
956
|
+
t.has(w) || t.set(w, i);
|
|
957
|
+
}
|
|
958
|
+
};
|
|
959
|
+
for (const i of e) {
|
|
960
|
+
s(i);
|
|
961
|
+
for (const a of i.getDescendants(
|
|
962
|
+
!1
|
|
963
|
+
))
|
|
964
|
+
s(a);
|
|
965
|
+
}
|
|
966
|
+
return t;
|
|
967
|
+
}
|
|
968
|
+
collectMeshesFromRoots(e) {
|
|
969
|
+
const t = /* @__PURE__ */ new Set();
|
|
970
|
+
for (const s of e) {
|
|
971
|
+
s.getClassName() === "Mesh" && t.add(s);
|
|
972
|
+
for (const i of s.getChildMeshes(!1))
|
|
973
|
+
t.add(i);
|
|
974
|
+
}
|
|
975
|
+
return [...t];
|
|
976
|
+
}
|
|
977
|
+
getScene() {
|
|
978
|
+
const e = z.get(this.appObjects);
|
|
979
|
+
if (!e?.scene)
|
|
980
|
+
throw new Error("BabylonEntity scene is not available");
|
|
981
|
+
return e.scene;
|
|
982
|
+
}
|
|
983
|
+
get nodesByObjectId() {
|
|
984
|
+
return this._nodesByObjectId;
|
|
985
|
+
}
|
|
986
|
+
get rootTransformNode() {
|
|
987
|
+
return this._rootTransformNode;
|
|
988
|
+
}
|
|
989
|
+
get shadowCasters() {
|
|
990
|
+
return this.meshes;
|
|
991
|
+
}
|
|
992
|
+
get highlightGroupsByObjectId() {
|
|
993
|
+
return this._highlightGroupsByObjectId;
|
|
994
|
+
}
|
|
995
|
+
dispose() {
|
|
996
|
+
this.instantiatedEntries?.dispose(), this.instantiatedEntries = void 0, this.meshes = [], this._nodesByObjectId = /* @__PURE__ */ new Map(), this._highlightGroupsByObjectId = /* @__PURE__ */ new Map(), this._rootTransformNode = void 0, this.loadPromise = void 0, this.lockView.dispose(), this.exhaustView.dispose(), this.gaugeView.dispose(), super.dispose();
|
|
997
|
+
}
|
|
998
|
+
constructor(e) {
|
|
999
|
+
super(e, C.type), this.lockView = we(e), this.exhaustView = Ee(e), this.gaugeView = Ve(e), this.hitboxView = ve(e);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
const je = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1003
|
+
__proto__: null,
|
|
1004
|
+
PneumaticPanelBabylonView: C,
|
|
1005
|
+
makePneumaticPanelBabylonView: v
|
|
1006
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1007
|
+
class _e extends N {
|
|
1008
|
+
factoryName = "PneumaticPanelFeatureFactory";
|
|
1009
|
+
repo = null;
|
|
1010
|
+
setupEntities() {
|
|
1011
|
+
this.repo = Q(this.appObject), this.repo.pneumaticPanelEntityFactory = Ge(
|
|
1012
|
+
this.appObjects
|
|
1013
|
+
);
|
|
1014
|
+
}
|
|
1015
|
+
setupUCs() {
|
|
1016
|
+
}
|
|
1017
|
+
setupPMs() {
|
|
1018
|
+
}
|
|
1019
|
+
finalSetup() {
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
function We(n) {
|
|
1023
|
+
const e = n.getOrCreate("PneumaticPanels");
|
|
1024
|
+
return new _e(e);
|
|
1025
|
+
}
|
|
1026
|
+
function Ge(n) {
|
|
1027
|
+
return function(e) {
|
|
1028
|
+
const t = n.getOrCreate(e), s = I(t);
|
|
1029
|
+
return J(t), Z(t), te(t), se(t), fe(t), s;
|
|
1030
|
+
};
|
|
1031
|
+
}
|
|
1032
|
+
function T(n, e) {
|
|
1033
|
+
const t = P.get(e);
|
|
1034
|
+
if (!t) {
|
|
1035
|
+
e.submitWarning(
|
|
1036
|
+
"createPneumaticPanel",
|
|
1037
|
+
"Unable to find PneumaticPanelRepo"
|
|
1038
|
+
);
|
|
1039
|
+
return;
|
|
1040
|
+
}
|
|
1041
|
+
return t.createPneumaticPanelEntity(n).appObject;
|
|
1042
|
+
}
|
|
1043
|
+
async function Re(n, e) {
|
|
1044
|
+
const t = T(n, e);
|
|
1045
|
+
return t ? (await v(t).load(), t) : void 0;
|
|
1046
|
+
}
|
|
1047
|
+
class De extends p {
|
|
1048
|
+
vmsAreEqual = () => !0;
|
|
1049
|
+
constructor(e) {
|
|
1050
|
+
super(e, p.type);
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
class $e extends l {
|
|
1054
|
+
maxPressure = 60;
|
|
1055
|
+
toggleExhaust = () => !0;
|
|
1056
|
+
subscribeOnExhaustOpened = (e) => () => {
|
|
1057
|
+
};
|
|
1058
|
+
subscribeOnExhaustClosed = (e) => () => {
|
|
1059
|
+
};
|
|
1060
|
+
subscribeOnExhaustCloseBlockedByLock = (e) => () => {
|
|
1061
|
+
};
|
|
1062
|
+
constructor(e) {
|
|
1063
|
+
super(e, l.type);
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
class qe extends h {
|
|
1067
|
+
toggleLock = () => !0;
|
|
1068
|
+
subscribeOnPanelLocked = (e) => () => {
|
|
1069
|
+
};
|
|
1070
|
+
subscribeOnPanelUnlocked = (e) => () => {
|
|
1071
|
+
};
|
|
1072
|
+
constructor(e) {
|
|
1073
|
+
super(e, h.type);
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
class Qe extends b {
|
|
1077
|
+
checkPressure = () => {
|
|
1078
|
+
};
|
|
1079
|
+
subscribeOnCheckPressure = (e) => () => {
|
|
1080
|
+
};
|
|
1081
|
+
constructor(e) {
|
|
1082
|
+
super(e, b.type);
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
class Ye extends u {
|
|
1086
|
+
enableHitbox = () => {
|
|
1087
|
+
};
|
|
1088
|
+
disableHitbox = () => {
|
|
1089
|
+
};
|
|
1090
|
+
subscribeOnPanelSelected = () => () => {
|
|
1091
|
+
};
|
|
1092
|
+
notifyPanelSelected = () => {
|
|
1093
|
+
};
|
|
1094
|
+
constructor(e) {
|
|
1095
|
+
super(e, u.type);
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
const Ne = 2;
|
|
1099
|
+
class Je {
|
|
1100
|
+
id;
|
|
1101
|
+
interfaceVersion = 1;
|
|
1102
|
+
appObjects;
|
|
1103
|
+
/**
|
|
1104
|
+
* Dispatch map: event key → subscribe controller
|
|
1105
|
+
* Each controller has signature: (id, appObjects, cb: () => void) => () => void
|
|
1106
|
+
*/
|
|
1107
|
+
eventDispatchMap = {
|
|
1108
|
+
exhaustOpened: re,
|
|
1109
|
+
exhaustClosed: le,
|
|
1110
|
+
exhaustCloseBlockedByLock: ue,
|
|
1111
|
+
panelLocked: he,
|
|
1112
|
+
panelUnlocked: de,
|
|
1113
|
+
panelSelected: me,
|
|
1114
|
+
pressureChecked: Pe
|
|
1115
|
+
};
|
|
1116
|
+
/**
|
|
1117
|
+
* Constructor: synchronously wire the domain instance.
|
|
1118
|
+
* No Babylon dependency; fully headless and testable.
|
|
1119
|
+
*
|
|
1120
|
+
* @param id - The instance identifier
|
|
1121
|
+
* @param appObjects - The AppObject repository
|
|
1122
|
+
*/
|
|
1123
|
+
constructor(e, t) {
|
|
1124
|
+
this.id = e, this.appObjects = t, T(e, t);
|
|
1125
|
+
}
|
|
1126
|
+
/**
|
|
1127
|
+
* Asynchronously load and attach the Babylon view.
|
|
1128
|
+
* Required before the component renders in a 3D scene.
|
|
1129
|
+
*/
|
|
1130
|
+
/**
|
|
1131
|
+
* Asynchronously load and attach the Babylon view.
|
|
1132
|
+
*
|
|
1133
|
+
* @param variant - Optional asset variant. No variants are implemented yet,
|
|
1134
|
+
* so an omitted or unrecognized variant loads the default asset
|
|
1135
|
+
* (best-effort, per Contract v1).
|
|
1136
|
+
*/
|
|
1137
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1138
|
+
async load(e) {
|
|
1139
|
+
const { makePneumaticPanelBabylonView: t } = await Promise.resolve().then(() => je), s = this.appObjects.get(this.id);
|
|
1140
|
+
s && await t(s).load();
|
|
1141
|
+
}
|
|
1142
|
+
/**
|
|
1143
|
+
* Tear down the component and release all resources.
|
|
1144
|
+
*/
|
|
1145
|
+
destroy() {
|
|
1146
|
+
this.appObjects.get(this.id)?.dispose();
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Toggle the exhaust valve open/closed.
|
|
1150
|
+
* @returns true if toggle succeeded, false if blocked (e.g., by lock)
|
|
1151
|
+
*/
|
|
1152
|
+
toggleExhaust() {
|
|
1153
|
+
return V(this.id, this.appObjects);
|
|
1154
|
+
}
|
|
1155
|
+
/**
|
|
1156
|
+
* Toggle the lock state.
|
|
1157
|
+
* @returns true if toggle succeeded, false if blocked (e.g., exhaust open)
|
|
1158
|
+
*/
|
|
1159
|
+
toggleLock() {
|
|
1160
|
+
return U(this.id, this.appObjects);
|
|
1161
|
+
}
|
|
1162
|
+
/**
|
|
1163
|
+
* Trigger a pressure check.
|
|
1164
|
+
*/
|
|
1165
|
+
checkPressure() {
|
|
1166
|
+
return A(this.id, this.appObjects);
|
|
1167
|
+
}
|
|
1168
|
+
/**
|
|
1169
|
+
* Show or hide the ghost lock hint.
|
|
1170
|
+
*/
|
|
1171
|
+
setShowGhostLockHint(e) {
|
|
1172
|
+
return ae(this.id, this.appObjects, e);
|
|
1173
|
+
}
|
|
1174
|
+
/**
|
|
1175
|
+
* Enable the whole-panel hitbox for single-target selection.
|
|
1176
|
+
*/
|
|
1177
|
+
enableHitbox() {
|
|
1178
|
+
return be(this.id, this.appObjects);
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Disable the whole-panel hitbox, restoring sub-component interactivity.
|
|
1182
|
+
*/
|
|
1183
|
+
disableHitbox() {
|
|
1184
|
+
return pe(this.id, this.appObjects);
|
|
1185
|
+
}
|
|
1186
|
+
getState() {
|
|
1187
|
+
return oe(
|
|
1188
|
+
this.id,
|
|
1189
|
+
this.appObjects,
|
|
1190
|
+
Ne
|
|
1191
|
+
);
|
|
1192
|
+
}
|
|
1193
|
+
applyState(e) {
|
|
1194
|
+
return ce(this.id, this.appObjects, e);
|
|
1195
|
+
}
|
|
1196
|
+
/**
|
|
1197
|
+
* Subscribe to a typed event.
|
|
1198
|
+
* @param event - The event key (typed by PneumaticPanelEvents)
|
|
1199
|
+
* @param cb - The callback function
|
|
1200
|
+
* @returns An unsubscribe function
|
|
1201
|
+
*/
|
|
1202
|
+
onEvent(e, t) {
|
|
1203
|
+
const s = this.eventDispatchMap[e];
|
|
1204
|
+
return s(this.id, this.appObjects, t);
|
|
1205
|
+
}
|
|
1206
|
+
/**
|
|
1207
|
+
* Subscribe to the reactive view model. Emits the current VM immediately,
|
|
1208
|
+
* then on every change. Returns an unsubscribe function.
|
|
1209
|
+
*/
|
|
1210
|
+
onViewModel(e) {
|
|
1211
|
+
return o.subscribe(this.id, this.appObjects, e), () => o.unsubscribe(this.id, this.appObjects, e);
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
2
1214
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
J as panelHitboxHoverExit,
|
|
48
|
-
K as pneumaticPanelPMAdapter,
|
|
49
|
-
Q as setHighlightedObject,
|
|
50
|
-
W as setShowGhostLockHint,
|
|
51
|
-
X as tryToggleExhaust,
|
|
52
|
-
Y as tryToggleLock
|
|
1215
|
+
Qe as MockPneumaticPanelCheckPressureUC,
|
|
1216
|
+
De as MockPneumaticPanelPM,
|
|
1217
|
+
Ye as MockPneumaticPanelSelectUC,
|
|
1218
|
+
$e as MockPneumaticPanelToggleExhaustUC,
|
|
1219
|
+
qe as MockPneumaticPanelToggleLockUC,
|
|
1220
|
+
Ne as PNEUMATIC_PANEL_STATE_VERSION,
|
|
1221
|
+
C as PneumaticPanelBabylonView,
|
|
1222
|
+
b as PneumaticPanelCheckPressureUC,
|
|
1223
|
+
c as PneumaticPanelEntity,
|
|
1224
|
+
Je as PneumaticPanelFacade,
|
|
1225
|
+
_e as PneumaticPanelFeatureFactory,
|
|
1226
|
+
p as PneumaticPanelPM,
|
|
1227
|
+
P as PneumaticPanelRepo,
|
|
1228
|
+
u as PneumaticPanelSelectUC,
|
|
1229
|
+
l as PneumaticPanelToggleExhaustUC,
|
|
1230
|
+
h as PneumaticPanelToggleLockUC,
|
|
1231
|
+
ce as applyPanelState,
|
|
1232
|
+
A as checkPressure,
|
|
1233
|
+
ye as componentConfig,
|
|
1234
|
+
Re as createBabylonPneumaticPanel,
|
|
1235
|
+
pe as disablePanelHitbox,
|
|
1236
|
+
be as enablePanelHitbox,
|
|
1237
|
+
oe as getPanelState,
|
|
1238
|
+
v as makePneumaticPanelBabylonView,
|
|
1239
|
+
te as makePneumaticPanelCheckPressureUC,
|
|
1240
|
+
I as makePneumaticPanelEntity,
|
|
1241
|
+
We as makePneumaticPanelFeatureFactory,
|
|
1242
|
+
fe as makePneumaticPanelPM,
|
|
1243
|
+
Q as makePneumaticPanelRepo,
|
|
1244
|
+
se as makePneumaticPanelSelectUC,
|
|
1245
|
+
J as makePneumaticPanelToggleExhaustUC,
|
|
1246
|
+
Z as makePneumaticPanelToggleLockUC,
|
|
1247
|
+
Pe as onCheckPressure,
|
|
1248
|
+
ue as onExhaustCloseBlockedByLock,
|
|
1249
|
+
le as onExhaustClosed,
|
|
1250
|
+
re as onExhaustOpened,
|
|
1251
|
+
he as onPanelLocked,
|
|
1252
|
+
me as onPanelSelected,
|
|
1253
|
+
de as onPanelUnlocked,
|
|
1254
|
+
ge as panelHitboxClicked,
|
|
1255
|
+
o as pneumaticPanelPMAdapter,
|
|
1256
|
+
ae as setShowGhostLockHint,
|
|
1257
|
+
V as tryToggleExhaust,
|
|
1258
|
+
U as tryToggleLock
|
|
53
1259
|
};
|