@fmsim/machine 2.0.0-beta.97 → 2.0.0-beta.99
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/dist/scene/root-container-override.js +3 -1
- package/dist/scene/root-container-override.js.map +1 -1
- package/dist/stocker-capacity-bar.js +31 -10
- package/dist/stocker-capacity-bar.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/scene/root-container-override.ts +3 -1
- package/src/stocker-capacity-bar.ts +34 -13
- package/translations/en.json +5 -0
- package/translations/ja.json +5 -0
- package/translations/ko.json +5 -0
- package/translations/ms.json +5 -0
- package/translations/zh.json +5 -0
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@fmsim/machine",
|
|
3
3
|
"description": "Layout View를 구성하는 설비(machine)들과 유닛을 구현한 모듈입니다.",
|
|
4
4
|
"author": "heartyoh",
|
|
5
|
-
"version": "2.0.0-beta.
|
|
5
|
+
"version": "2.0.0-beta.99",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
8
8
|
"things-scene": true,
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"migration": "things-factory-migration"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@fmsim/api": "^2.0.0-beta.
|
|
29
|
+
"@fmsim/api": "^2.0.0-beta.99",
|
|
30
30
|
"@hatiolab/things-scene": "^10.0.0-beta.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"prettier --write"
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "09fea74bd210468139480a29ea11dfe762d8e370"
|
|
59
59
|
}
|
|
@@ -338,7 +338,9 @@ Object.defineProperty(RootContainer.prototype, 'carrierManager', {
|
|
|
338
338
|
//
|
|
339
339
|
// 모델(state)에 저장하지 않는다 — nature 속성이 아니므로 보드 직렬화에 포함되지 않고,
|
|
340
340
|
// 보드를 다시 열면 항상 기본값 'capacity' 로 시작한다. 실행 중 뷰어 컨트롤 등이
|
|
341
|
-
// `scene.
|
|
341
|
+
// `scene.rootContainer.stockerGaugeMode = 'carrier'` 로 동적 변경한다.
|
|
342
|
+
// (주의: scene.root 은 model_layer 라 override 가 없다. 반드시 rootContainer 에 설정.
|
|
343
|
+
// 컴포넌트의 this.root 는 RootContainer(isRoot)로 해석되어 이 값을 읽는다.)
|
|
342
344
|
//
|
|
343
345
|
// 2D(StockerCapacityBar.gaugeMode) 와 3D(machine-3d buildGauge) 가 모두 이 값을 읽어
|
|
344
346
|
// 게이지 표현이 항상 일치한다. 값이 바뀌면 setter 가 2D 리드로우 + 3D 게이지 재빌드를
|
|
@@ -186,6 +186,11 @@ export default class StockerCapacityBar extends ParentObjectMixin(MCSStatusMixin
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
get text() {
|
|
189
|
+
// usage% 값은 capacity 모드에서만 표시. carrier/abnormal 은 세그먼트별 자체 라벨을 그리므로
|
|
190
|
+
// base 의 value 텍스트(value-property=usage)를 억제한다.
|
|
191
|
+
if (this.gaugeMode !== 'capacity') {
|
|
192
|
+
return ''
|
|
193
|
+
}
|
|
189
194
|
return this.usage + '%'
|
|
190
195
|
}
|
|
191
196
|
|
|
@@ -206,6 +211,16 @@ export default class StockerCapacityBar extends ParentObjectMixin(MCSStatusMixin
|
|
|
206
211
|
}
|
|
207
212
|
}
|
|
208
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Shape.postrender 의 drawFill/drawStroke 를 건너뛴다.
|
|
216
|
+
* 각 모드 render 가 자체 배경(fillStyle)·외곽선(strokeStyle)을 이미 그리므로, base 가
|
|
217
|
+
* fillStyle 로 게이지 전체를 다시 덮어(각 모드 표현이 사라지는) 것을 방지한다.
|
|
218
|
+
* 값 텍스트(drawText)는 Component.postrender 와 동일하게 유지한다.
|
|
219
|
+
*/
|
|
220
|
+
postrender(context: CanvasRenderingContext2D) {
|
|
221
|
+
this.drawText(context)
|
|
222
|
+
}
|
|
223
|
+
|
|
209
224
|
/**
|
|
210
225
|
* carrier/abnormal mode 의 세그먼트 목록 (공유 유틸 = 3D 와 동일 계산).
|
|
211
226
|
* 배열 순서 = portrait 아래→위 / landscape 왼→오.
|
|
@@ -288,23 +303,29 @@ export default class StockerCapacityBar extends ParentObjectMixin(MCSStatusMixin
|
|
|
288
303
|
w: number,
|
|
289
304
|
h: number
|
|
290
305
|
) {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
const fontSize = Math.max(9, Math.min(14, Math.min(w, h) * 0.22))
|
|
306
|
+
// 이름 라벨(Full/Empty/Abnormal…)은 그리지 않는다. 각 세그먼트 영역 중심에 숫자(%)만 표시.
|
|
307
|
+
// value 텍스트와 동일하게 state.fontSize 를 따른다 (기본 15). 속성 하나로 함께 조절.
|
|
308
|
+
const fontSize = this.state.fontSize || 15
|
|
296
309
|
context.font = `bold ${fontSize}px sans-serif`
|
|
297
|
-
context.fillStyle = '#333'
|
|
298
|
-
context.textAlign = 'center'
|
|
299
|
-
context.textBaseline = 'middle'
|
|
300
310
|
|
|
301
|
-
|
|
302
|
-
const
|
|
303
|
-
const
|
|
311
|
+
// 공간에 따라 단계적 축소: 넉넉하면 '값%', 좁으면 '%' 떼고 값만, 더 좁으면 생략.
|
|
312
|
+
const value = `${Math.round(seg.ratio * 100)}`
|
|
313
|
+
const fits = (t: string) => fontSize <= h && context.measureText(t).width <= w
|
|
304
314
|
|
|
305
|
-
|
|
306
|
-
|
|
315
|
+
let text: string | null = null
|
|
316
|
+
if (fits(`${value}%`)) {
|
|
317
|
+
text = `${value}%`
|
|
318
|
+
} else if (fits(value)) {
|
|
319
|
+
text = value
|
|
320
|
+
}
|
|
321
|
+
if (text === null) {
|
|
322
|
+
return
|
|
307
323
|
}
|
|
324
|
+
|
|
325
|
+
context.fillStyle = '#333'
|
|
326
|
+
context.textAlign = 'center'
|
|
327
|
+
context.textBaseline = 'middle'
|
|
328
|
+
context.fillText(text, x + w / 2, y + h / 2)
|
|
308
329
|
}
|
|
309
330
|
|
|
310
331
|
renderLandscape(context: CanvasRenderingContext2D) {
|
package/translations/en.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label.current-usage": "current usage",
|
|
3
3
|
"label.fullup": "fullup",
|
|
4
|
+
"label.carrier-full": "carrier full",
|
|
5
|
+
"label.carrier-empty": "carrier empty",
|
|
6
|
+
"label.carrier-empty-empty": "carrier empty empty",
|
|
7
|
+
"label.carrier-normal": "carrier normal",
|
|
8
|
+
"label.carrier-abnormal": "carrier abnormal",
|
|
4
9
|
"label.high-watermark": "high watermark",
|
|
5
10
|
"label.legend-name": "legend",
|
|
6
11
|
"label.max-capacity": "max capacity",
|
package/translations/ja.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label.current-usage": "current usage",
|
|
3
3
|
"label.fullup": "fullup",
|
|
4
|
+
"label.carrier-full": "carrier full",
|
|
5
|
+
"label.carrier-empty": "carrier empty",
|
|
6
|
+
"label.carrier-empty-empty": "carrier empty empty",
|
|
7
|
+
"label.carrier-normal": "carrier normal",
|
|
8
|
+
"label.carrier-abnormal": "carrier abnormal",
|
|
4
9
|
"label.high-watermark": "high watermark",
|
|
5
10
|
"label.low-watermark": "low watermark",
|
|
6
11
|
"label.legend-name": "legend",
|
package/translations/ko.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label.current-usage": "현재 사용량",
|
|
3
3
|
"label.fullup": "만재",
|
|
4
|
+
"label.carrier-full": "적재 캐리어",
|
|
5
|
+
"label.carrier-empty": "공 캐리어",
|
|
6
|
+
"label.carrier-empty-empty": "이중 공 캐리어",
|
|
7
|
+
"label.carrier-normal": "정상 캐리어",
|
|
8
|
+
"label.carrier-abnormal": "비정상 캐리어",
|
|
4
9
|
"label.high-watermark": "고수위워터마크",
|
|
5
10
|
"label.low-watermark": "저수위워터마크",
|
|
6
11
|
"label.legend-name": "레전드",
|
package/translations/ms.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label.current-usage": "current usage",
|
|
3
3
|
"label.fullup": "fullup",
|
|
4
|
+
"label.carrier-full": "carrier full",
|
|
5
|
+
"label.carrier-empty": "carrier empty",
|
|
6
|
+
"label.carrier-empty-empty": "carrier empty empty",
|
|
7
|
+
"label.carrier-normal": "carrier normal",
|
|
8
|
+
"label.carrier-abnormal": "carrier abnormal",
|
|
4
9
|
"label.high-watermark": "high watermark",
|
|
5
10
|
"label.low-watermark": "low watermark",
|
|
6
11
|
"label.legend-name": "legend",
|
package/translations/zh.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"label.current-usage": "current usage",
|
|
3
3
|
"label.fullup": "fullup",
|
|
4
|
+
"label.carrier-full": "carrier full",
|
|
5
|
+
"label.carrier-empty": "carrier empty",
|
|
6
|
+
"label.carrier-empty-empty": "carrier empty empty",
|
|
7
|
+
"label.carrier-normal": "carrier normal",
|
|
8
|
+
"label.carrier-abnormal": "carrier abnormal",
|
|
4
9
|
"label.high-watermark": "high watermark",
|
|
5
10
|
"label.low-watermark": "low watermark",
|
|
6
11
|
"label.legend-name": "legend",
|