@fmsim/machine 2.0.0-beta.7 → 2.0.0-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/agv.js +2 -2
  2. package/dist/agv.js.map +1 -1
  3. package/dist/carrier-manager.js +93 -0
  4. package/dist/carrier-manager.js.map +1 -0
  5. package/dist/carrier.js +81 -5
  6. package/dist/carrier.js.map +1 -1
  7. package/dist/conveyor-join.js +8 -2
  8. package/dist/conveyor-join.js.map +1 -1
  9. package/dist/conveyor.js +8 -0
  10. package/dist/conveyor.js.map +1 -1
  11. package/dist/crane.js.map +1 -1
  12. package/dist/factories/agv-3d.js +8 -9
  13. package/dist/factories/agv-3d.js.map +1 -1
  14. package/dist/factories/conveyor-3d.js +166 -81
  15. package/dist/factories/conveyor-3d.js.map +1 -1
  16. package/dist/factories/crane-3d.js +5 -7
  17. package/dist/factories/crane-3d.js.map +1 -1
  18. package/dist/factories/crane-rail-3d.js +4 -6
  19. package/dist/factories/crane-rail-3d.js.map +1 -1
  20. package/dist/factories/machine-3d.js +384 -133
  21. package/dist/factories/machine-3d.js.map +1 -1
  22. package/dist/factories/oht-3d.js +20 -20
  23. package/dist/factories/oht-3d.js.map +1 -1
  24. package/dist/factories/shuttle-3d.js +2 -5
  25. package/dist/factories/shuttle-3d.js.map +1 -1
  26. package/dist/features/mcs-status-mixin.js +22 -0
  27. package/dist/features/mcs-status-mixin.js.map +1 -1
  28. package/dist/index.js +50 -34
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcs-carrier-holder.js +39 -22
  31. package/dist/mcs-carrier-holder.js.map +1 -1
  32. package/dist/mcs-machine.js +28 -0
  33. package/dist/mcs-machine.js.map +1 -1
  34. package/dist/mcs-unit.js +10 -0
  35. package/dist/mcs-unit.js.map +1 -1
  36. package/dist/mcs-vehicle.js +8 -3
  37. package/dist/mcs-vehicle.js.map +1 -1
  38. package/dist/node.js +1 -1
  39. package/dist/node.js.map +1 -1
  40. package/dist/oht.js.map +1 -1
  41. package/dist/scanner.js +30 -0
  42. package/dist/scanner.js.map +1 -0
  43. package/dist/scene/root-container-override.js +9 -0
  44. package/dist/scene/root-container-override.js.map +1 -1
  45. package/dist/stocker-abnormal-bar.js +1 -1
  46. package/dist/stocker-abnormal-bar.js.map +1 -1
  47. package/dist/stocker-capacity-bar.js +3 -3
  48. package/dist/stocker-capacity-bar.js.map +1 -1
  49. package/dist/stocker-carrier-bar.js +1 -1
  50. package/dist/stocker-carrier-bar.js.map +1 -1
  51. package/dist/stocker.js +6 -0
  52. package/dist/stocker.js.map +1 -1
  53. package/dist/templates/backdrop.js +30 -0
  54. package/dist/templates/backdrop.js.map +1 -0
  55. package/dist/templates/decal.js +21 -0
  56. package/dist/templates/decal.js.map +1 -0
  57. package/dist/templates/index.js +7 -1
  58. package/dist/templates/index.js.map +1 -1
  59. package/dist/templates/scanner.js +20 -0
  60. package/dist/templates/scanner.js.map +1 -0
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/dist/utils/get-value-on-ranges.js +2 -4
  63. package/dist/utils/get-value-on-ranges.js.map +1 -1
  64. package/dist/zone-capacity-bar.js +3 -3
  65. package/dist/zone-capacity-bar.js.map +1 -1
  66. package/icons/backdrop.png +0 -0
  67. package/icons/decal.png +0 -0
  68. package/jest.config.js +10 -0
  69. package/package.json +4 -3
  70. package/src/agv.ts +2 -2
  71. package/src/carrier-manager.ts +117 -0
  72. package/src/carrier.ts +80 -3
  73. package/src/conveyor-join.ts +5 -2
  74. package/src/conveyor.ts +8 -0
  75. package/src/crane.ts +1 -1
  76. package/src/factories/agv-3d.ts +9 -10
  77. package/src/factories/conveyor-3d.ts +168 -84
  78. package/src/factories/crane-3d.ts +6 -8
  79. package/src/factories/crane-rail-3d.ts +5 -7
  80. package/src/factories/machine-3d.ts +452 -145
  81. package/src/factories/oht-3d.ts +20 -20
  82. package/src/factories/shuttle-3d.ts +2 -6
  83. package/src/features/mcs-status-mixin.ts +21 -0
  84. package/src/index.ts +56 -34
  85. package/src/mcs-carrier-holder.ts +38 -34
  86. package/src/mcs-machine.ts +29 -0
  87. package/src/mcs-unit.ts +11 -0
  88. package/src/mcs-vehicle.ts +9 -6
  89. package/src/node.ts +1 -1
  90. package/src/oht.ts +1 -1
  91. package/src/scanner.ts +29 -0
  92. package/src/scene/root-container-override.ts +12 -0
  93. package/src/stocker-abnormal-bar.ts +1 -1
  94. package/src/stocker-capacity-bar.ts +3 -3
  95. package/src/stocker-carrier-bar.ts +1 -1
  96. package/src/stocker.ts +7 -0
  97. package/src/templates/backdrop.ts +30 -0
  98. package/src/templates/decal.ts +21 -0
  99. package/src/templates/index.ts +7 -1
  100. package/src/templates/scanner.ts +20 -0
  101. package/src/utils/get-value-on-ranges.ts +2 -4
  102. package/src/zone-capacity-bar.ts +3 -3
  103. package/translations/en.json +16 -1
  104. package/translations/ja.json +16 -1
  105. package/translations/ko.json +16 -1
  106. package/translations/ms.json +16 -1
  107. package/translations/zh.json +16 -1
package/dist/index.js CHANGED
@@ -1,50 +1,61 @@
1
1
  // ── side-effect: scene override ──
2
- import './scene/root-container-override.js';
2
+ import './scene/root-container-override';
3
3
  // ── side-effect: 3D factories ──
4
- import './factories/machine-3d.js';
5
- import './factories/conveyor-3d.js';
6
- import './factories/agv-3d.js';
7
- import './factories/oht-3d.js';
8
- import './factories/shuttle-3d.js';
9
- import './factories/crane-3d.js';
10
- import './factories/crane-rail-3d.js';
4
+ import './factories/machine-3d';
5
+ import './factories/conveyor-3d';
6
+ import './factories/agv-3d';
7
+ import './factories/oht-3d';
8
+ import './factories/shuttle-3d';
9
+ import './factories/crane-3d';
10
+ import './factories/crane-rail-3d';
11
11
  // ── side-effect: @sceneComponent 등록 (tree-shaking 방지) ──
12
- import './zone-capacity-bar.js';
13
- import './stocker-capacity-bar.js';
14
- import './stocker-carrier-bar.js';
15
- import './stocker-abnormal-bar.js';
16
- import './port-flow.js';
17
- import './agv-line.js';
18
- import './buffer.js';
19
- import './conveyor.js';
20
- import './conveyor-join.js';
21
- import './equipment.js';
22
- import './oht-line.js';
23
- import './stocker.js';
24
- import './crane-rail.js';
25
- import './agv.js';
26
- import './oht.js';
27
- import './shuttle.js';
28
- import './port.js';
29
- import './crane.js';
30
- import './shelf.js';
31
- import './carrier.js';
32
- import './node.js';
33
- import './node-path.js';
34
- import './floating-container.js';
35
- import './static-container.js';
36
- import './clickable-popup.js';
12
+ // bars & overlays
13
+ import './zone-capacity-bar';
14
+ import './stocker-capacity-bar';
15
+ import './stocker-carrier-bar';
16
+ import './stocker-abnormal-bar';
17
+ import './port-flow';
18
+ // facilities
19
+ import './agv-line';
20
+ import './buffer';
21
+ import './conveyor';
22
+ import './conveyor-join';
23
+ import './equipment';
24
+ import './oht-line';
25
+ import './stocker';
26
+ import './crane-rail';
27
+ import './scanner';
28
+ // vehicles
29
+ import './agv';
30
+ import './oht';
31
+ import './shuttle';
32
+ // units
33
+ import './port';
34
+ import './crane';
35
+ import './shelf';
36
+ import './carrier';
37
+ // topology
38
+ import './node';
39
+ import './node-path';
40
+ // containers
41
+ import './floating-container';
42
+ import './static-container';
43
+ import './clickable-popup';
44
+ // ── groups ──
37
45
  export { default as MachineGroups } from './groups';
46
+ // ── base classes ──
38
47
  export { default as MCSMachine } from './mcs-machine';
39
48
  export { default as MCSUnit } from './mcs-unit';
40
49
  export { default as MCSCarrierHolder } from './mcs-carrier-holder';
41
50
  export { default as MCSVehicle } from './mcs-vehicle';
42
51
  export { default as MCSTransport } from './mcs-transport';
52
+ // ── bars & overlays ──
43
53
  export { default as ZoneCapacityBar } from './zone-capacity-bar';
44
54
  export { default as StockerCapacityBar } from './stocker-capacity-bar';
45
55
  export { default as StockerCarrierBar } from './stocker-carrier-bar';
46
56
  export { default as StockerAbnormalBar } from './stocker-abnormal-bar';
47
57
  export { default as PortFlow } from './port-flow';
58
+ // ── facilities ──
48
59
  export { default as AGVLine } from './agv-line';
49
60
  export { default as Buffer } from './buffer';
50
61
  export { default as Conveyor } from './conveyor';
@@ -53,16 +64,21 @@ export { default as Equipment } from './equipment';
53
64
  export { default as OHTLine } from './oht-line';
54
65
  export { default as Stocker } from './stocker';
55
66
  export { default as CraneRail } from './crane-rail';
67
+ export { default as Scanner } from './scanner';
68
+ // ── vehicles ──
56
69
  export { default as AGV } from './agv';
57
70
  export { default as OHT } from './oht';
58
71
  export { default as Shuttle } from './shuttle';
72
+ // ── units ──
59
73
  export { default as Port } from './port';
60
74
  export { default as Crane } from './crane';
61
75
  export { default as Shelf } from './shelf';
62
76
  export { default as Carrier } from './carrier';
77
+ // ── topology ──
63
78
  export { default as Node } from './node';
64
79
  export { default as NodePath } from './node-path';
80
+ // ── containers ──
65
81
  export { default as FloatingContainer } from './floating-container';
66
- export { default as StaticContainer } from './static-container.js';
82
+ export { default as StaticContainer } from './static-container';
67
83
  export { default as ClickablePopup } from './clickable-popup';
68
84
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// ── side-effect: scene override ──\nimport './scene/root-container-override.js'\n\n// ── side-effect: 3D factories ──\nimport './factories/machine-3d.js'\nimport './factories/conveyor-3d.js'\nimport './factories/agv-3d.js'\nimport './factories/oht-3d.js'\nimport './factories/shuttle-3d.js'\nimport './factories/crane-3d.js'\nimport './factories/crane-rail-3d.js'\n\n// ── side-effect: @sceneComponent 등록 (tree-shaking 방지) ──\nimport './zone-capacity-bar.js'\nimport './stocker-capacity-bar.js'\nimport './stocker-carrier-bar.js'\nimport './stocker-abnormal-bar.js'\nimport './port-flow.js'\nimport './agv-line.js'\nimport './buffer.js'\nimport './conveyor.js'\nimport './conveyor-join.js'\nimport './equipment.js'\nimport './oht-line.js'\nimport './stocker.js'\nimport './crane-rail.js'\nimport './agv.js'\nimport './oht.js'\nimport './shuttle.js'\nimport './port.js'\nimport './crane.js'\nimport './shelf.js'\nimport './carrier.js'\nimport './node.js'\nimport './node-path.js'\nimport './floating-container.js'\nimport './static-container.js'\nimport './clickable-popup.js'\n\nexport { default as MachineGroups } from './groups'\n\nexport { default as MCSMachine } from './mcs-machine'\nexport { default as MCSUnit } from './mcs-unit'\nexport { default as MCSCarrierHolder } from './mcs-carrier-holder'\nexport { default as MCSVehicle } from './mcs-vehicle'\nexport { default as MCSTransport } from './mcs-transport'\nexport { default as ZoneCapacityBar } from './zone-capacity-bar'\nexport { default as StockerCapacityBar } from './stocker-capacity-bar'\nexport { default as StockerCarrierBar } from './stocker-carrier-bar'\nexport { default as StockerAbnormalBar } from './stocker-abnormal-bar'\nexport { default as PortFlow } from './port-flow'\n\nexport { default as AGVLine } from './agv-line'\nexport { default as Buffer } from './buffer'\nexport { default as Conveyor } from './conveyor'\nexport { default as ConveyorJoin } from './conveyor-join'\nexport { default as Equipment } from './equipment'\nexport { default as OHTLine } from './oht-line'\nexport { default as Stocker } from './stocker'\nexport { default as CraneRail } from './crane-rail'\n\nexport { default as AGV } from './agv'\nexport { default as OHT } from './oht'\nexport { default as Shuttle } from './shuttle'\n\nexport { default as Port } from './port'\nexport { default as Crane } from './crane'\nexport { default as Shelf } from './shelf'\nexport { default as Carrier } from './carrier'\n\nexport { default as Node } from './node'\nexport { default as NodePath } from './node-path'\n\nexport { default as FloatingContainer } from './floating-container'\nexport { default as StaticContainer } from './static-container.js'\nexport { default as ClickablePopup } from './clickable-popup'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// ── side-effect: scene override ──\nimport './scene/root-container-override'\n\n// ── side-effect: 3D factories ──\nimport './factories/machine-3d'\nimport './factories/conveyor-3d'\nimport './factories/agv-3d'\nimport './factories/oht-3d'\nimport './factories/shuttle-3d'\nimport './factories/crane-3d'\nimport './factories/crane-rail-3d'\n\n// ── side-effect: @sceneComponent 등록 (tree-shaking 방지) ──\n// bars & overlays\nimport './zone-capacity-bar'\nimport './stocker-capacity-bar'\nimport './stocker-carrier-bar'\nimport './stocker-abnormal-bar'\nimport './port-flow'\n\n// facilities\nimport './agv-line'\nimport './buffer'\nimport './conveyor'\nimport './conveyor-join'\nimport './equipment'\nimport './oht-line'\nimport './stocker'\nimport './crane-rail'\nimport './scanner'\n\n// vehicles\nimport './agv'\nimport './oht'\nimport './shuttle'\n\n// units\nimport './port'\nimport './crane'\nimport './shelf'\nimport './carrier'\n\n// topology\nimport './node'\nimport './node-path'\n\n// containers\nimport './floating-container'\nimport './static-container'\nimport './clickable-popup'\n\n// ── groups ──\nexport { default as MachineGroups } from './groups'\n\n// ── base classes ──\nexport { default as MCSMachine } from './mcs-machine'\nexport { default as MCSUnit } from './mcs-unit'\nexport { default as MCSCarrierHolder } from './mcs-carrier-holder'\nexport { default as MCSVehicle } from './mcs-vehicle'\nexport { default as MCSTransport } from './mcs-transport'\n\n// ── bars & overlays ──\nexport { default as ZoneCapacityBar } from './zone-capacity-bar'\nexport { default as StockerCapacityBar } from './stocker-capacity-bar'\nexport { default as StockerCarrierBar } from './stocker-carrier-bar'\nexport { default as StockerAbnormalBar } from './stocker-abnormal-bar'\nexport { default as PortFlow } from './port-flow'\n\n// ── facilities ──\nexport { default as AGVLine } from './agv-line'\nexport { default as Buffer } from './buffer'\nexport { default as Conveyor } from './conveyor'\nexport { default as ConveyorJoin } from './conveyor-join'\nexport { default as Equipment } from './equipment'\nexport { default as OHTLine } from './oht-line'\nexport { default as Stocker } from './stocker'\nexport { default as CraneRail } from './crane-rail'\nexport { default as Scanner } from './scanner'\n\n// ── vehicles ──\nexport { default as AGV } from './agv'\nexport { default as OHT } from './oht'\nexport { default as Shuttle } from './shuttle'\n\n// ── units ──\nexport { default as Port } from './port'\nexport { default as Crane } from './crane'\nexport { default as Shelf } from './shelf'\nexport { default as Carrier } from './carrier'\n\n// ── topology ──\nexport { default as Node } from './node'\nexport { default as NodePath } from './node-path'\n\n// ── containers ──\nexport { default as FloatingContainer } from './floating-container'\nexport { default as StaticContainer } from './static-container'\nexport { default as ClickablePopup } from './clickable-popup'\n"]}
@@ -1,4 +1,3 @@
1
- import { Model } from '@hatiolab/things-scene';
2
1
  import { themesColorMap, themesAnimationMap } from '@fmsim/api';
3
2
  import MCSUnit from './mcs-unit.js';
4
3
  export default class MCSCarrierHolder extends MCSUnit {
@@ -28,33 +27,51 @@ export default class MCSCarrierHolder extends MCSUnit {
28
27
  }
29
28
  ];
30
29
  }
31
- async ready() {
32
- super.ready();
33
- for (let component of this.components) {
34
- this.removeComponent(component);
35
- }
36
- const { width, height } = this.state;
37
- this.carrier = Model.compile({
38
- type: 'Carrier',
39
- left: 0,
40
- top: 0,
41
- width,
42
- height,
43
- showText: this.getState('showCarrierText') || false
44
- }, this.root.app);
45
- this.addComponent(this.carrier);
46
- this.carrier.data = this.data;
30
+ get showOverflow() {
31
+ return true;
32
+ }
33
+ get hierarchy() {
34
+ return Object.assign(Object.assign({}, super.hierarchy), { components: [] });
47
35
  }
48
36
  dispose() {
49
- this.carrier = null;
37
+ var _a, _b;
38
+ ;
39
+ (_b = (_a = this.root) === null || _a === void 0 ? void 0 : _a.carrierManager) === null || _b === void 0 ? void 0 : _b.update(this, {}, this.data);
50
40
  super.dispose();
51
41
  }
52
- get hierarchy() {
53
- return Object.assign(Object.assign({}, super.hierarchy), { components: [] });
42
+ async ready() {
43
+ super.ready();
44
+ const { CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS } = this.data || {};
45
+ if (CARRIERNAME) {
46
+ ;
47
+ this.root.carrierManager.update(this, {
48
+ CARRIERNAME,
49
+ CARRIERTYPE,
50
+ EMPTYTYPE,
51
+ CARRIERSTATUS
52
+ }, undefined);
53
+ }
54
54
  }
55
55
  onchangeData(after, before) {
56
- if (this.carrier) {
57
- this.carrier.data = this.data;
56
+ // CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS 이 변경되었을 때만 캐리어 관리자에게 알린다.
57
+ const { CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS } = after.data || {};
58
+ const { CARRIERNAME: beforeCARRIERNAME, CARRIERTYPE: beforeCARRIERTYPE = '', EMPTYTYPE: beforeEMPTYTYPE, CARRIERSTATUS: beforeCARRIERSTATUS } = before.data || {};
59
+ if (CARRIERNAME !== beforeCARRIERNAME ||
60
+ CARRIERTYPE !== beforeCARRIERTYPE ||
61
+ EMPTYTYPE !== beforeEMPTYTYPE ||
62
+ CARRIERSTATUS !== beforeCARRIERSTATUS) {
63
+ ;
64
+ this.root.carrierManager.update(this, {
65
+ CARRIERNAME,
66
+ CARRIERTYPE,
67
+ EMPTYTYPE,
68
+ CARRIERSTATUS
69
+ }, {
70
+ CARRIERNAME: beforeCARRIERNAME,
71
+ CARRIERTYPE: beforeCARRIERTYPE,
72
+ EMPTYTYPE: beforeEMPTYTYPE,
73
+ CARRIERSTATUS: beforeCARRIERSTATUS
74
+ });
58
75
  }
59
76
  super.onchangeData(after, before);
60
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcs-carrier-holder.js","sourceRoot":"","sources":["../src/mcs-carrier-holder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,OAAO,MAAM,eAAe,CAAA;AAGnC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,OAAO,CAAC,UAAU;YACrB;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE;oBACR,OAAO,EAAE,cAAc;iBACxB;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE;oBACR,OAAO,EAAE,kBAAkB;iBAC5B;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,iBAAiB;aACxB;SACF,CAAA;IACH,CAAC;IAID,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QACjC,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAC1B;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;YACN,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,KAAK;SACpD,EACD,IAAI,CAAC,IAAI,CAAC,GAAG,CACP,CAAA;QAER,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAA;QAEhC,IAAI,CAAC,OAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,SAAS;QACX,uCACK,KAAK,CAAC,SAAS,KAClB,UAAU,EAAE,EAAE,IACf;IACH,CAAC;IAED,YAAY,CAAC,KAA0B,EAAE,MAA2B;QAClE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/B,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;CACF","sourcesContent":["import { Model, Properties } from '@hatiolab/things-scene'\nimport { themesColorMap, themesAnimationMap } from '@fmsim/api'\nimport MCSUnit from './mcs-unit.js'\nimport Carrier from './carrier.js'\n\nexport default class MCSCarrierHolder extends MCSUnit {\n static get properties(): any {\n return [\n ...MCSUnit.properties,\n {\n type: 'select',\n label: 'carrier-legend-name',\n name: 'carrierLegendName',\n property: {\n options: themesColorMap\n }\n },\n {\n type: 'select',\n label: 'carrier-animation-name',\n name: 'carrierAnimationName',\n property: {\n options: themesAnimationMap\n }\n },\n {\n type: 'boolean',\n label: 'show-carrier-text',\n name: 'showCarrierText'\n }\n ]\n }\n\n carrier?: Carrier | null\n\n async ready() {\n super.ready()\n\n for (let component of this.components) {\n this.removeComponent(component)\n }\n\n const { width, height } = this.state\n\n this.carrier = Model.compile(\n {\n type: 'Carrier',\n left: 0,\n top: 0,\n width,\n height,\n showText: this.getState('showCarrierText') || false\n },\n this.root.app\n ) as any\n\n this.addComponent(this.carrier!)\n\n this.carrier!.data = this.data\n }\n\n dispose(): void {\n this.carrier = null\n\n super.dispose()\n }\n\n get hierarchy() {\n return {\n ...super.hierarchy,\n components: []\n }\n }\n\n onchangeData(after: Record<string, any>, before: Record<string, any>): void {\n if (this.carrier) {\n this.carrier.data = this.data\n }\n\n super.onchangeData(after, before)\n }\n}\n"]}
1
+ {"version":3,"file":"mcs-carrier-holder.js","sourceRoot":"","sources":["../src/mcs-carrier-holder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,OAAO,MAAM,eAAe,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,OAAO,CAAC,UAAU;YACrB;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE;oBACR,OAAO,EAAE,cAAc;iBACxB;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE;oBACR,OAAO,EAAE,kBAAkB;iBAC5B;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,iBAAiB;aACxB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,SAAS;QACX,uCACK,KAAK,CAAC,SAAS,KAClB,UAAU,EAAE,EAAE,IACf;IACH,CAAC;IAED,OAAO;;QACL,CAAC;QAAA,MAAA,MAAC,IAAI,CAAC,IAAY,0CAAE,cAAc,0CAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QAEnF,IAAG,WAAW,EAAE,CAAC;YACf,CAAC;YAAC,IAAI,CAAC,IAAY,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC9C,WAAW;gBACX,WAAW;gBACX,SAAS;gBACT,aAAa;aACd,EAAE,SAAS,CAAC,CAAA;QACf,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAA0B,EAAE,MAA2B;QAClE,oFAAoF;QACpF,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAA;QACpF,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;QACjK,IAAG,WAAW,KAAK,iBAAiB;YAClC,WAAW,KAAK,iBAAiB;YACjC,SAAS,KAAK,eAAe;YAC7B,aAAa,KAAK,mBAAmB,EAAE,CAAC;YACxC,CAAC;YAAC,IAAI,CAAC,IAAY,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC9C,WAAW;gBACX,WAAW;gBACX,SAAS;gBACT,aAAa;aACd,EAAE;gBACD,WAAW,EAAE,iBAAiB;gBAC9B,WAAW,EAAE,iBAAiB;gBAC9B,SAAS,EAAE,eAAe;gBAC1B,aAAa,EAAE,mBAAmB;aACnC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;CACF","sourcesContent":["import { themesColorMap, themesAnimationMap } from '@fmsim/api'\nimport MCSUnit from './mcs-unit.js'\n\nexport default class MCSCarrierHolder extends MCSUnit {\n static get properties(): any {\n return [\n ...MCSUnit.properties,\n {\n type: 'select',\n label: 'carrier-legend-name',\n name: 'carrierLegendName',\n property: {\n options: themesColorMap\n }\n },\n {\n type: 'select',\n label: 'carrier-animation-name',\n name: 'carrierAnimationName',\n property: {\n options: themesAnimationMap\n }\n },\n {\n type: 'boolean',\n label: 'show-carrier-text',\n name: 'showCarrierText'\n }\n ]\n }\n\n get showOverflow() {\n return true\n }\n\n get hierarchy() {\n return {\n ...super.hierarchy,\n components: []\n }\n }\n\n dispose(): void {\n ;(this.root as any)?.carrierManager?.update(this, {}, this.data)\n super.dispose()\n }\n\n async ready() {\n super.ready()\n\n const { CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS } = this.data || {}\n \n if(CARRIERNAME) {\n ;(this.root as any).carrierManager.update(this, {\n CARRIERNAME,\n CARRIERTYPE,\n EMPTYTYPE,\n CARRIERSTATUS\n }, undefined)\n }\n }\n\n onchangeData(after: Record<string, any>, before: Record<string, any>): void {\n // CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS 이 변경되었을 때만 캐리어 관리자에게 알린다.\n const { CARRIERNAME, CARRIERTYPE = '', EMPTYTYPE, CARRIERSTATUS } = after.data || {}\n const { CARRIERNAME: beforeCARRIERNAME, CARRIERTYPE: beforeCARRIERTYPE = '', EMPTYTYPE: beforeEMPTYTYPE, CARRIERSTATUS: beforeCARRIERSTATUS } = before.data || {}\n if(CARRIERNAME !== beforeCARRIERNAME ||\n CARRIERTYPE !== beforeCARRIERTYPE ||\n EMPTYTYPE !== beforeEMPTYTYPE ||\n CARRIERSTATUS !== beforeCARRIERSTATUS) {\n ;(this.root as any).carrierManager.update(this, {\n CARRIERNAME,\n CARRIERTYPE,\n EMPTYTYPE,\n CARRIERSTATUS\n }, {\n CARRIERNAME: beforeCARRIERNAME,\n CARRIERTYPE: beforeCARRIERTYPE,\n EMPTYTYPE: beforeEMPTYTYPE,\n CARRIERSTATUS: beforeCARRIERSTATUS\n })\n }\n\n super.onchangeData(after, before)\n }\n}\n"]}
@@ -57,6 +57,34 @@ export default class MCSMachine extends MCSStatusMixin(ContainerAbstract) {
57
57
  getLegendFallback() {
58
58
  return LEGEND_MACHINE;
59
59
  }
60
+ /**
61
+ * In 2D, ignore `state.alpha`; preserve everything else.
62
+ *
63
+ * things-scene's base prerender (component-drawing.ts:31, 44) does:
64
+ * const fade = (alpha || 1) - this._delta.fade
65
+ * if (fade) context.globalAlpha = fade
66
+ *
67
+ * It *overwrites* `globalAlpha` (not multiplies), so the inherited
68
+ * parent alpha is also lost — that's a base-layer quirk we match the
69
+ * recovery for. Then at line 48 it applies editMode+hidden dimming
70
+ * with a *= 0.5.
71
+ *
72
+ * Our recovery:
73
+ * 1. Capture the inherited `globalAlpha` *before* super runs.
74
+ * 2. Let super do its work (transforms / shadow / dim flags).
75
+ * 3. Restore globalAlpha to inherited × editMode-hidden dim factor —
76
+ * i.e., what super would have produced if our state.alpha were 1.
77
+ *
78
+ * 3D path is unaffected: 3D factories read `state.alpha` directly via
79
+ * their `updateAlpha()` implementations and continue to honor it (with
80
+ * per-config opacity fallback).
81
+ */
82
+ prerender(ctx) {
83
+ const inherited = ctx.globalAlpha;
84
+ super.prerender(ctx);
85
+ const dim = this.app.isEditMode && this.hidden ? 0.5 : 1;
86
+ ctx.globalAlpha = inherited * dim;
87
+ }
60
88
  render(ctx) {
61
89
  var { round = 0, lineWidth } = this.state;
62
90
  var { left, top, width, height } = this.bounds;
@@ -1 +1 @@
1
- {"version":3,"file":"mcs-machine.js","sourceRoot":"","sources":["../src/mcs-machine.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ContainerAbstract } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\n\nimport { LEGEND_MACHINE, Legend } from './features/mcs-status-default'\n\n/**\n * MCS Machine의 공통 속성을 정의한 최상위 오브젝트\n * - Container\n * -\n */\nexport default class MCSMachine extends MCSStatusMixin(ContainerAbstract) {\n static get properties(): any {\n return [\n ...MCSStatusMixinProperties,\n {\n type: 'number',\n name: 'round',\n label: 'round'\n }\n ]\n }\n\n get showMoveHandle() {\n return false\n }\n\n containable(component: Component) {\n return ['rect', 'ellipse'].includes(component.state.type)\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get hasTextProperty() {\n return true\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return LEGEND_MACHINE\n }\n\n get auxColor() {\n return this.state.strokeStyle\n }\n\n getLegendFallback() {\n return LEGEND_MACHINE\n }\n\n render(ctx) {\n var { round = 0, lineWidth } = this.state\n var { left, top, width, height } = this.bounds\n\n ctx.beginPath()\n\n ctx.strokeStyle = this.auxColor\n ctx.fillStyle = this.statusColor!\n ctx.lineWidth = lineWidth || 1\n ctx.lineCap = 'round'\n ctx.setLineDash([])\n\n if (round > 0) {\n ctx.roundRect(left, top, width, height, round)\n } else {\n ctx.rect(left, top, width, height)\n }\n\n ctx.fill()\n ctx.stroke()\n }\n\n // get text() {\n // if (this.data?.LOCALENAME) {\n // // TODO 왜 LOCALENAME 데이타는 문자열인가 ? 오브젝트로 보내달라.\n // return JSON.parse(this.data.LOCALENAME)[getLocaleLanguage()]\n // }\n\n // return super.text\n // }\n\n // set text(text) {\n // super.text = text\n // }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
1
+ {"version":3,"file":"mcs-machine.js","sourceRoot":"","sources":["../src/mcs-machine.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ContainerAbstract } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\n\nimport { LEGEND_MACHINE, Legend } from './features/mcs-status-default'\n\n/**\n * MCS Machine의 공통 속성을 정의한 최상위 오브젝트\n * - Container\n * -\n */\nexport default class MCSMachine extends MCSStatusMixin(ContainerAbstract) {\n static get properties(): any {\n return [\n ...MCSStatusMixinProperties,\n {\n type: 'number',\n name: 'round',\n label: 'round'\n }\n ]\n }\n\n get showMoveHandle() {\n return false\n }\n\n containable(component: Component) {\n return ['rect', 'ellipse'].includes(component.state.type)\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get hasTextProperty() {\n return true\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return LEGEND_MACHINE\n }\n\n get auxColor() {\n return this.state.strokeStyle\n }\n\n getLegendFallback() {\n return LEGEND_MACHINE\n }\n\n /**\n * In 2D, ignore `state.alpha`; preserve everything else.\n *\n * things-scene's base prerender (component-drawing.ts:31, 44) does:\n * const fade = (alpha || 1) - this._delta.fade\n * if (fade) context.globalAlpha = fade\n *\n * It *overwrites* `globalAlpha` (not multiplies), so the inherited\n * parent alpha is also lost — that's a base-layer quirk we match the\n * recovery for. Then at line 48 it applies editMode+hidden dimming\n * with a *= 0.5.\n *\n * Our recovery:\n * 1. Capture the inherited `globalAlpha` *before* super runs.\n * 2. Let super do its work (transforms / shadow / dim flags).\n * 3. Restore globalAlpha to inherited × editMode-hidden dim factor —\n * i.e., what super would have produced if our state.alpha were 1.\n *\n * 3D path is unaffected: 3D factories read `state.alpha` directly via\n * their `updateAlpha()` implementations and continue to honor it (with\n * per-config opacity fallback).\n */\n prerender(ctx: any) {\n const inherited = ctx.globalAlpha\n super.prerender(ctx)\n const dim = this.app.isEditMode && this.hidden ? 0.5 : 1\n ctx.globalAlpha = inherited * dim\n }\n\n render(ctx) {\n var { round = 0, lineWidth } = this.state\n var { left, top, width, height } = this.bounds\n\n ctx.beginPath()\n\n ctx.strokeStyle = this.auxColor\n ctx.fillStyle = this.statusColor!\n ctx.lineWidth = lineWidth || 1\n ctx.lineCap = 'round'\n ctx.setLineDash([])\n\n if (round > 0) {\n ctx.roundRect(left, top, width, height, round)\n } else {\n ctx.rect(left, top, width, height)\n }\n\n ctx.fill()\n ctx.stroke()\n }\n\n // get text() {\n // if (this.data?.LOCALENAME) {\n // // TODO 왜 LOCALENAME 데이타는 문자열인가 ? 오브젝트로 보내달라.\n // return JSON.parse(this.data.LOCALENAME)[getLocaleLanguage()]\n // }\n\n // return super.text\n // }\n\n // set text(text) {\n // super.text = text\n // }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
package/dist/mcs-unit.js CHANGED
@@ -40,6 +40,16 @@ export default class MCSUnit extends MCSStatusMixin(ParentObjectMixin(ContainerA
40
40
  getLegendFallback() {
41
41
  return LEGEND_UNIT;
42
42
  }
43
+ /**
44
+ * In 2D, ignore `state.alpha`; preserve inherited alpha + editMode-hidden dim.
45
+ * See MCSMachine.prerender for the full rationale.
46
+ */
47
+ prerender(ctx) {
48
+ const inherited = ctx.globalAlpha;
49
+ super.prerender(ctx);
50
+ const dim = this.app.isEditMode && this.hidden ? 0.5 : 1;
51
+ ctx.globalAlpha = inherited * dim;
52
+ }
43
53
  contains(x, y) {
44
54
  var { left, top, width, height, lineWidth = 0 } = this.state;
45
55
  var extend = lineWidth / 2;
@@ -1 +1 @@
1
- {"version":3,"file":"mcs-unit.js","sourceRoot":"","sources":["../src/mcs-unit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ContainerAbstract } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\nimport { LEGEND_UNIT, Legend } from './features/mcs-status-default'\nimport { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin'\n\n/**\n * MCS용 Unit들의 공통 속성을 정의한 오브젝트\n */\nexport default class MCSUnit extends MCSStatusMixin(ParentObjectMixin(ContainerAbstract)) {\n static get properties(): any {\n return [...MCSStatusMixinProperties, ...ParentObjectMixinProperties]\n }\n\n get hasTextProperty() {\n return true\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return this.legend\n }\n\n getLegendFallback() {\n return LEGEND_UNIT\n }\n\n contains(x, y) {\n var { left, top, width, height, lineWidth = 0 } = this.state\n var extend = lineWidth / 2\n\n return (\n x < Math.max(left + width, left) + extend &&\n x > Math.min(left + width, left) - extend &&\n y < Math.max(top + height, top) + extend &&\n y > Math.min(top + height, top) - extend\n )\n }\n\n set path(path) {\n var left_top = path[0]\n var right_bottom = path[2]\n\n this.set({\n left: left_top.x,\n top: left_top.y,\n width: right_bottom.x - left_top.x,\n height: right_bottom.y - left_top.y\n })\n }\n\n get path() {\n var { left = 0, top = 0, width = 0, height = 0 } = this.state\n\n return [\n {\n x: left,\n y: top\n },\n {\n x: left + width,\n y: top\n },\n {\n x: left + width,\n y: top + height\n },\n {\n x: left,\n y: top + height\n }\n ]\n }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
1
+ {"version":3,"file":"mcs-unit.js","sourceRoot":"","sources":["../src/mcs-unit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ContainerAbstract } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\nimport { LEGEND_UNIT, Legend } from './features/mcs-status-default'\nimport { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin'\n\n/**\n * MCS용 Unit들의 공통 속성을 정의한 오브젝트\n */\nexport default class MCSUnit extends MCSStatusMixin(ParentObjectMixin(ContainerAbstract)) {\n static get properties(): any {\n return [...MCSStatusMixinProperties, ...ParentObjectMixinProperties]\n }\n\n get hasTextProperty() {\n return true\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return this.legend\n }\n\n getLegendFallback() {\n return LEGEND_UNIT\n }\n\n /**\n * In 2D, ignore `state.alpha`; preserve inherited alpha + editMode-hidden dim.\n * See MCSMachine.prerender for the full rationale.\n */\n prerender(ctx: any) {\n const inherited = ctx.globalAlpha\n super.prerender(ctx)\n const dim = this.app.isEditMode && this.hidden ? 0.5 : 1\n ctx.globalAlpha = inherited * dim\n }\n\n contains(x, y) {\n var { left, top, width, height, lineWidth = 0 } = this.state\n var extend = lineWidth / 2\n\n return (\n x < Math.max(left + width, left) + extend &&\n x > Math.min(left + width, left) - extend &&\n y < Math.max(top + height, top) + extend &&\n y > Math.min(top + height, top) - extend\n )\n }\n\n set path(path) {\n var left_top = path[0]\n var right_bottom = path[2]\n\n this.set({\n left: left_top.x,\n top: left_top.y,\n width: right_bottom.x - left_top.x,\n height: right_bottom.y - left_top.y\n })\n }\n\n get path() {\n var { left = 0, top = 0, width = 0, height = 0 } = this.state\n\n return [\n {\n x: left,\n y: top\n },\n {\n x: left + width,\n y: top\n },\n {\n x: left + width,\n y: top + height\n },\n {\n x: left,\n y: top + height\n }\n ]\n }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
@@ -102,21 +102,26 @@ export default class MCSVehicle extends MCSCarrierHolder {
102
102
  this.lastWaypoint = { NodeId, NodeMachine };
103
103
  if (this.root.vehicleAnimation) {
104
104
  this.trigger('waypoint', {
105
- from: beforeNode,
105
+ from: beforeNode || afterNode,
106
106
  to: afterNode,
107
107
  duration: 5000
108
108
  });
109
109
  }
110
- else {
110
+ else if (beforeNode) {
111
111
  const fromCenter = beforeNode.center;
112
112
  const toCenter = afterNode.center;
113
113
  const { x: startX, y: startY } = beforeNode.transcoordS2T(fromCenter.x, fromCenter.y);
114
114
  const { x: endX, y: endY } = afterNode.transcoordS2T(toCenter.x, toCenter.y);
115
115
  const theta = Math.atan2(endY - startY, endX - startX) + Math.PI / 2;
116
- // 위치 설정
117
116
  this.location = { x: endX, y: endY };
118
117
  this.setState('rotation', theta);
119
118
  }
119
+ else {
120
+ // beforeNode 없음: afterNode 위치로 즉시 이동
121
+ const toCenter = afterNode.center;
122
+ const { x, y } = afterNode.transcoordS2T(toCenter.x, toCenter.y);
123
+ this.location = { x, y };
124
+ }
120
125
  }
121
126
  }
122
127
  //# sourceMappingURL=mcs-vehicle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcs-vehicle.js","sourceRoot":"","sources":["../src/mcs-vehicle.ts"],"names":[],"mappings":"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","sourcesContent":["import { Properties } from '@hatiolab/things-scene'\nimport { LEGEND_VEHICLE, Legend } from './features/mcs-status-default'\nimport MCSCarrierHolder from './mcs-carrier-holder'\nimport Node from './node'\n\nconst DIRECTION_GAP = 3\n\nfunction findNode(vehicle: MCSVehicle, nodeId: string, nodeMachine: string) {\n if (!nodeId || !nodeMachine) {\n return null\n }\n\n const nodes = (vehicle.root.findAllById?.(nodeId) || []).filter(node => node.state.type == 'Node') as Node[]\n\n return nodes.find((node: Node) => {\n return node.nodeMachine === nodeMachine\n })\n}\n\n/**\n * MCS용 Unit > Transport들의 공통 속성을 정의한 오브젝트\n */\nexport default class MCSVehicle extends MCSCarrierHolder {\n static get properties(): any {\n return [\n ...MCSCarrierHolder.properties,\n {\n type: 'select',\n label: 'direction',\n name: 'direction',\n property: {\n options: ['', 'up', 'down', 'left', 'right']\n }\n }\n ]\n }\n\n private lastWaypoint: { NodeId: string; NodeMachine: string } | null = null\n\n getLegendFallback(): Legend {\n return LEGEND_VEHICLE\n }\n\n renderDirection(ctx: CanvasRenderingContext2D) {\n const { direction } = this.state\n\n if (direction) {\n const { left, top, width, height } = this.state\n\n ctx.beginPath()\n ctx.translate(left, top)\n\n ctx.strokeStyle = 'black'\n ctx.fillStyle = 'black'\n ctx.lineJoin = 'round'\n ctx.lineWidth = 1\n ctx.setLineDash([])\n\n switch (direction) {\n case 'up':\n ctx.moveTo((width * 1) / 3, -DIRECTION_GAP)\n ctx.lineTo(width / 2, -height / 10 - DIRECTION_GAP)\n ctx.lineTo((width * 2) / 3, -DIRECTION_GAP)\n break\n case 'down':\n ctx.moveTo((width * 1) / 3, height + DIRECTION_GAP)\n ctx.lineTo(width / 2, height + height / 10 + DIRECTION_GAP)\n ctx.lineTo((width * 2) / 3, height + DIRECTION_GAP)\n break\n case 'left':\n ctx.moveTo(-DIRECTION_GAP, (height * 1) / 3)\n ctx.lineTo(-width / 10 - 2, height / 2)\n ctx.lineTo(-DIRECTION_GAP, (height * 2) / 3)\n break\n case 'right':\n default:\n ctx.moveTo(DIRECTION_GAP + width, (height * 1) / 3)\n ctx.lineTo(DIRECTION_GAP + width + width / 10, height / 2)\n ctx.lineTo(DIRECTION_GAP + width, (height * 2) / 3)\n break\n }\n\n ctx.translate(-left, -top)\n ctx.closePath()\n\n ctx.fill()\n ctx.stroke()\n }\n }\n\n // Performance aware\n postrender(ctx: CanvasRenderingContext2D): void {\n super.postrender(ctx)\n // this.renderDirection(ctx)\n }\n\n onchangeData(after: Record<string, any>, before: Record<string, any>): void {\n super.onchangeData(after, before)\n\n const { NODEID: beforeNodeId, NODEMACHINE: beforeNodeMachine } = before.data || {}\n const { NODEID: NodeId, NODEMACHINE: NodeMachine } = after.data || {}\n\n if (\n NodeId === undefined ||\n NodeMachine === undefined ||\n (beforeNodeId === NodeId && beforeNodeMachine === NodeMachine) ||\n (this.lastWaypoint && this.lastWaypoint.NodeId === NodeId && this.lastWaypoint.NodeMachine === NodeMachine)\n ) {\n return // not changed\n }\n\n const afterNode = findNode(this, NodeId, NodeMachine)\n if (!afterNode) {\n console.warn(`Node not found. NodeId: ${NodeId}, NodeMachine: ${NodeMachine}`)\n return\n }\n\n const beforeNode = this.lastWaypoint\n ? findNode(this, this.lastWaypoint.NodeId, this.lastWaypoint.NodeMachine)\n : afterNode\n\n // 실제 존재하는 노드 중 가장 최근에 이동한 노드\n this.lastWaypoint = { NodeId, NodeMachine }\n\n if ((this.root as any).vehicleAnimation) {\n this.trigger('waypoint', {\n from: beforeNode,\n to: afterNode,\n duration: 5000\n })\n } else {\n const fromCenter = beforeNode!.center\n const toCenter = afterNode.center\n\n const { x: startX, y: startY } = beforeNode!.transcoordS2T(fromCenter.x, fromCenter.y)\n const { x: endX, y: endY } = afterNode.transcoordS2T(toCenter.x, toCenter.y)\n\n const theta = Math.atan2(endY - startY, endX - startX) + Math.PI / 2\n\n // 위치 설정\n this.location = { x: endX, y: endY }\n this.setState('rotation', theta)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"mcs-vehicle.js","sourceRoot":"","sources":["../src/mcs-vehicle.ts"],"names":[],"mappings":"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","sourcesContent":["import { LEGEND_VEHICLE, Legend } from './features/mcs-status-default'\nimport MCSCarrierHolder from './mcs-carrier-holder'\nimport Node from './node'\n\nconst DIRECTION_GAP = 3\n\nfunction findNode(vehicle: MCSVehicle, nodeId: string, nodeMachine: string) {\n if (!nodeId || !nodeMachine) {\n return null\n }\n\n const nodes = (vehicle.root.findAllById?.(nodeId) || []).filter(node => node.state.type == 'Node') as Node[]\n\n return nodes.find((node: Node) => {\n return node.nodeMachine === nodeMachine\n })\n}\n\n/**\n * MCS용 Unit > Transport들의 공통 속성을 정의한 오브젝트\n */\nexport default class MCSVehicle extends MCSCarrierHolder {\n static get properties(): any {\n return [\n ...MCSCarrierHolder.properties,\n {\n type: 'select',\n label: 'direction',\n name: 'direction',\n property: {\n options: ['', 'up', 'down', 'left', 'right']\n }\n }\n ]\n }\n\n private lastWaypoint: { NodeId: string; NodeMachine: string } | null = null\n\n getLegendFallback(): Legend {\n return LEGEND_VEHICLE\n }\n\n renderDirection(ctx: CanvasRenderingContext2D) {\n const { direction } = this.state\n\n if (direction) {\n const { left, top, width, height } = this.state\n\n ctx.beginPath()\n ctx.translate(left, top)\n\n ctx.strokeStyle = 'black'\n ctx.fillStyle = 'black'\n ctx.lineJoin = 'round'\n ctx.lineWidth = 1\n ctx.setLineDash([])\n\n switch (direction) {\n case 'up':\n ctx.moveTo((width * 1) / 3, -DIRECTION_GAP)\n ctx.lineTo(width / 2, -height / 10 - DIRECTION_GAP)\n ctx.lineTo((width * 2) / 3, -DIRECTION_GAP)\n break\n case 'down':\n ctx.moveTo((width * 1) / 3, height + DIRECTION_GAP)\n ctx.lineTo(width / 2, height + height / 10 + DIRECTION_GAP)\n ctx.lineTo((width * 2) / 3, height + DIRECTION_GAP)\n break\n case 'left':\n ctx.moveTo(-DIRECTION_GAP, (height * 1) / 3)\n ctx.lineTo(-width / 10 - 2, height / 2)\n ctx.lineTo(-DIRECTION_GAP, (height * 2) / 3)\n break\n case 'right':\n default:\n ctx.moveTo(DIRECTION_GAP + width, (height * 1) / 3)\n ctx.lineTo(DIRECTION_GAP + width + width / 10, height / 2)\n ctx.lineTo(DIRECTION_GAP + width, (height * 2) / 3)\n break\n }\n\n ctx.translate(-left, -top)\n ctx.closePath()\n\n ctx.fill()\n ctx.stroke()\n }\n }\n\n // Performance aware\n postrender(ctx: CanvasRenderingContext2D): void {\n super.postrender(ctx)\n // this.renderDirection(ctx)\n }\n\n onchangeData(after: Record<string, any>, before: Record<string, any>): void {\n super.onchangeData(after, before)\n\n const { NODEID: beforeNodeId, NODEMACHINE: beforeNodeMachine } = before.data || {}\n const { NODEID: NodeId, NODEMACHINE: NodeMachine } = after.data || {}\n\n if (\n NodeId === undefined ||\n NodeMachine === undefined ||\n (beforeNodeId === NodeId && beforeNodeMachine === NodeMachine) ||\n (this.lastWaypoint && this.lastWaypoint.NodeId === NodeId && this.lastWaypoint.NodeMachine === NodeMachine)\n ) {\n return // not changed\n }\n\n const afterNode = findNode(this, NodeId, NodeMachine)\n if (!afterNode) {\n console.warn(`Node not found. NodeId: ${NodeId}, NodeMachine: ${NodeMachine}`)\n return\n }\n\n const beforeNode = this.lastWaypoint\n ? findNode(this, this.lastWaypoint.NodeId, this.lastWaypoint.NodeMachine)\n : afterNode\n\n // 실제 존재하는 노드 중 가장 최근에 이동한 노드\n this.lastWaypoint = { NodeId, NodeMachine }\n\n if ((this.root as any).vehicleAnimation) {\n this.trigger('waypoint', {\n from: beforeNode || afterNode,\n to: afterNode,\n duration: 5000\n })\n } else if (beforeNode) {\n const fromCenter = beforeNode.center\n const toCenter = afterNode.center\n\n const { x: startX, y: startY } = beforeNode.transcoordS2T(fromCenter.x, fromCenter.y)\n const { x: endX, y: endY } = afterNode.transcoordS2T(toCenter.x, toCenter.y)\n\n const theta = Math.atan2(endY - startY, endX - startX) + Math.PI / 2\n\n this.location = { x: endX, y: endY }\n this.setState('rotation', theta)\n } else {\n // beforeNode 없음: afterNode 위치로 즉시 이동\n const toCenter = afterNode.center\n const { x, y } = afterNode.transcoordS2T(toCenter.x, toCenter.y)\n this.location = { x, y }\n }\n }\n}\n"]}
package/dist/node.js CHANGED
@@ -24,7 +24,7 @@ const NATURE = {
24
24
  };
25
25
  let Node = Node_1 = class Node extends Shape {
26
26
  is3dish() {
27
- return false;
27
+ return true;
28
28
  }
29
29
  isDescendible() {
30
30
  return false;
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Shape, sceneComponent } from '@hatiolab/things-scene'\nimport MCSMachine from './mcs-machine'\n\nconst NATURE = {\n mutable: false,\n resizable: false,\n rotatable: false,\n properties: [\n {\n type: 'string',\n name: 'NodeMachine',\n label: 'node-machine'\n },\n {\n type: 'nodes',\n label: 'nodes',\n name: 'alias'\n }\n ]\n}\n\n@sceneComponent('Node')\nexport default class Node extends Shape {\n static RADIUS = 8\n\n is3dish() {\n return false\n }\n\n isDescendible() {\n return false\n }\n\n render(context) {\n const { cx, cy } = this.state\n\n context.beginPath()\n\n context.ellipse(cx, cy, Math.abs(Node.RADIUS) * 1, Math.abs(Node.RADIUS) * 1, 0, 0, 2 * Math.PI)\n\n context.closePath()\n }\n\n get path() {\n var { cx, cy } = this.state\n\n return [\n {\n x: cx - Node.RADIUS * 1,\n y: cy - Node.RADIUS * 1\n },\n {\n x: cx + Node.RADIUS * 1,\n y: cy - Node.RADIUS * 1\n },\n {\n x: cx + Node.RADIUS * 1,\n y: cy + Node.RADIUS * 1\n },\n {\n x: cx - Node.RADIUS * 1,\n y: cy + Node.RADIUS * 1\n }\n ]\n }\n\n set path(path) {\n var left_top = path[0]\n var right_bottom = path[2]\n\n this.set({\n cx: left_top.x + (right_bottom.x - left_top.x) / 2,\n cy: left_top.y + (right_bottom.y - left_top.y) / 2\n })\n }\n\n get nodeMachine() {\n if (this.state.NodeMachine) {\n return this.state.NodeMachine\n }\n\n const parent = this.parent\n\n if (parent && parent instanceof MCSMachine) {\n return parent.state.id\n }\n }\n\n contains(x, y) {\n var { cx, cy } = this.state\n\n var normx = (x - cx) / (Node.RADIUS * 2)\n var normy = (y - cy) / (Node.RADIUS * 2)\n\n return normx * normx + normy * normy < 0.25\n }\n\n outline(progress) {\n var { cx, cy } = this.state\n\n return this.transcoordS2T(cx, cy)\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.memoize(Node.prototype, 'path', false)\n"]}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Shape, sceneComponent } from '@hatiolab/things-scene'\nimport MCSMachine from './mcs-machine'\n\nconst NATURE = {\n mutable: false,\n resizable: false,\n rotatable: false,\n properties: [\n {\n type: 'string',\n name: 'NodeMachine',\n label: 'node-machine'\n },\n {\n type: 'nodes',\n label: 'nodes',\n name: 'alias'\n }\n ]\n}\n\n@sceneComponent('Node')\nexport default class Node extends Shape {\n static RADIUS = 8\n\n is3dish() {\n return true\n }\n\n isDescendible() {\n return false\n }\n\n render(context) {\n const { cx, cy } = this.state\n\n context.beginPath()\n\n context.ellipse(cx, cy, Math.abs(Node.RADIUS) * 1, Math.abs(Node.RADIUS) * 1, 0, 0, 2 * Math.PI)\n\n context.closePath()\n }\n\n get path() {\n var { cx, cy } = this.state\n\n return [\n {\n x: cx - Node.RADIUS * 1,\n y: cy - Node.RADIUS * 1\n },\n {\n x: cx + Node.RADIUS * 1,\n y: cy - Node.RADIUS * 1\n },\n {\n x: cx + Node.RADIUS * 1,\n y: cy + Node.RADIUS * 1\n },\n {\n x: cx - Node.RADIUS * 1,\n y: cy + Node.RADIUS * 1\n }\n ]\n }\n\n set path(path) {\n var left_top = path[0]\n var right_bottom = path[2]\n\n this.set({\n cx: left_top.x + (right_bottom.x - left_top.x) / 2,\n cy: left_top.y + (right_bottom.y - left_top.y) / 2\n })\n }\n\n get nodeMachine() {\n if (this.state.NodeMachine) {\n return this.state.NodeMachine\n }\n\n const parent = this.parent\n\n if (parent && parent instanceof MCSMachine) {\n return parent.state.id\n }\n }\n\n contains(x, y) {\n var { cx, cy } = this.state\n\n var normx = (x - cx) / (Node.RADIUS * 2)\n var normy = (y - cy) / (Node.RADIUS * 2)\n\n return normx * normx + normy * normy < 0.25\n }\n\n outline(progress) {\n var { cx, cy } = this.state\n\n return this.transcoordS2T(cx, cy)\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.memoize(Node.prototype, 'path', false)\n"]}
package/dist/oht.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oht.js","sourceRoot":"","sources":["../src/oht.ts"],"names":[],"mappings":";AAAA,OAAO,EAA0C,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC/F,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;CACvC,CAAA;AAED,MAAM,GAAG,GAAG,CAAC,CAAA;AAGE,IAAM,GAAG,GAAT,MAAM,GAAI,SAAQ,UAAU;IACzC,MAAM,KAAK,MAAM;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,iBAAiB;QACf,OAAQ,IAAI,CAAC,IAAY,CAAC,cAAc,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACvE,CAAC;IAED,MAAM,CAAC,GAA6B;QAClC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE9C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACxB,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAY,CAAA;QACjC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;QACjB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;QACrB,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAEnB,oBAAoB;QACpB,2DAA2D;QAC3D,6CAA6C;QAC7C,yEAAyE;QACzE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;QAErD,GAAG,CAAC,IAAI,EAAE,CAAA;QACV,GAAG,CAAC,MAAM,EAAE,CAAA;QAEZ,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;QACpB,GAAG,CAAC,WAAW,GAAG,OAAO,CAAA;QACzB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;QACjB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;QAEvC,GAAG,CAAC,MAAM,EAAE,CAAA;QAEZ,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;CACF,CAAA;AA/CoB,GAAG;IADvB,cAAc,CAAC,KAAK,CAAC;GACD,GAAG,CA+CvB;eA/CoB,GAAG","sourcesContent":["import { Component, ComponentNature, Properties, sceneComponent } from '@hatiolab/things-scene'\nimport MCSVehicle from './mcs-vehicle'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [...MCSVehicle.properties]\n}\n\nconst GAP = 2\n\n@sceneComponent('OHT')\nexport default class OHT extends MCSVehicle {\n static get nature() {\n return NATURE\n }\n\n get auxColor() {\n return 'black'\n }\n\n getLegendFallback() {\n return (this.root as any).ohtLegendTheme || super.getLegendFallback()\n }\n\n render(ctx: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n ctx.translate(left, top)\n ctx.beginPath()\n\n ctx.strokeStyle = this.auxColor\n ctx.fillStyle = this.statusColor!\n ctx.lineWidth = 1\n ctx.lineCap = 'round'\n ctx.setLineDash([])\n\n // Performance aware\n // const radius = Math.round(Math.min(width, height) * 0.1)\n // ctx.roundRect(0, 0, width, height, radius)\n // ctx.roundRect(GAP, GAP, width - GAP * 2, height - GAP * 2, radius - 1)\n ctx.rect(0, 0, width, height)\n ctx.rect(GAP, GAP, width - GAP * 2, height - GAP * 2)\n\n ctx.fill()\n ctx.stroke()\n\n ctx.beginPath()\n\n ctx.lineCap = 'butt'\n ctx.strokeStyle = 'black'\n ctx.lineWidth = 3\n ctx.moveTo(width / 2, GAP * 2)\n ctx.lineTo(width / 2, height - GAP * 2)\n\n ctx.stroke()\n\n ctx.translate(-left, -top)\n }\n}\n"]}
1
+ {"version":3,"file":"oht.js","sourceRoot":"","sources":["../src/oht.ts"],"names":[],"mappings":";AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;CACvC,CAAA;AAED,MAAM,GAAG,GAAG,CAAC,CAAA;AAGE,IAAM,GAAG,GAAT,MAAM,GAAI,SAAQ,UAAU;IACzC,MAAM,KAAK,MAAM;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,iBAAiB;QACf,OAAQ,IAAI,CAAC,IAAY,CAAC,cAAc,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACvE,CAAC;IAED,MAAM,CAAC,GAA6B;QAClC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE9C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACxB,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAY,CAAA;QACjC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;QACjB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;QACrB,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAEnB,oBAAoB;QACpB,2DAA2D;QAC3D,6CAA6C;QAC7C,yEAAyE;QACzE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;QAErD,GAAG,CAAC,IAAI,EAAE,CAAA;QACV,GAAG,CAAC,MAAM,EAAE,CAAA;QAEZ,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,OAAO,GAAG,MAAM,CAAA;QACpB,GAAG,CAAC,WAAW,GAAG,OAAO,CAAA;QACzB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;QACjB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;QAEvC,GAAG,CAAC,MAAM,EAAE,CAAA;QAEZ,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;CACF,CAAA;AA/CoB,GAAG;IADvB,cAAc,CAAC,KAAK,CAAC;GACD,GAAG,CA+CvB;eA/CoB,GAAG","sourcesContent":["import { Component, ComponentNature, sceneComponent } from '@hatiolab/things-scene'\nimport MCSVehicle from './mcs-vehicle'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [...MCSVehicle.properties]\n}\n\nconst GAP = 2\n\n@sceneComponent('OHT')\nexport default class OHT extends MCSVehicle {\n static get nature() {\n return NATURE\n }\n\n get auxColor() {\n return 'black'\n }\n\n getLegendFallback() {\n return (this.root as any).ohtLegendTheme || super.getLegendFallback()\n }\n\n render(ctx: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n ctx.translate(left, top)\n ctx.beginPath()\n\n ctx.strokeStyle = this.auxColor\n ctx.fillStyle = this.statusColor!\n ctx.lineWidth = 1\n ctx.lineCap = 'round'\n ctx.setLineDash([])\n\n // Performance aware\n // const radius = Math.round(Math.min(width, height) * 0.1)\n // ctx.roundRect(0, 0, width, height, radius)\n // ctx.roundRect(GAP, GAP, width - GAP * 2, height - GAP * 2, radius - 1)\n ctx.rect(0, 0, width, height)\n ctx.rect(GAP, GAP, width - GAP * 2, height - GAP * 2)\n\n ctx.fill()\n ctx.stroke()\n\n ctx.beginPath()\n\n ctx.lineCap = 'butt'\n ctx.strokeStyle = 'black'\n ctx.lineWidth = 3\n ctx.moveTo(width / 2, GAP * 2)\n ctx.lineTo(width / 2, height - GAP * 2)\n\n ctx.stroke()\n\n ctx.translate(-left, -top)\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, Triangle, sceneComponent } from '@hatiolab/things-scene';
3
+ import { MCSStatusMixin } from './features/mcs-status-mixin';
4
+ const NATURE = {
5
+ mutable: true,
6
+ resizable: false,
7
+ rotatable: true,
8
+ properties: [
9
+ {
10
+ type: 'number',
11
+ label: 'round',
12
+ name: 'round',
13
+ property: { min: 0, max: 100, step: 1 }
14
+ }
15
+ ]
16
+ };
17
+ let Scanner = class Scanner extends MCSStatusMixin(Triangle) {
18
+ static get nature() {
19
+ return NATURE;
20
+ }
21
+ is3dish() {
22
+ return true;
23
+ }
24
+ };
25
+ Scanner = __decorate([
26
+ sceneComponent('Scanner')
27
+ ], Scanner);
28
+ export default Scanner;
29
+ Component.memoize(Scanner.prototype, 'path', false);
30
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAmB,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;SACxC;KACF;CACF,CAAA;AAGc,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAC3D,MAAM,KAAK,MAAM;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AARoB,OAAO;IAD3B,cAAc,CAAC,SAAS,CAAC;GACL,OAAO,CAQ3B;eARoB,OAAO;AAU5B,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA","sourcesContent":["import { Component, ComponentNature, Triangle, sceneComponent } from '@hatiolab/things-scene'\nimport { MCSStatusMixin } from './features/mcs-status-mixin'\n\nconst NATURE: ComponentNature = {\n mutable: true,\n resizable: false,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: { min: 0, max: 100, step: 1 }\n }\n ]\n}\n\n@sceneComponent('Scanner')\nexport default class Scanner extends MCSStatusMixin(Triangle) {\n static get nature() {\n return NATURE\n }\n\n is3dish() {\n return true\n }\n}\n\nComponent.memoize(Scanner.prototype, 'path', false)\n"]}
@@ -1,5 +1,6 @@
1
1
  import { Component, RootContainer } from '@hatiolab/things-scene';
2
2
  import { themesColorMap, themesColorRange, themesAnimationMap } from '@fmsim/api';
3
+ import CarrierManager from '../carrier-manager';
3
4
  const ModelLayer = Component.register('model-layer');
4
5
  Object.defineProperty(ModelLayer.prototype, 'nature', {
5
6
  get: function () {
@@ -278,4 +279,12 @@ Object.defineProperty(RootContainer.prototype, 'vehicleAnimation', {
278
279
  return !!vehicleAnimation;
279
280
  }
280
281
  });
282
+ Object.defineProperty(RootContainer.prototype, 'carrierManager', {
283
+ get: function () {
284
+ if (!this._carrierManager) {
285
+ this._carrierManager = new CarrierManager(this);
286
+ }
287
+ return this._carrierManager;
288
+ }
289
+ });
281
290
  //# sourceMappingURL=root-container-override.js.map