Skip to content

Commit

Permalink
[Docs] Update readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
lybell-art committed Mar 26, 2024
1 parent 4387616 commit 3249d80
Show file tree
Hide file tree
Showing 4 changed files with 162 additions and 9 deletions.
63 changes: 61 additions & 2 deletions api-ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ console.log(result);
## Reader Plugins

### setReaders( readers : Object\<BaseReader\> )
- ``readers`` (ArrayBuffer) : Reader
- ``readers`` (Object\<BaseReader\>) : 커스텀 리더

xnb.js에서 사용하는 리더의 종류를 지정합니다. 특정한 Reader만 사용하고 싶을 때 유용합니다.
``readers``의 key는 xnb 파일의 헤더가 인식 가능한 자료명+Reader로, value는 BaseReader를 상속한 리더 클래스가 들어가야 합니다. 다음의 예제를 참조하십시오.
Expand All @@ -142,7 +142,7 @@ setReaders({
```

### addReaders( readers : Object\<BaseReader\> )
- ``readers`` (ArrayBuffer) : Reader
- ``readers`` (Object\<BaseReader\>) : 커스텀 리더

xnb.js에서 사용하는 리더를 추가합니다. 플러그인을 추가하고 싶을 때 유용합니다. 다음의 예제를 참조하십시오.
```js
Expand All @@ -152,6 +152,65 @@ import * as StardewReader from "@xnb/stardew-valley";
addReaders({...StardewReader});
```

### setSchemes( schemes: Object\<XNBSchemeObject\> )
- ``schemes`` (Object\<XNBSchemeObject\>) : C# 클래스의 타입 정의 객체

xnb.js에서 사용하는 scheme의 종류를 지정합니다.
The key of ``schemes``의 key는 대응하는 C# 클래스의 풀네임으로, value는 해당 C# 클래스의 타입을 나타내는 객체가 들어가야 합니다. 다음의 예제를 참조하십시오.
```js
import {setSchemes} from "xnb";

// from StardewValley.GameData.BigCraftables.BigCraftableData C# file
const bigCraftableScheme = {
Name: "String",
DisplayName: "String",
Description: "String",
Price: "Int32",
Fragility: "Int32",
CanBePlacedOutdoors: "Boolean",
CanBePlacedIndoors: "Boolean",
IsLamp: "Boolean",
$Texture: "String",
SpriteIndex: "Int32",
$ContextTags: ["String"],
$CustomFields: {"String": "String"}
};

setSchemes({"StardewValley.GameData.BigCraftables.BigCraftableData": bigCraftableScheme});
```

### addSchemes( schemes: Object\<XNBSchemeObject\> )
- ``schemes`` (Object\<XNBSchemeObject\>) : C# 클래스의 타입 정의 객체

xnb.js에서 사용하는 scheme을 추가합니다. 다음의 예제를 참조하십시오.
```js
import {addSchemes} from "xnb";
import {schemes as StardewSchemes} from "@xnb/stardew-valley";

addSchemes(StardewSchemes);
```

### setEnums( enums: Array\<string\> )
- ``enums`` (Array\<string\>) : C# enum 자료형의 풀네임

xnb.js가 해석할 수 있는 enum을 지정합니다. `enums``StardewValley.Season`과 같이 해당 enum의 C# 풀네임이 들어가야 합니다. 다음의 예제를 참조하십시오.
```js
import {setEnums} from "xnb";

setEnums(["StardewValley.Season"]);
```

### addEnums( enums: Array\<string\> )
- ``enums`` (Array\<string\>) : C# enum 자료형의 풀네임

xnb.js가 해석할 수 있는 enum을 추가합니다. 다음의 예제를 참조하십시오.
```js
import {addEnums} from "xnb";

addEnums(["StardewValley.Season"]);
```


## Data Structure
### XnbData
XnbData 객체는 Xnb 파일에서 추출된 헤더와 리더 정보, 컨텐츠가 포함된 오브젝트입니다. unpackToXnbData(), bufferToXnb()의 반환값입니다. 라이브러리를 worker로 활용해서 데이터를 언팩할 때, json 데이터를 XnbData 객체로 변환할 수 있습니다.
Expand Down
65 changes: 62 additions & 3 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ console.log(result);
## Reader Plugins

### setReaders( readers : Object\<BaseReader\> )
- ``readers`` (ArrayBuffer) : Reader
- ``readers`` (Object\<BaseReader\>) : Reader

Specifies the type of reader used by xnb.js. This is useful when you want to use only certain readers.
The key of ``readers`` should be a recognizable data name+Reader for the header of the xnb file, and the value should include the reader class that inherited the BaseReader. See the following example:
Expand All @@ -164,16 +164,75 @@ setReaders({
```

### addReaders( readers : Object\<BaseReader\> )
- ``readers`` (ArrayBuffer) : Reader
- ``readers`` (Object\<BaseReader\>) : Reader

Add the readers used by xnb.js. This is useful when you want to add plugins. See the following example:
```js
import {addReaders} from "xnb";
import * as StardewReader from "@xnb/stardew-valley";
import {readers as StardewReader} from "@xnb/stardew-valley";

addReaders(StardewReader);
```

### setSchemes( schemes: Object\<XNBSchemeObject\> )
- ``schemes`` (Object\<XNBSchemeObject\>) : custom schemes reflects C# class

Specifies the type of scheme used by xnb.js.
The key of ``schemes`` should be C# class full name, and the value should be custom scheme object. See the following example:
```js
import {setSchemes} from "xnb";

// from StardewValley.GameData.BigCraftables.BigCraftableData C# file
const bigCraftableScheme = {
Name: "String",
DisplayName: "String",
Description: "String",
Price: "Int32",
Fragility: "Int32",
CanBePlacedOutdoors: "Boolean",
CanBePlacedIndoors: "Boolean",
IsLamp: "Boolean",
$Texture: "String",
SpriteIndex: "Int32",
$ContextTags: ["String"],
$CustomFields: {"String": "String"}
};

setSchemes({"StardewValley.GameData.BigCraftables.BigCraftableData": bigCraftableScheme});
```

### addSchemes( schemes: Object\<XNBSchemeObject\> )
- ``schemes`` (Object\<XNBSchemeObject\>) : custom schemes reflects C# class

Add the schemes used by xnb.js. See the following example:
```js
import {addSchemes} from "xnb";
import {schemes as StardewSchemes} from "@xnb/stardew-valley";

addSchemes(StardewSchemes);
```

### setEnums( enums: Array\<string\> )
- ``enums`` (Array\<string\>) : to read enum full name in C#

Specifies the type of enum full names used by xnb.js. The name should be like `StardewValley.Season`. See the following example:
```js
import {setEnums} from "xnb";

setEnums(["StardewValley.Season"]);
```

### addEnums( enums: Array\<string\> )
- ``enums`` (Array\<string\>) : to read enum full name in C#

Add the type of enum full names used by xnb.js. See the following example:
```js
import {addEnums} from "xnb";

addEnums(["StardewValley.Season"]);
```


## Data Structure
### XnbData
`XnbData` is the object included headers, readers data, and content data extracted from xnb file. `unpackToXnbData()`, and `bufferToXnb()` returns this. When unpacking xnb using the library as a worker, you can convert json data into XnbData objects.
Expand Down
21 changes: 19 additions & 2 deletions readme-ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ xnb.js는 es6 모듈을 이용하여 불러오는 것을 권장합니다.

#### ES6 모듈로 불러오기(권장)
```js
import * as XNB from "https://cdn.jsdelivr.net/npm/xnb@1.2.0/dist/xnb.module.js";
import * as XNB from "https://cdn.jsdelivr.net/npm/xnb@1.3.0/dist/xnb.module.js";
```
#### 스크립트 링크로 불러오기
```html
<script src="https://cdn.jsdelivr.net/npm/xnb@1.2.0/dist/xnb.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/xnb@1.3.0/dist/xnb.min.js"></script>
```
자신이 IE11 등 ES5를 지원해야 한다면, xnb.es5.min.js를 사용하는 것을 권장합니다.

Expand Down Expand Up @@ -89,6 +89,7 @@ readFile("./Abigail.xnb") // read xnb file as Buffer

## 커스텀
xnb.js 1.1 업데이트 이후부터는 리더의 일부만 불러오거나, 커스텀 리더를 추가할 수 있습니다.
xnb.js 1.3 업데이트 이후부터는 custom scheme으로 불러올 데이터의 타입 구조를 지정한 파일을 불러와, 더 쉬운 커스텀 자료구조를 언팩하는 방법을 제시합니다.

### 일부 리더만 불러오기
```js
Expand Down Expand Up @@ -145,6 +146,22 @@ XNB.addReaders({CustomReader});
...
```

### 커스텀 scheme 추가
커스텀 scheme은 reflective reader가 불러오는 c# 클래스를 정의한 파일로, 다음의 문법을 갖고 있습니다.
```javascript
const myScheme = {
DisplayName: "String", // key값으로 커스텀 클래스의 필드명을, value값으로 자료형의 타입(Reader와 동일)을 지정합니다.
$Description: "String", // 앞에 $을 붙여서 nullable 필드를 표현합니다.
IsDebuff: "Boolean",
IconSpriteIndex: "Int32",
$Effects: "StardewValley.GameData.Buffs.BuffAttributesData", // 다른 커스텀 클래스를 불러오는 경우 C# 클래스의 풀 네임을 적어주세요.
$ActionsOnApply: ["String"], // []로 감싼 자료형은 List형을 의미합니다.
$CustomFields: {"String": "String"} // {}로 감싼 자료형은 Dictionary형을 의미합니다.
}
XNB.addSchemes({"StardewValley.GameData.Buffs.BuffData": myScheme}); // key값으로 해당 c# 클래스의 풀 네임이 들어갑니다.
```


## 외부 리소스
xnb.js에는 dxt.js와 lz4.js, png.js가 번들링되어 있으며, dxt.js와 lz4.js는 es6 모듈에 최적화되어 재작성되었습니다.
원본 코드의 라이선스는 다음과 같습니다.
Expand Down
22 changes: 20 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ You can load and use a library hosted online. Here's how to use it:

#### Load as ES6 Module(Recommended)
```js
import * as XNB from "https://cdn.jsdelivr.net/npm/xnb@1.2.0/dist/xnb.module.js";
import * as XNB from "https://cdn.jsdelivr.net/npm/xnb@1.3.0/dist/xnb.module.js";
```
#### Load as UMD
```html
<script src="https://cdn.jsdelivr.net/npm/xnb@1.2.0/dist/xnb.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/xnb@1.3.0/dist/xnb.min.js"></script>
```
If you need to support ES5, such as IE11, I recommend using xnb.es5.min.js.

Expand Down Expand Up @@ -89,6 +89,7 @@ See this [link](https://github.com/lybell-art/xnb-js/blob/main/api.md).

## Customs
After 1.1 update, you can load and use only a portion of the existing readers, or you can add a custom reader to use it.
After 1.3 update, we bring up a file that specifies the type structure of data to be imported into the custom scheme and suggest how to unpack the easier custom data structure.

### Load only part of existing readers
```js
Expand Down Expand Up @@ -147,6 +148,23 @@ XNB.addReaders({CustomReader});
...
```

### Add custom scheme
Custom scheme is a data structure which defines the c# class that the reflective reader reads, and has the following grammar;
```javascript
const myScheme = {
DisplayName: "String", // Specify the field name of the custom class with key, and data type with value.
$Description: "String", // You can add $ prefix to express nullable field.
IsDebuff: "Boolean",
IconSpriteIndex: "Int32",
$Effects: "StardewValley.GameData.Buffs.BuffAttributesData", // If you are fetching another custom class, please write the full name of the C# class.
$ActionsOnApply: ["String"], // [] means a List type.
$CustomFields: {"String": "String"} // {} means a Dictionary type.
}
XNB.addSchemes({"StardewValley.GameData.Buffs.BuffData": myScheme}); // The key value contains the full name of reflected c# class.
```



## External resource
xnb.js contains dxt.js, lz4.js, and png.js as bundle. libsquish(=dxt.js) and lz4.js were rewritten for es6 module system.
The licenses for the original libraries are as follows.
Expand Down

0 comments on commit 3249d80

Please sign in to comment.