[ネタ]VSCodeで魚を飼って仕事中に癒されることにした

# こんな拡張を作った

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398822/f5e854a6-3a9e-7931-f4e5-3f6c76157f35.png)

![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398822/7c054813-c5b2-376f-df65-71c6e2fe33c4.gif)

VSCodeの拡張を一度作ってみたかったので，HTMLのCanvasアートをそのまま拡張にしてみたというネタ記事です．

内容は，すべてcanvasのpathやellipseだけで表現した幾何学的な水中をイメージしたアートのようなものです．
線形代数やアルゴリズムの勉強がてらいろいろ詰め込んで作っていたのですが，プログラムで動かしてるのはわかってても，なんかかわいらしくなって愛着がわいてきて．．．
この小さい生き物たち可愛くないですか？？

Github (⭐をしていただけたら嬉しいです)
https://github.com/le-nn/vscode-vector-aquarium

### Unity

Unityエディタ向けに移植してくださった方がいますので紹介します!

https://qiita.com/garume/items/c432885ddd59bec328d6#comment-edf9f4c32c7aed4e42c1

## インストール

こちらをvscodeの拡張タブで検索するか下記URLからインストールしてください
https://marketplace.visualstudio.com/items?itemName=le-nn.vscode-vector-aquarium

インストールすると魚のアイコンが出るのでそこを開くだけです．

![open.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398822/aa1eec24-c508-3570-c442-30c8942b6a06.png)

### セカンダリサイドバーに表示する

```View > Appearance > Secondary Side Bar```からセカンダリサイドバーを出して魚のアイコンをD&Dすると右側にも表示できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398822/8edf0495-d0f6-5eea-e734-36d30ed82c05.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398822/e1ac2f0e-d397-ac5c-d492-04e6111ef317.png)

## 機能

* VSCodeの拡張のタブを水槽に見立てて小さな生き物たちが泳ぎます
* 魚のような生き物は群れを作ります
* タップすると逃げます
* 餌を食べます

## 仕組みについて

群れの実装はこちらのBoidアルゴリズムを利用しました
https://en.wikipedia.org/wiki/Boids
「Boid　アルゴリズム」でググると結構いろんな人のいろんな言語でのサンプルが出ます

描画や動かすロジックについては[こちら](https://github.com/le-nn/vscode-vector-aquarium/tree/main/src/webview/libs)に全てあります

## 設定

水槽の生き物の色や数大きさは自由に設定できます．
F1キーで以下のコマンドを入力すると設定ファイルが開きます．
vscode-vector-aquarium.config

fishに関しては配列のアイテムは群れを表していて，さらにその子アイテムが魚1匹を表しています．
またjsonのキー名通りの設定で各生き物の大きさや色や初期位置を調整できます．

```json
{
    "isFoodEnabled": true,
    "isRippleEnabled": true,
    "fish": [
        [
            {
                "color": "#3f51b5",
                "scale": 1,
                "location": {
                    "x": 0,
                    "y": 0
                }
            },
            {
                "color": "#3f51b5",
                "scale": 1,
                "location": {
                    "x": 0,
                    "y": 0
                }
            },
        ],
        [
            {
                "color": "#2196f3",
                "scale": 0.9,
                "location": {
                    "x": 0,
                    "y": 0
                }
            },
            {
                "color": "#2196f3",
                "scale": 1,
                "location": {
                    "x": 0,
                    "y": 0
                }
            }
        ]
    ],
    "jerryfish": [
        {
            "color": "#9c27b0",
            "scale": 1,
            "location": {
                "x": 340,
                "y": 120
            }
        },
        {
            "color": "#e91e63",
            "scale": 0.88,
            "location": {
                "x": 120,
                "y": 230
            }
        }
    ],
    "lophophorata": [
        {
            "color": "#3f51b5",
            "scale": 1,
            "location": {
                "x": 120,
                "y": 200
            }
        }
    ]
}

```