@hatiolab/figure-model 0.1.2 → 0.1.4
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 +11 -11
- package/README.md +9 -9
- package/dist/blueprint.d.ts +32 -3
- package/dist/blueprint.d.ts.map +1 -1
- package/dist/blueprint.js +76 -6
- package/dist/blueprint.js.map +1 -1
- package/dist/cost-chart.d.ts +1 -1
- package/dist/cost-chart.js +2 -2
- package/dist/cost.d.ts +4 -4
- package/dist/cost.d.ts.map +1 -1
- package/dist/cost.js +2 -2
- package/dist/cost.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts +2 -2
- package/dist/keys.js +3 -3
- package/dist/keys.js.map +1 -1
- package/dist/types.d.ts +53 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -10
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/validate.js +7 -7
- package/dist/validate.js.map +1 -1
- package/docs/design.md +3 -3
- package/docs/format-survey.md +3 -3
- package/docs/format.md +18 -18
- package/docs/validation.md +5 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# 변경 기록
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
버전은 [유의적 버전](https://semver.org/lang/ko/)을 따른다. 청사진 형식 자체의 버전은
|
|
4
4
|
`BLUEPRINT_VERSION` 으로 따로 매긴다 — 패키지 판을 올려도 형식이 그대로면 이 값은
|
|
5
5
|
움직이지 않는다.
|
|
6
6
|
|
|
7
|
-
## 아직
|
|
7
|
+
## 아직 버전을 붙이지 않음
|
|
8
8
|
|
|
9
9
|
### 분할 수 프리셋에 24 · 32 를 더했다
|
|
10
10
|
|
|
11
|
-
`SEGMENT_PRESETS` 가 `8 · 12 · 16 · 24 · 32` 가 되었다. 그 값을 쓰던
|
|
12
|
-
|
|
11
|
+
`SEGMENT_PRESETS` 가 `8 · 12 · 16 · 24 · 32` 가 되었다. 그 값을 쓰던 원본 데이터는 이제 위반이
|
|
12
|
+
아니다. 없던 값을 허용하는 것뿐이라 기존 원본 데이터에는 영향이 없다.
|
|
13
13
|
|
|
14
14
|
전에 셋으로 자른 근거는 **보드 배율의 톱뷰 실루엣**이었다(24 · 48 · 96px 에서
|
|
15
15
|
16 → 32 차이가 1.9 ~ 2.2%). 그 측정이 덮지 못하는 자리가 있다 — 저작면은 자산을
|
|
@@ -40,15 +40,15 @@ n각형이 원에서 벗어나는 최대 거리는 `r(1 − cos(π/n))` 이라
|
|
|
40
40
|
|
|
41
41
|
### 좌표 규약을 3D 도구들의 것으로 되돌렸다 — **깨지는 변경**
|
|
42
42
|
|
|
43
|
-
`PartTransform` 과 `base` 의
|
|
43
|
+
`PartTransform` 과 `base` 의 축·용어가 모두 바뀌었다. 0.1.0 으로 저작한 원본 데이터는 그대로
|
|
44
44
|
읽히지 않는다.
|
|
45
45
|
|
|
46
46
|
- 축이 `x` 오른쪽 · **`y` 위** · `z` 앞이다. glTF · three.js · Unity · Godot 와 같다.
|
|
47
|
-
전에는 things-scene **컴포넌트 state** 의
|
|
48
|
-
캔버스에서 온
|
|
47
|
+
전에는 things-scene **컴포넌트 state** 의 용어를 가져와 `z` 를 위로 뒀는데, 그것은 2D
|
|
48
|
+
캔버스에서 온 용어이지 3D 규약이 아니었다. things-scene 의 3D 세계는 y 가 위이고
|
|
49
49
|
반입한 glTF 모델도 축을 돌리지 않고 그대로 쓴다
|
|
50
50
|
- `width` · `height` · `depth` 를 쓰지 않는다. `transform.size` 와 `base` 가 `Vec3` 이고
|
|
51
|
-
축 이름으로
|
|
51
|
+
축 이름으로 부른다. 어느 축인지 외워야 하는 용어가 사고의 원인이었다
|
|
52
52
|
- 자리가 `transform.position` 으로 갈라졌고 **부품의 중심**을 가리킨다. 전에는 최소
|
|
53
53
|
모서리였다. 모델러들은 원점을 격자에 붙이고 크기는 따로 스냅한다
|
|
54
54
|
- 오류 코드 `missing-depth` 가 없어지고 `missing-position` · `missing-size` 가 생겼다.
|
|
@@ -63,13 +63,13 @@ n각형이 원에서 벗어나는 최대 거리는 `r(1 − cos(π/n))` 이라
|
|
|
63
63
|
|
|
64
64
|
### 담긴 것
|
|
65
65
|
|
|
66
|
-
- **형식** — `FigureSource`(편집 가능한
|
|
66
|
+
- **형식** — `FigureSource`(편집 가능한 원본 데이터)와 `FigureBlueprint`(보드가 렌더링하는 형태).
|
|
67
67
|
청사진 형식 판 `BLUEPRINT_VERSION = 1`
|
|
68
68
|
- **검증** — `validate()` 가 오류와 위반을 갈라 낸다. 가르는 기준은 「이 상태로 세울 수
|
|
69
69
|
있나」 하나다. 오류 24종·위반 9종이 목록으로 잠겨 있어 없는 코드를 낼 수 없다
|
|
70
|
-
- **컴파일** — `compile()` 이
|
|
70
|
+
- **컴파일** — `compile()` 이 원본 데이터를 재질별로 병합된 부품 그래프로 옮긴다
|
|
71
71
|
- **키** — `geometryKeyOf` · `materialKeyOf` · `groupKeyOf`. 무엇을 나눠 쓰고 무엇을
|
|
72
|
-
합치는지 정하는 식이며 `src/keys.ts` 가 유일한
|
|
72
|
+
합치는지 정하는 식이며 `src/keys.ts` 가 유일한 기준이다
|
|
73
73
|
- **원가와 점수** — `costOf` · `scoreOf` · `costCurve` · `costCurveSvg`. 인스턴스가 늘 때
|
|
74
74
|
무엇이 늘고 무엇이 그대로인지 낸다. 점수의 근거는 이미 선언된 한도뿐이다
|
|
75
75
|
- **문서** — `docs/format.md`(형식 레퍼런스) · `docs/validation.md`(코드표) ·
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @hatiolab/figure-model
|
|
2
2
|
|
|
3
|
-
Figure 저작 결과의
|
|
3
|
+
Figure 저작 결과의 **원본 형식과 검증**. 런타임 의존이 없다.
|
|
4
4
|
|
|
5
5
|
렌더러가 들어 있지 않다. 저작도구가 만들고, 서버가 검증해 저장하고, 뷰어·모델러가
|
|
6
6
|
소비한다 — 청사진은 실행 시점에 바깥에서 받아 이미 알고 있는 것이다.
|
|
@@ -43,7 +43,7 @@ call 을 줄이고, 2D 는 윤곽을 합쳐 `fill()` 호출을 줄인다.
|
|
|
43
43
|
|
|
44
44
|
격자 스냅 · 분할 프리셋(8·12·16) · 색 팔레트 · 디테일 등급(부품 3·8·20). 넷 다
|
|
45
45
|
「감각적인 로우폴리」를 위해 둔 규칙인데, 같은 규칙이 geometry 키와 material 키를
|
|
46
|
-
줄인다. 품질 규칙과 성능 규칙이 따로 있으면 서로
|
|
46
|
+
줄인다. 품질 규칙과 성능 규칙이 따로 있으면 서로 어긋난다. 여기서는 하나로 둔다.
|
|
47
47
|
|
|
48
48
|
## 쓰기
|
|
49
49
|
|
|
@@ -75,7 +75,7 @@ describeCost(cost).forEach(line => console.log(line))
|
|
|
75
75
|
// InstancedMesh 를 쓰면 draw call 이 4까지 내려간다
|
|
76
76
|
|
|
77
77
|
const { grade, score, tightest } = scoreOf(blueprint)
|
|
78
|
-
// grade 'A' · score 67 · tightest 는
|
|
78
|
+
// grade 'A' · score 67 · tightest 는 한도에 가장 가까운 항목
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
**그대로인 값이 곧 재활용되는 것이다.** 삼각형과 draw call 은 인스턴스에 비례하지만
|
|
@@ -104,7 +104,7 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
104
104
|
| | |
|
|
105
105
|
| -------------- | ------------------------------------------------ |
|
|
106
106
|
| `things-scene` | `src/figure/` 가 청사진을 읽어 컴포넌트로 세운다 |
|
|
107
|
-
| 저작도구 |
|
|
107
|
+
| 저작도구 | 원본 데이터를 만들고 고친다 |
|
|
108
108
|
| 서버 | 저장 전에 `validate()` 로 거른다 |
|
|
109
109
|
|
|
110
110
|
### things-scene 과 형식이 갈리지 않게 하는 법
|
|
@@ -114,7 +114,7 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
114
114
|
라이브러리가 아직 배포되지 않은 패키지를 의존성으로 가질 수 없기 때문이다.
|
|
115
115
|
|
|
116
116
|
두 벌이 되면 갈릴 수 있으므로, 이 모듈이 **실제로 낸** 청사진을 things-scene 의
|
|
117
|
-
`test/fixtures/figure-blueprint-sample.json` 에 두고 그쪽
|
|
117
|
+
`test/fixtures/figure-blueprint-sample.json` 에 두고 그쪽 테스트가 읽는다. 형식을
|
|
118
118
|
바꿨으면 표본을 다시 뽑는다.
|
|
119
119
|
|
|
120
120
|
```sh
|
|
@@ -122,8 +122,8 @@ import { costOf } from '@hatiolab/figure-model/cost'
|
|
|
122
122
|
node test/fixtures/emit-figure-blueprint.mjs
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
그때 그쪽
|
|
126
|
-
`import type`
|
|
125
|
+
그때 그쪽 테스트가 실패하면 읽는 쪽 계약도 함께 고친다. 이 패키지가 배포되고 나면
|
|
126
|
+
`import type` 하나로 줄일 수 있다.
|
|
127
127
|
|
|
128
128
|
## 명령
|
|
129
129
|
|
|
@@ -148,9 +148,9 @@ npm run format 서식 정리
|
|
|
148
148
|
|
|
149
149
|
## 의존
|
|
150
150
|
|
|
151
|
-
**런타임 의존이 없다.** 브라우저에서도 그대로
|
|
151
|
+
**런타임 의존이 없다.** 브라우저에서도 그대로 동작한다.
|
|
152
152
|
|
|
153
|
-
devDependency 는 셋 — `typescript`(타입 검사·`.d.ts` 생성), `@types/node`(
|
|
153
|
+
devDependency 는 셋 — `typescript`(타입 검사·`.d.ts` 생성), `@types/node`(테스트와
|
|
154
154
|
벤치가 `node:test`·`node:zlib` 을 쓴다), `prettier`(서식). 셋 다 `dist` 에 들어가지
|
|
155
155
|
않는다.
|
|
156
156
|
|
package/dist/blueprint.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ValidateResult } from './validate.ts';
|
|
2
2
|
export { geometryKeyOf, materialKeyOf, usesSegments } from './keys.ts';
|
|
3
|
-
import { type FigureBlueprint, type FigurePart } from './types.ts';
|
|
4
|
-
/** 컴파일할 수 없을 때 던진다.
|
|
3
|
+
import { type FigureBlueprint, type FigurePart, type Axis, type PartTransform, type Vec3 } from './types.ts';
|
|
4
|
+
/** 컴파일할 수 없을 때 던진다. 오류보고없이 빈 청사진을 돌려주지 않는다. */
|
|
5
5
|
export declare class FigureCompileError extends Error {
|
|
6
6
|
readonly errors: ValidateResult['errors'];
|
|
7
7
|
constructor(errors: ValidateResult['errors']);
|
|
@@ -22,7 +22,36 @@ export declare class FigureCompileError extends Error {
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function trianglesOf(part: FigurePart): number;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 회전까지 반영한 부품의 축별 크기.
|
|
26
|
+
*
|
|
27
|
+
* 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
|
|
28
|
+
* `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. 그리는 쪽이 같은 순서로
|
|
29
|
+
* 돌리므로 여기서만 다르면 답이 달라진다.
|
|
30
|
+
*/
|
|
31
|
+
export declare function rotatedExtentOf(part: {
|
|
32
|
+
transform: PartTransform;
|
|
33
|
+
}): Vec3;
|
|
34
|
+
/**
|
|
35
|
+
* `stretch` 일 때 늘어나는 축.
|
|
36
|
+
*
|
|
37
|
+
* 형식에 축을 적는 자리가 없다. 대신 **부품이 가장 길게 뻗은 축**으로 정한다. 문서가
|
|
38
|
+
* 든 예(프레임 · 벨트 · 레일)가 전부 "길어서 그 물건인 것"이라 이 규칙과 맞는다.
|
|
39
|
+
* 정육면체에 가까운 부품에는 뜻이 없는데, 그런 부품은 애초에 `stretch` 를 쓸 자리가 아니다.
|
|
40
|
+
*
|
|
41
|
+
* **회전을 반영해 측정한다.** 크기만 보면 x 로 길게 그린 레일을 y 로 90° 돌려 세워도 여전히
|
|
42
|
+
* x 라고 답한다. 그러면 레일이 길이가 아니라 두께 쪽으로 늘어난다.
|
|
43
|
+
*
|
|
44
|
+
* 두 축의 길이가 같으면 x → z → y 순으로 정한다. 순서를 정해 두지 않으면 같은 부품이
|
|
45
|
+
* 소비처마다 다른 축으로 늘어난다.
|
|
46
|
+
*
|
|
47
|
+
* **소비처가 저마다 계산하면 안 된다.** 3D 와 2D 톱뷰와 속성 편집기가 같은 답을 내야
|
|
48
|
+
* 하므로 여기 한 곳에서만 정한다.
|
|
49
|
+
*/
|
|
50
|
+
export declare function stretchAxisOf(part: {
|
|
51
|
+
transform: PartTransform;
|
|
52
|
+
}): Axis;
|
|
53
|
+
/**
|
|
54
|
+
* 원본 데이터를 청사진으로 컴파일한다.
|
|
26
55
|
*
|
|
27
56
|
* `errors` 가 있으면 던진다 — 세울 수 없는 것을 반쯤 세운 청사진으로 돌려주면
|
|
28
57
|
* 어디서 잘못됐는지 알 수 없다. `violations` 는 청사진에 담아 돌려준다. 정책 위반은
|
package/dist/blueprint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAI7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,UAAU,EAGf,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,IAAI,EACV,MAAM,YAAY,CAAA;AAEnB,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAE7B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;CAS7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAoBpD;AAKD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAuBxE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAKtE;AAiBD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAmFxD"}
|
package/dist/blueprint.js
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 원본 데이터 → 청사진 컴파일.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* 원본 데이터는 편집을 위한 형식이다. 보드가 그것을 그대로 렌더링하면 부품마다 mesh 가 생겨서
|
|
7
7
|
* 자산 500 개 × 부품 8 개 = 4000 draw call 이 된다. 청사진은 그것을 줄인 형식이다.
|
|
8
8
|
*
|
|
9
9
|
* 핵심은 **병합**이다. 같은 재질·슬롯을 쓰고 애니메이션이 없는 부품을 한 묶음으로
|
|
10
10
|
* 묶는다. 3D 는 그 묶음의 geometry 를 합치고, 2D 는 윤곽을 한 path 로 합쳐 한 번에
|
|
11
11
|
* 채운다. 병목이 양쪽 다 묶음 수여서 같은 병합이 함께 값을 한다.
|
|
12
12
|
*
|
|
13
|
-
* 자산당 묶음 수 = 재질·슬롯 조합 수 + 애니메이션 포인트 수
|
|
13
|
+
* 자산당 묶음 수 = 재질·슬롯 조합 수 + 애니메이션 포인트 수 + 크기 반응이 다른 부품 수
|
|
14
|
+
*
|
|
15
|
+
* **합칠 수 없는 부품이 둘 있다.**
|
|
14
16
|
*
|
|
15
17
|
* 애니메이션이 걸린 부품은 합치지 않는다. 합치면 그 부품만 따로 움직일 수 없다.
|
|
18
|
+
*
|
|
19
|
+
* `sizing` 이 `'scale'` 이 아닌 부품도 합치지 않는다. 이유가 같다 — 합친 geometry 는
|
|
20
|
+
* 변환을 하나만 받는데, `fixed` 는 크기를 그대로 두고 `stretch` 는 한 축만 늘리고
|
|
21
|
+
* `repeat` 는 개수를 바꾼다. 인스턴스마다 다르게 반응해야 하므로 각자 서야 한다.
|
|
16
22
|
*/
|
|
17
23
|
import { validate } from "./validate.js";
|
|
18
24
|
import { geometryKeyOf, groupKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
19
|
-
// 키는 keys.ts 가
|
|
25
|
+
// 키는 keys.ts 가 기준이 되는 원본이다. 소비처가 쓰던 이름 그대로 다시 내보낸다.
|
|
20
26
|
export { geometryKeyOf, materialKeyOf, usesSegments } from "./keys.js";
|
|
21
27
|
import { BLUEPRINT_VERSION } from "./types.js";
|
|
22
|
-
/** 컴파일할 수 없을 때 던진다.
|
|
28
|
+
/** 컴파일할 수 없을 때 던진다. 오류보고없이 빈 청사진을 돌려주지 않는다. */
|
|
23
29
|
export class FigureCompileError extends Error {
|
|
24
30
|
errors;
|
|
25
31
|
constructor(errors) {
|
|
@@ -68,6 +74,57 @@ export function trianglesOf(part) {
|
|
|
68
74
|
}
|
|
69
75
|
/** `sizing` 이 없으면 무엇으로 보나 — 비례 확대가 가장 예측 가능하다. */
|
|
70
76
|
const DEFAULT_SIZING = 'scale';
|
|
77
|
+
/**
|
|
78
|
+
* 회전까지 반영한 부품의 축별 크기.
|
|
79
|
+
*
|
|
80
|
+
* 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
|
|
81
|
+
* `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. 그리는 쪽이 같은 순서로
|
|
82
|
+
* 돌리므로 여기서만 다르면 답이 달라진다.
|
|
83
|
+
*/
|
|
84
|
+
export function rotatedExtentOf(part) {
|
|
85
|
+
const { size, rotation } = part.transform;
|
|
86
|
+
if (!rotation)
|
|
87
|
+
return { ...size };
|
|
88
|
+
const rad = Math.PI / 180;
|
|
89
|
+
const cx = Math.cos((rotation.x ?? 0) * rad);
|
|
90
|
+
const sx = Math.sin((rotation.x ?? 0) * rad);
|
|
91
|
+
const cy = Math.cos((rotation.y ?? 0) * rad);
|
|
92
|
+
const sy = Math.sin((rotation.y ?? 0) * rad);
|
|
93
|
+
const cz = Math.cos((rotation.z ?? 0) * rad);
|
|
94
|
+
const sz = Math.sin((rotation.z ?? 0) * rad);
|
|
95
|
+
// Rx·Ry·Rz 의 세 줄
|
|
96
|
+
const r = [
|
|
97
|
+
[cy * cz, -cy * sz, sy],
|
|
98
|
+
[sx * sy * cz + cx * sz, -sx * sy * sz + cx * cz, -sx * cy],
|
|
99
|
+
[-cx * sy * cz + sx * sz, cx * sy * sz + sx * cz, cx * cy]
|
|
100
|
+
];
|
|
101
|
+
const along = (row) => Math.abs(row[0]) * size.x + Math.abs(row[1]) * size.y + Math.abs(row[2]) * size.z;
|
|
102
|
+
return { x: along(r[0]), y: along(r[1]), z: along(r[2]) };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* `stretch` 일 때 늘어나는 축.
|
|
106
|
+
*
|
|
107
|
+
* 형식에 축을 적는 자리가 없다. 대신 **부품이 가장 길게 뻗은 축**으로 정한다. 문서가
|
|
108
|
+
* 든 예(프레임 · 벨트 · 레일)가 전부 "길어서 그 물건인 것"이라 이 규칙과 맞는다.
|
|
109
|
+
* 정육면체에 가까운 부품에는 뜻이 없는데, 그런 부품은 애초에 `stretch` 를 쓸 자리가 아니다.
|
|
110
|
+
*
|
|
111
|
+
* **회전을 반영해 측정한다.** 크기만 보면 x 로 길게 그린 레일을 y 로 90° 돌려 세워도 여전히
|
|
112
|
+
* x 라고 답한다. 그러면 레일이 길이가 아니라 두께 쪽으로 늘어난다.
|
|
113
|
+
*
|
|
114
|
+
* 두 축의 길이가 같으면 x → z → y 순으로 정한다. 순서를 정해 두지 않으면 같은 부품이
|
|
115
|
+
* 소비처마다 다른 축으로 늘어난다.
|
|
116
|
+
*
|
|
117
|
+
* **소비처가 저마다 계산하면 안 된다.** 3D 와 2D 톱뷰와 속성 편집기가 같은 답을 내야
|
|
118
|
+
* 하므로 여기 한 곳에서만 정한다.
|
|
119
|
+
*/
|
|
120
|
+
export function stretchAxisOf(part) {
|
|
121
|
+
const { x, y, z } = rotatedExtentOf(part);
|
|
122
|
+
if (x >= z && x >= y)
|
|
123
|
+
return 'x';
|
|
124
|
+
if (z >= y)
|
|
125
|
+
return 'z';
|
|
126
|
+
return 'y';
|
|
127
|
+
}
|
|
71
128
|
function memberOf(part) {
|
|
72
129
|
const member = {
|
|
73
130
|
name: part.name,
|
|
@@ -86,7 +143,7 @@ function memberOf(part) {
|
|
|
86
143
|
return member;
|
|
87
144
|
}
|
|
88
145
|
/**
|
|
89
|
-
*
|
|
146
|
+
* 원본 데이터를 청사진으로 컴파일한다.
|
|
90
147
|
*
|
|
91
148
|
* `errors` 가 있으면 던진다 — 세울 수 없는 것을 반쯤 세운 청사진으로 돌려주면
|
|
92
149
|
* 어디서 잘못됐는지 알 수 없다. `violations` 는 청사진에 담아 돌려준다. 정책 위반은
|
|
@@ -124,6 +181,19 @@ export function compile(source) {
|
|
|
124
181
|
groups.push(group);
|
|
125
182
|
continue;
|
|
126
183
|
}
|
|
184
|
+
if ((part.sizing ?? DEFAULT_SIZING) !== 'scale') {
|
|
185
|
+
// 크기 반응이 다른 부품도 단독 묶음이다 — 합친 geometry 는 변환을 하나만 받는다
|
|
186
|
+
const group = {
|
|
187
|
+
materialKey: materialKeyOf(part),
|
|
188
|
+
material: part.material,
|
|
189
|
+
animated: false,
|
|
190
|
+
members: [memberOf(part)]
|
|
191
|
+
};
|
|
192
|
+
if (part.slot !== undefined)
|
|
193
|
+
group.slot = part.slot;
|
|
194
|
+
groups.push(group);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
127
197
|
const key = groupKeyOf(part);
|
|
128
198
|
const existing = byKey.get(key);
|
|
129
199
|
if (existing) {
|
package/dist/blueprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
|
package/dist/cost-chart.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
9
|
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
10
|
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로
|
|
11
|
+
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
12
|
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
13
|
* 읽힌다.
|
|
14
14
|
*/
|
package/dist/cost-chart.js
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
* 정점 버퍼 · 재질 10,000 개에서도 그대로다 ← 재활용되는 것
|
|
9
9
|
* InstancedMesh 의 draw call 평평하다 ← 아직 얻지 않은 몫
|
|
10
10
|
*
|
|
11
|
-
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로
|
|
11
|
+
* 의존을 만들지 않으려고 SVG 를 문자열로 낸다. 브라우저에서도 node 에서도 그대로 동작한다.
|
|
12
12
|
* 색은 다섯 계열만 쓰고 축과 글자는 `currentColor` 라서 밝은 테마·어두운 테마 양쪽에서
|
|
13
13
|
* 읽힌다.
|
|
14
14
|
*/
|
|
15
15
|
import { costOf } from "./cost.js";
|
|
16
16
|
/**
|
|
17
|
-
* 1-2-5 간격으로 자릿수를
|
|
17
|
+
* 1-2-5 간격으로 자릿수를 순회한다.
|
|
18
18
|
*
|
|
19
19
|
* 로그 축에서 눈에 고르게 놓이는 값들이다. 1·2·5·10·20·50·100 … 등비로 늘리면 자릿수
|
|
20
20
|
* 하나에 점이 셋씩 놓여 곡선이 매끄럽다.
|
package/dist/cost.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 이걸 100개 놓으면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
7
|
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당
|
|
8
|
+
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
9
|
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
10
|
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
11
|
*/
|
|
@@ -120,8 +120,8 @@ export interface FigureScore {
|
|
|
120
120
|
/**
|
|
121
121
|
* 0–100. **선언된 한도에 남은 여유**다.
|
|
122
122
|
*
|
|
123
|
-
* 가장
|
|
124
|
-
* 병목이 되기 때문이다. 평균을 내면
|
|
123
|
+
* 한도에 가장 가까운 항목 하나로 정한다. 넷 중 하나만 꽉 차 있어도 대량 배치에서는 그것이
|
|
124
|
+
* 병목이 되기 때문이다. 평균을 내면 한도에 가까운 하나가 여유 있는 셋에 묻힌다.
|
|
125
125
|
*/
|
|
126
126
|
score: number;
|
|
127
127
|
/**
|
|
@@ -130,7 +130,7 @@ export interface FigureScore {
|
|
|
130
130
|
* D 는 곧 위반이 있다는 뜻이다 — `blueprint.violations` 에 사유가 들어 있다.
|
|
131
131
|
*/
|
|
132
132
|
grade: FigureGrade;
|
|
133
|
-
/** 가장
|
|
133
|
+
/** 한도에 가장 가까운 항목. **여기부터 고치면 된다.** */
|
|
134
134
|
tightest: FigureBudgetUse;
|
|
135
135
|
budgets: FigureBudgetUse[];
|
|
136
136
|
/**
|
package/dist/cost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;IAEjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,EAAE,EAAE,YAAY,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,UAAU,CA0C9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAwBvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAA;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAA;IAElB,
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;IAEjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,EAAE,EAAE,YAAY,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,UAAU,CA0C9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAwBvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAA;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,KAAK,EAAE,WAAW,CAAA;IAElB,sCAAsC;IACtC,QAAQ,EAAE,eAAe,CAAA;IAEzB,OAAO,EAAE,eAAe,EAAE,CAAA;IAE1B;;;;;OAKG;IACH,KAAK,EAAE;QACL,kBAAkB;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,eAAe;QACf,KAAK,EAAE,MAAM,CAAA;QACb,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB;QACnB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAaD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,eAAe,GAAG,WAAW,CAoE/D"}
|
package/dist/cost.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 이걸 100개 놓으면 무엇이 100배가 되고 무엇이 그대로인가.
|
|
7
7
|
*
|
|
8
|
-
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당
|
|
8
|
+
* 그대로인 것이 곧 **재활용되는 것**이다. geometry 와 재질은 타입당 하나라 인스턴스
|
|
9
9
|
* 수와 무관하다. 반면 삼각형과 draw call 은 인스턴스에 비례한다. 이 둘을 갈라 보여
|
|
10
10
|
* 주면, 저작자가 「부품을 하나 더 넣을까」를 근거를 갖고 정할 수 있다.
|
|
11
11
|
*/
|
|
@@ -113,7 +113,7 @@ export function scoreOf(blueprint) {
|
|
|
113
113
|
used: cost.groups,
|
|
114
114
|
limit: LIMITS.materialGroups,
|
|
115
115
|
ratio: cost.groups / LIMITS.materialGroups,
|
|
116
|
-
why: '인스턴스 하나마다 이만큼 draw call 이
|
|
116
|
+
why: '인스턴스 하나마다 이만큼 draw call 이 필요하다'
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
key: 'animations',
|
package/dist/cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './types.ts';
|
|
2
2
|
export { validate, type ValidateResult } from './validate.ts';
|
|
3
|
-
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, trianglesOf, usesSegments } from './blueprint.ts';
|
|
3
|
+
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, rotatedExtentOf, stretchAxisOf, trianglesOf, usesSegments } from './blueprint.ts';
|
|
4
4
|
export { costOf, describeCost, scoreOf, type FigureBudgetUse, type FigureCost, type FigureCostAt, type FigureGrade, type FigureScore } from './cost.ts';
|
|
5
5
|
export { costCurve, costCurveSvg, type CostCurveOptions, type CostCurvePoint } from './cost-chart.ts';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export * from "./types.js";
|
|
13
13
|
export { validate } from "./validate.js";
|
|
14
|
-
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, trianglesOf, usesSegments } from "./blueprint.js";
|
|
14
|
+
export { compile, FigureCompileError, geometryKeyOf, materialKeyOf, rotatedExtentOf, stretchAxisOf, trianglesOf, usesSegments } from "./blueprint.js";
|
|
15
15
|
export { costOf, describeCost, scoreOf } from "./cost.js";
|
|
16
16
|
export { costCurve, costCurveSvg } from "./cost-chart.js";
|
|
17
17
|
//# 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":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,OAAO,EAMR,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAA"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
3
|
*
|
|
4
|
-
* **이 파일이 유일한
|
|
4
|
+
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
5
|
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
6
|
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
7
|
*
|
|
@@ -23,7 +23,7 @@ export declare function geometryKeyOf(part: FigurePart): string;
|
|
|
23
23
|
/**
|
|
24
24
|
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
25
25
|
*
|
|
26
|
-
* `transparent` 가 키에
|
|
26
|
+
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
27
27
|
*/
|
|
28
28
|
export declare function materialKeyOf(part: FigurePart): string;
|
|
29
29
|
/**
|
package/dist/keys.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 키 — 무엇을 무엇과 나눠 쓰는지, 무엇을 무엇과 합치는지를 정하는 식.
|
|
3
3
|
*
|
|
4
|
-
* **이 파일이 유일한
|
|
4
|
+
* **이 파일이 유일한 기준이다.** 검사(`validate.ts`)와 컴파일(`blueprint.ts`)이 같은
|
|
5
5
|
* 식을 써야 한다. 다르면 「묶음 수 한도를 지켰다」고 검사가 말한 것과 실제로 만들어지는
|
|
6
6
|
* 묶음 수가 어긋나고, 그 어긋남은 오류 없이 성능으로만 나타난다.
|
|
7
7
|
*
|
|
@@ -34,11 +34,11 @@ export function geometryKeyOf(part) {
|
|
|
34
34
|
/**
|
|
35
35
|
* MaterialBank 키. 색은 토큰 이름으로 둔다 — 값을 구우면 테마를 바꿔도 안 따라온다.
|
|
36
36
|
*
|
|
37
|
-
* `transparent` 가 키에
|
|
37
|
+
* `transparent` 가 키에 들어간다. 투명 재질은 별도 정렬 경로를 타므로 불투명과 합칠 수 없다.
|
|
38
38
|
*/
|
|
39
39
|
export function materialKeyOf(part) {
|
|
40
40
|
const m = part.material;
|
|
41
|
-
// 표면이 키에
|
|
41
|
+
// 표면이 키에 들어간다. 같은 색이라도 표면이 다르면 다른 재질이다. 같은 표면끼리는
|
|
42
42
|
// 한 재질을 나눠 쓴다(이름으로 가리키는 고정 자산이라 인스턴스와 무관하다).
|
|
43
43
|
const surface = m.surface ? `s${m.surface.kind}:${m.surface.ref}` : '-';
|
|
44
44
|
return [m.token ?? '-', m.preset ?? '-', m.flatShading ? 'f' : '-', m.transparent ? 't' : '-', surface].join('|');
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,mCAAmC;AACnC,MAAM,UAAU,CAAC,CAAC,CAAS;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;AACpC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,SAAwB;IACnD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACxF,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,CAAA;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACvB,
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,mCAAmC;AACnC,MAAM,UAAU,CAAC,CAAC,CAAS;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;AACpC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,SAAwB;IACnD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACxF,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,CAAA;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACvB,iDAAiD;IACjD,6CAA6C;IAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IACvE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACnH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;AACtD,CAAC"}
|