# JavaScriptによるゲームキューブ自動化 「Sunameri」公開しました。
## はじめに
[](https://github.com/mukai1011/Sunameri)
以前[WHALE](https://github.com/mizuyoukanao/WHALE)の.NET向け制御ライブラリとして公開していたSunameriを、この度大幅にリニューアルし、**GC自動化用JavaScriptエンジン**として公開しました。
基本操作はもちろん、.NETとの連携、外部ライブラリの利用、画像認識などなんでもできる、強力なマクロ実行環境です。
宣伝と簡単な使い方の解説です。
## 使い方
`Sunameri.exe`にJavaScriptファイル`*.js`を読み込ませると、実行されます。
```
.\Sunameri.exe scriptfile.js
```
0.1.0公開時点でデバッグ機能は未搭載です。そのうち載せます。
## どんなことができるの?
GitHubにも上げているサンプルいくつか
### ボタン押下
既存の言語に乗せているので、簡単に部分ループや条件分岐を書けます。
```javascript=
const controller = new Controller({
portName: 'COM3',
baudRate: 4800
});
// 3回Aボタン
for (let i = 0; i < 3; i++) {
controller.execute([
{ type: 'KeyDown', key: 'A', wait: 200 }, // Aボタン押して200ms待機
{ type: 'KeyUp', key: 'A', wait: 200 } // Aボタン離して200ms待機
]);
}
// Bボタン
const hitB = [
{ type: 'KeyDown', key: 'B', wait: 200 },
{ type: 'KeyUp', key: 'B', wait: 200 }
];
// 5回入力
for (let i = 0; i < 5; i++) {
controller.execute(hitB);
}
```
### 画面を表示
5秒間表示する例です。
```javascript=
const capture = new VideoCapture({
index: 1,
width: 1600,
height: 1200,
visible: true
});
new Timer().sleep(5000);
```
表示はここで宣言する取得サイズとは別です。必要であれば`setSizeToShow`で決めてください。
### 待機など
上の例で`sleep`を使っていますが、終了時間を後から決めて待機することもできます。
```javascript=
timer = new Timer();
timer.start();
// ~~~ なんかの処理 ~~~
timer.submit(5000); // startから5000ms経ったらタイマー終了するように指示
// ~~~ なんかの処理 ~~~
timer.wait(); // タイマー終了を待機
```
### めっちゃ頑張ればこんなことができるよ!
[](https://github.com/mukai1011/xd-adjust-seed)
XD自動初期seed厳選とseed調整です。なんでもできると言った通りのフル活用です。ここまでくるとC#で書いたほうが楽なんですが ...
型定義など気になる場合もこちらを見てください。
## 技術面
[ClearScript](https://github.com/microsoft/ClearScript)を利用しています。
癖が強めのコーディングをしています ... 参考資料が少なくて大変です。
## おわりに
現状動けばよかろうなのでIssue/PR、ご意見は歓迎です。
後発品ですが、強力なマクロ実行環境であるSunameriをよろしくお願いします。