procon_bypass_man 0.1.18 → 0.1.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +85 -11
  3. data/CHANGELOG.md +19 -1
  4. data/Gemfile.lock +3 -3
  5. data/README.md +16 -22
  6. data/docs/getting_started.md +88 -0
  7. data/docs/setting/splatoon2_recommended_setting.md +127 -0
  8. data/docs/upgrade_pbm.md +25 -1
  9. data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +11 -0
  10. data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +10 -0
  11. data/lib/procon_bypass_man/background.rb +2 -0
  12. data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +21 -2
  13. data/lib/procon_bypass_man/buttons_setting_configuration/validator.rb +12 -2
  14. data/lib/procon_bypass_man/buttons_setting_configuration.rb +9 -9
  15. data/lib/procon_bypass_man/bypass/bypass_mode.rb +21 -0
  16. data/lib/procon_bypass_man/bypass.rb +10 -8
  17. data/lib/procon_bypass_man/commands/bypass_command.rb +20 -8
  18. data/lib/procon_bypass_man/commands/connect_device_command.rb +23 -11
  19. data/lib/procon_bypass_man/configuration.rb +30 -1
  20. data/lib/procon_bypass_man/device_connector.rb +6 -33
  21. data/lib/procon_bypass_man/device_procon_finder.rb +65 -0
  22. data/lib/procon_bypass_man/never_exit_accidentally.rb +12 -0
  23. data/lib/procon_bypass_man/remote_pbm_action/reboot_os_action.rb +1 -0
  24. data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +9 -2
  25. data/lib/procon_bypass_man/runner.rb +7 -7
  26. data/lib/procon_bypass_man/scheduler.rb +1 -1
  27. data/lib/procon_bypass_man/support/yaml_writer.rb +16 -0
  28. data/lib/procon_bypass_man/version.rb +1 -1
  29. data/lib/procon_bypass_man.rb +24 -11
  30. data/project_template/app.rb +5 -1
  31. data/project_template/setting.yml +6 -22
  32. data/sig/main.rbs +5 -0
  33. metadata +10 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae61096a07d9982a4a88fd64c0ba41039d351b5925ff2953ca4b44c546d92715
4
- data.tar.gz: 1c969b841734cd26e0d8ee58e182e8cfda86f69a40a57e4a88fb6f0d8e92e201
3
+ metadata.gz: 29c989ae104586849ff797f9086b997294925372a2997797da279c6b2178098a
4
+ data.tar.gz: d23be38b1c10f9f856407fa65db924e4f8528d453c5fe59f8bdc0832dc3e93f0
5
5
  SHA512:
6
- metadata.gz: 64507342d85810c8b92a3ed8b0098055ce984fd959d070c7259a04097bb295e4720ebe6c0e615493e233d04957783e259fc20fa78b5f2d0bbbd73d624c6154c5
7
- data.tar.gz: a7ac7c9073422240e6f80d1d3aff3fc606dc6b718f3922cb05769783b5cfae62acb449bdba5b2282a922f1cf7a42f34e26e0818251ec89812f875b0c50dab46f
6
+ metadata.gz: 53a8875027f7b2e172bbb1873d1b76ff7ec191531e36c43dd044cc26e9bb54c80c2e1c9b63e5c9c0ec9f42829fd502f3cdbd9ac2ba41862c7835b97c8d3b66ac
7
+ data.tar.gz: 5476c22c2648861968b08ace121eef62993c3c05685ecbd08829ab5bdae7a66045a96eb3b22c50af154393edf7f9b027e91a66d70e10f4d1db67bf8d8b240822
data/.circleci/config.yml CHANGED
@@ -15,34 +15,108 @@ executors:
15
15
  BUNDLE_JOBS: 4
16
16
  working_directory: ~/app
17
17
 
18
+ commands: &commands
19
+ bundle_install:
20
+ parameters:
21
+ ruby-version:
22
+ type: string
23
+ steps:
24
+ - checkout
25
+ - restore_cache:
26
+ keys:
27
+ - gem-cache-v1-<< parameters.ruby-version >>-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
28
+ - gem-cache-v1-<< parameters.ruby-version >>-{{ arch }}-{{ .Branch }}
29
+ - gem-cache-v1
30
+ - run: gem i bundler && bundle install --path vendor/bundle --jobs 100 && bundle clean
31
+ - save_cache:
32
+ key: gem-cache-v1-<< parameters.ruby-version >>-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
33
+ paths:
34
+ - vendor/bundle
35
+
18
36
  jobs:
37
+ bundle_install:
38
+ parameters:
39
+ ruby-version:
40
+ type: string
41
+ executor:
42
+ name: ruby
43
+ tag: << parameters.ruby-version >>
44
+ steps:
45
+ - bundle_install:
46
+ ruby-version: << parameters.ruby-version >>
47
+ lint:
48
+ parameters:
49
+ ruby-version:
50
+ type: string
51
+ executor:
52
+ name: ruby
53
+ tag: << parameters.ruby-version >>
54
+ steps:
55
+ - bundle_install:
56
+ ruby-version: << parameters.ruby-version >>
57
+ - run: bundle exec rubocop -P
58
+ type_check:
59
+ parameters:
60
+ ruby-version:
61
+ type: string
62
+ executor:
63
+ name: ruby
64
+ tag: << parameters.ruby-version >>
65
+ steps:
66
+ - bundle_install:
67
+ ruby-version: << parameters.ruby-version >>
68
+ - run: bundle exec steep check
19
69
  rspec:
20
70
  parameters:
21
- version:
71
+ ruby-version:
22
72
  type: string
23
73
  executor:
24
74
  name: ruby
25
- tag: << parameters.version >>
75
+ tag: << parameters.ruby-version >>
26
76
  steps:
27
- - checkout
28
- - run: ruby --version
29
- - run: bundle --version
30
- - run: gem --version
31
- - run: gem install bundler
32
- - run: bundle install --jobs 4
33
- - run: bundle exec rubocop
77
+ - bundle_install:
78
+ ruby-version: << parameters.ruby-version >>
34
79
  - run: bundle exec rspec
35
- - run: bundle exec steep check
36
80
 
37
81
  build_jobs: &build_jobs
82
+ - bundle_install:
83
+ matrix:
84
+ parameters:
85
+ ruby-version:
86
+ - "2.7"
87
+ - "3.0.1"
88
+ - "3.0.2"
89
+ - "3.1.0"
90
+ - lint:
91
+ matrix:
92
+ parameters:
93
+ ruby-version:
94
+ - "2.7"
95
+ - "3.0.1"
96
+ - "3.0.2"
97
+ - "3.1.0"
98
+ requires:
99
+ - bundle_install
100
+ - type_check:
101
+ matrix:
102
+ parameters:
103
+ ruby-version:
104
+ - "2.7"
105
+ # - "3.0.1" # たまにSEGVするので
106
+ - "3.0.2"
107
+ - "3.1.0"
108
+ requires:
109
+ - bundle_install
38
110
  - rspec:
39
111
  matrix:
40
112
  parameters:
41
- version:
113
+ ruby-version:
42
114
  - "2.7"
43
115
  - "3.0.1"
44
116
  - "3.0.2"
45
117
  - "3.1.0"
118
+ requires:
119
+ - bundle_install
46
120
  workflows:
47
121
  version: 2
48
122
  build:
data/CHANGELOG.md CHANGED
@@ -1,4 +1,22 @@
1
- ## [0.1.18] - 2022-0
1
+ ## [0.1.20.1] - 2022-02-13
2
+ - Switchからプロコンへ送信するバイパスのインターバルを設定できるようにしました(切断対策)
3
+
4
+ ## [0.1.20] - 2022-02-13
5
+ - pbm-cloudから再起動・設定ファイルの適用指示があったときにackイベントを返すようになりました
6
+ - 起動オプションにnever_exit_accidentallyを追加しました。これを有効にすると想定外のエラーが起きたときにプロセスが停止しなくなります。デフォルトで無効です。
7
+ - pbm-cloudから設定ファイルの適用に失敗したときにファイルへの書き込みをしないようになりました
8
+ - まだadd_procon_gadget.shを実行していないときに、接続処理をする前に処理を停止するようにしました
9
+ - ラズパイの複数のUSBデバイスが刺さっていてもプロコンのデバイスを選択できるようにしました
10
+ - Switchからプロコンへ送信するバイパスを動かし続けるようにしました(切断対策)
11
+
12
+ ## [0.1.19.1] - 2022-02-09
13
+ - 設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました
14
+
15
+ ## [0.1.19] - 2022-02-09
16
+ - 設定ファイルを再読み込みするときに構文がエラーがあると、接続が切れる不具合を修正しました
17
+ - ~設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました~
18
+
19
+ ## [0.1.18] - 2022-02-05
2
20
  - macroでできることが増えました
3
21
  - 1ステップで複数のボタン入力と継続時間を指定ができるようになりました
4
22
  - スプラトゥーン2用のバブル即割マクロ(SokuwariForSplashBomb)が使えるようになりました
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- procon_bypass_man (0.1.18)
4
+ procon_bypass_man (0.1.20.1)
5
5
  action_cable_client
6
6
  pbmenv
7
7
  sorted_set
@@ -36,7 +36,7 @@ GEM
36
36
  parallel (1.21.0)
37
37
  parser (3.0.3.2)
38
38
  ast (~> 2.4.1)
39
- pbmenv (0.1.7)
39
+ pbmenv (0.1.8)
40
40
  pry (0.14.1)
41
41
  coderay (~> 1.1)
42
42
  method_source (~> 1.0)
@@ -49,7 +49,7 @@ GEM
49
49
  rb-inotify (0.10.1)
50
50
  ffi (~> 1.0)
51
51
  rbs (1.7.1)
52
- rbtree (0.4.4)
52
+ rbtree (0.4.5)
53
53
  regexp_parser (2.2.0)
54
54
  rexml (3.2.5)
55
55
  rspec (3.10.0)
data/README.md CHANGED
@@ -3,18 +3,23 @@
3
3
 
4
4
  [![Ruby](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml/badge.svg?branch=master)](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml)
5
5
 
6
- * Switchに繋いだプロコンを連射機にしたり、キーのリマップをしたり、マクロを実行できるツールです
6
+ * Switchに繋いだプロコンを連射機にしたり、ボタンのリマップをしたり、マクロを実行できる、Raspberry Pi上で動かすツールです
7
7
  * 設定ファイルはrubyスクリプトで記述します
8
8
  * 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
9
+ * ドキュメントは [getting_started.md](docs/getting_started.md) にまとめています
10
+ * https://pbm-cloud.herokuapp.com を使うと、webだけで運用が可能です
9
11
 
10
12
  ![image](https://user-images.githubusercontent.com/1664497/123414210-942f6980-d5ee-11eb-8192-955bd9e37e0b.png)
11
13
 
14
+
15
+ <!--
12
16
  ```
13
17
  @startuml
14
- ProController --> (PBM): ZR押しっぱなし
18
+ ProController \-\-> (PBM): ZR押しっぱなし
15
19
  Switch <-- (PBM): ZR連打
16
20
  @enduml
17
21
  ```
22
+ -->
18
23
 
19
24
  ## 使うハードウェア
20
25
  * プロコン
@@ -35,7 +40,7 @@ Switch <-- (PBM): ZR連打
35
40
  * sudo apt-get install rbenv
36
41
  * git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
37
42
  * rbenv install 3.0.1
38
- * sudo gem install pbmenv
43
+ * gem install pbmenv
39
44
  * sudo [pbmenv](https://github.com/splaplapla/pbmenv) install latest
40
45
  * Raspberry Pi4 でprocon_bypass_manを実行する
41
46
  * cd /usr/share/pbm/current
@@ -46,17 +51,6 @@ Switch <-- (PBM): ZR連打
46
51
  ## Plugins
47
52
  * https://github.com/splaplapla/procon_bypass_man-splatoon2
48
53
 
49
- ## 関連ソフトウェア
50
- * procon_bypass_man_cloud
51
- * webアプリケーション
52
- * https://github.com/splaplapla/procon_bypass_man_cloud
53
- * このwebアプリからOS自体の再起動、設定ファイルのバックアップ・変更、PBMのバージョンアップができます
54
- * ご自身でホストティングもできますが、 私がホスティングをしている https://pbm-cloud.herokuapp.com を使うことができます
55
- * [使い方](https://pbm-cloud.herokuapp.com/faq)
56
- * pbmenv
57
- * procon_bypass_manのバージョンマネージャー
58
- * https://github.com/splaplapla/pbmenv
59
-
60
54
  ## FAQ
61
55
  * どうやって動かすの?
62
56
  * このツールはRaspberry Pi4をUSBガジェットモードで起動して有線でプロコンとSwitchに接続して使います
@@ -65,10 +59,11 @@ Switch <-- (PBM): ZR連打
65
59
  * ラズベリーパイ4のセットアップ方法は?
66
60
  * https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
67
61
  * モード, マクロの違いは?
68
- * modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続ける
69
- * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了する
62
+ * modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
63
+ * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
70
64
  * レイヤーとは?
71
- * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれる
65
+ * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
66
+ * レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
72
67
  * レイヤーを切り替える方法は?
73
68
  * 設定ファイルに記述している `prefix_keys_for_changing_layer`の後ろにあるキーを同時押しながら、十字キーのどれかを押すことで任意のレイヤーに切り替わります
74
69
  * このツールでできることは?
@@ -76,16 +71,15 @@ Switch <-- (PBM): ZR連打
76
71
  * リマップは1つのキーを別のキーに割り当てます
77
72
  * 連射中には特定のキーの入力を無視したり、複数のキーをトリガーに連射することができます
78
73
  * どうしてsudoが必要なの?
79
- * 操作するdeviceファイルの所有者がrootだから
74
+ * 操作するdeviceファイルの所有者がrootだからです
80
75
  * 市販されているサードパーティ製連射機との違いは?
81
- * サードパーティ製のコントローラーは、設定方法や形状が特殊で買い換えるたびに学習・設定コストが発生します。本ツールを使えば、設定内容はテキストで管理することができ、使い慣れたプロコンで同等のことができます。
76
+ * サードパーティ製のコントローラーは、設定方法や形状が特殊で買い換えるたびに学習・設定コストが発生します。本ツールを使えば、設定内容はテキストで管理することができ、使い慣れたプロコンで同等のことができます
82
77
  * sshなしで運用は可能ですか?
83
- * 後述するWEBアプリケーションを使えば、sshを使わずに運用が可能です
84
- * https://github.com/splaplapla/procon_bypass_man_cloud
85
- * 機能開発中ですが、使ってくれる人を探しているのでdiscordからお問合せください
78
+ * https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
86
79
 
87
80
  ## TODO
88
81
  * レコーディング機能(プロコンの入力をマクロとして登録ができる)
82
+ * ドキュメントを書く(doing)
89
83
 
90
84
  ## 開発系
91
85
  ### プロコンとの接続を維持したまま、現在の設定ファイルをPBMに反映する
@@ -0,0 +1,88 @@
1
+ # GETTING STARTED
2
+ ## 目次
3
+ * [はじめに](#はじめに)
4
+ * [procon_bypass_manで解決したいこと](#procon_bypass_manで解決したいこと)
5
+ * [procon_bypass_manでできること](#procon_bypass_manでできること)
6
+ * [セットアップ](#セットアップ)
7
+ * [ラズベリーパイのセットアップ](#ラズベリーパイのセットアップ)
8
+ * [procon_bypass_manのインストール](#procon_bypass_manのインストール)
9
+ * [pbmenvを使う方法](#pbmenvを使う方法)
10
+ * [pbmenvを使わない方法](#pbmenvを使わない方法)
11
+ * [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
12
+ * レイヤー
13
+ * モード
14
+ * マクロ
15
+ * 左スティックの感度調整
16
+ * 設定ファイルの書き方
17
+ * layer
18
+ * プラグインの書き方
19
+ * 設定ファイルの書き方がわからない、エラーが起きるとき
20
+ * procon_bypass_manのアップグレード方法
21
+ * procon_bypass_man_cloudについて
22
+
23
+ ## はじめに
24
+ ### procon_bypass_manで解決したいこと
25
+
26
+ 通常、ボタン連射をするには、市販されているサードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
27
+ 特に「説明書を熟読してコントローラーの設定方法を覚えること、設定されている状態を思い出す」がつらい。
28
+
29
+ このツールを使うことで、使い慣れたコントローラーを使ってボタン連射ができます。また、設定内容はテキストで管理しているため一目瞭然です。
30
+
31
+ ### procon_bypass_manでできること
32
+
33
+ * 設定内容を即時に入れ替え(レイヤー管理)
34
+ * 連射
35
+ * 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
36
+ * マクロ
37
+ * [活用例](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
38
+ * 特定の同じ操作の繰り返し(モード)
39
+ * 左スティックの感度調整
40
+ * [設定方法](/docs/setting/left-analogstick-cap.md)
41
+ * WEBから設定状態の閲覧・反映
42
+ * ボタンリマップ
43
+
44
+ ## セットアップ
45
+ ### ラズベリーパイのセットアップ
46
+
47
+ * 後で書きます
48
+
49
+ ### procon_bypass_manのインストール
50
+
51
+ pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
52
+
53
+ #### pbmenvを使う方法
54
+
55
+ https://github.com/splaplapla/pbmenv
56
+ pbmenvはprocon_bypass_manのバージョンマネジャーです。procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
57
+
58
+ ```
59
+ gem install pbmenv
60
+ sudo pbmenv install latest
61
+ cd /usr/share/pbm/current
62
+ sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
63
+ ```
64
+
65
+ #### pbmenvを使わない方法
66
+
67
+ https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードし、ruby 3.0.1 をインストールすれば起動することができます。
68
+
69
+ ```
70
+ rbenv install 3.0.1
71
+ sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
72
+ ```
73
+
74
+ ## 普段使いをするためのセットアップ
75
+
76
+ procon_bypass_manを起動するだけでプロコンと接続ができるようになったら、Raspberry Piを起動したときにprocon_bypass_manも自動起動するように設定しましょう。
77
+ これを設定すると、Switch本体の電源ボタンを押すだけで使えるようになります。(実際には、Raspberry Piが起動して、procon_bypass_manが動き始めるまでに30秒くらいかかります。)
78
+
79
+ 自動起動方法は、pbmenvを使っているなら以下の2行をshellで実行すれば完了です。
80
+
81
+ ```
82
+ sudo systemctl link /usr/share/pbm/current/systemd_units/pbm.service
83
+ sudo systemctl enable pbm.service
84
+ ```
85
+
86
+ pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_bypass_man/blob/master/project_template/systemd_units/pbm.service をダウンロードして、 `systemctl link` をしてください。
87
+
88
+ ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
@@ -0,0 +1,127 @@
1
+ # スプラトゥーン2: おすすめの設定
2
+ ## 1 全般
3
+ ### 1.1 デスしてから最速スパジャンのためのAボタン連打
4
+
5
+ `flip :a, if_pressed: [:a]`
6
+ Aボタンを連打にします。復帰してから最速で前線復帰ができます
7
+
8
+ ### 1.2 簡単スニーキング
9
+
10
+ ボタンを押している間は、水飛沫のたたないスニーキングの感度まで調整することができます。
11
+ [設定方法](/docs/setting/left-analogstick-cap.md)
12
+
13
+ ### 1.3 ナイス玉連打
14
+
15
+ `flip :down, if_pressed: :down`
16
+ 十字キーの下ボタンは常に連打にしておくとナイス玉が来たときに楽です。
17
+
18
+ ### 1.4 最速スーパージャンプ
19
+
20
+ ```
21
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn
22
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey
23
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey
24
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey
25
+
26
+ layer :up do
27
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn, if_pressed: [:y, :b, :down]
28
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey, if_pressed: [:y, :b, :up]
29
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey, if_pressed: [:y, :b, :right]
30
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey, if_pressed: [:y, :b, :left]
31
+ end
32
+ ```
33
+
34
+ マップを開かずにジャンプができます。トリガーは自由に設定できます。
35
+
36
+ ## 2 武器に特化した設定
37
+ ### 2.1 パブロ向け
38
+
39
+ `flip :zr, if_pressed: :zr, force_neutral: :zl`
40
+ zrを連打にします。`force_neutral: :zl` というオプションをつけることで、ZRを押している間はZLを押しても無視されるようになります。パブロでは意味がありませんが、シューターだと煽りのような動作を抑制することができます。
41
+
42
+ ### 2.2 ボトルガイザー(フォイル)向け
43
+
44
+ バブル即割のマクロがあります。
45
+ [設定方法](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
46
+
47
+ ## 3 設定例
48
+ ### 3.1 シンプルなパブロ向け
49
+
50
+ * ZRボタン, ZLボタン, Lボタンを同時押しながら十字キーを押すとレイヤーを切り替える
51
+ * ナイス玉が来たときにゲージを貯めるために十字キーの下を連打
52
+ * 復帰から最速ジャンプのためにAボタンを連打
53
+ * 筆を振るためにZRボタンを連打
54
+ * 筆ダッシュをするためにLボタンをZRボタンに変更
55
+
56
+ ```yaml
57
+ version: 1.0
58
+ setting: |-
59
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
60
+
61
+ layer :up do
62
+ flip :zr, if_pressed: :zr, force_neutral: :zl
63
+ flip :a, if_pressed: [:a]
64
+ flip :down, if_pressed: :down
65
+ remap :l, to: :zr
66
+ end
67
+
68
+ layer :right do
69
+ end
70
+
71
+ layer :left do
72
+ end
73
+
74
+ layer :down do
75
+ end
76
+ ```
77
+
78
+ ### 3.2 全部盛り
79
+
80
+ * ZRボタン, ZLボタン, Lボタンを同時押しながら十字キーを押すとレイヤーを切り替える
81
+ * ナイス玉が来たときにゲージを貯めるために十字キーの下を連打
82
+ * 筆を振るためにZRボタンを連打
83
+ * 復帰から最速ジャンプのためにAボタンを連打
84
+ * YボタンとBボタンと十字キーの上を同時に押したときに、マップ開いた時の↑に設定されている味方にスーパージャンプ
85
+ * YボタンとBボタンと十字キーの左を同時に押したときに、マップ開いた時の←に設定されている味方にスーパージャンプ
86
+ * YボタンとBボタンと十字キーの右を同時に押したときに、マップ開いた時の→に設定されている味方にスーパージャンプ
87
+ * YボタンとBボタンと十字キーの下を同時に押したときに、リスポーンにスーパージャンプ
88
+ * ZLボタンと十字キーの右ボタンを同時に、バブル即割を発動
89
+ * 筆ダッシュをするためにLボタンをZRボタンに変更
90
+ * ZLボタンとAボタンを同時に押したときに移動するとスニーキング
91
+
92
+ ```yaml
93
+ version: 1.0
94
+ setting: |-
95
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn
96
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey
97
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey
98
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey
99
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb
100
+
101
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
102
+ set_neutral_position 2100, 2000
103
+
104
+ layer :up do
105
+ flip :zr, if_pressed: :zr, force_neutral: :zl
106
+ flip :a, if_pressed: [:a]
107
+ flip :down, if_pressed: :down
108
+
109
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn, if_pressed: [:y, :b, :down]
110
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey, if_pressed: [:y, :b, :up]
111
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey, if_pressed: [:y, :b, :right]
112
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey, if_pressed: [:y, :b, :left]
113
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]
114
+
115
+ remap :l, to: :zr
116
+ left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a
117
+ end
118
+
119
+ layer :right do
120
+ end
121
+
122
+ layer :left do
123
+ end
124
+
125
+ layer :down do
126
+ end
127
+ ```
data/docs/upgrade_pbm.md CHANGED
@@ -1,7 +1,31 @@
1
1
  # procon_bypass_man のアップグレード方法
2
+ * pbm-cloudを使う方法、pbmenvを使う方法、pbmenvを使わない方法があります
3
+
4
+ ## pbm-cloudを使う方法
5
+ * https://pbm-cloud.herokuapp.com からデバイス詳細画面を開いてください
6
+ * `デバイスの設定` => `PBMのバージョンアップ`を選択して、表示されるモーダルからインストールしたいバージョンを選択し、 `このバージョンでバージョンアップする` をクリックしてください
7
+ * クリックするとRaspberry Piが再起動するのでしばらく待ってください
8
+ * 設定ファイルが初期状態に戻っているので適宜復元してください
9
+ * デバイス詳細画面からバージョンが上がっていることを確認してください
10
+
11
+ ## pbmenvを使う方法
12
+ * sshをして、以下の3行を実行してください
13
+
14
+ ```
15
+ sudo gem i pbmenv
16
+ sudo pbmenv install latest
17
+ sudo pbmenv use latest
18
+ ```
19
+
20
+ * `sudo pbmenv use latest` を実行すると、 `/usr/share/pbm/current/` に新しいバージョンのprocon_bypass_manを配備します
21
+ * `/usr/share/pbm/current/setting.yml` が初期状態になっているので適宜変更してください
22
+ * 前バージョンのsetting.ymlは消していないので残っています
23
+ * 変更後は、プログラムを起動し直してください
24
+
25
+ ## pbmenvを使わない方法
2
26
  * rbファイル内にある `gem 'procon_bypass_man', ` の後ろの番号を変更することで、procon_bypass_manのバージョンを変更できます
3
27
  * 最新バージョンは https://rubygems.org/gems/procon_bypass_man を参照してください
4
- * 変更後は、プログラムを実行し直してください。プログラムを起動中であればraspberry piを再起動後にプログラムを起動してください
28
+ * 変更後は、プログラムを起動し直してください
5
29
  * バージョンを変更後、エラーになる場合はサポートするので、discordやissueに報告をお願いします
6
30
 
7
31
  ```ruby
@@ -0,0 +1,11 @@
1
+ class ProconBypassMan::ReportErrorReloadConfigJob < ProconBypassMan::ReportEventBaseJob
2
+ extend ProconBypassMan::HasExternalApiSetting
3
+
4
+ # @param [String] body
5
+ def self.perform(body)
6
+ ProconBypassMan::ReportHttpClient.new(
7
+ path: path,
8
+ server_pool: server_pool,
9
+ ).post(body: body, event_type: :error_reload_config)
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class ProconBypassMan::ReportStartRebootJob < ProconBypassMan::ReportEventBaseJob
2
+ extend ProconBypassMan::HasExternalApiSetting
3
+
4
+ def self.perform
5
+ ProconBypassMan::ReportHttpClient.new(
6
+ path: path,
7
+ server_pool: server_pool,
8
+ ).post(body: nil, event_type: :start_reboot)
9
+ end
10
+ end
@@ -6,7 +6,9 @@ require "procon_bypass_man/background/job_performer"
6
6
  require "procon_bypass_man/background/jobs/base_job"
7
7
  require "procon_bypass_man/background/jobs/report_event_base_job"
8
8
  require "procon_bypass_man/background/jobs/report_boot_job"
9
+ require "procon_bypass_man/background/jobs/report_start_reboot_job"
9
10
  require "procon_bypass_man/background/jobs/report_reload_config_job"
11
+ require "procon_bypass_man/background/jobs/report_error_reload_config_job"
10
12
  require "procon_bypass_man/background/jobs/report_load_config_job"
11
13
  require "procon_bypass_man/background/jobs/report_error_job"
12
14
  require "procon_bypass_man/background/jobs/report_pressed_buttons_job"
@@ -5,6 +5,8 @@ module ProconBypassMan
5
5
 
6
6
  # @return [ProconBypassMan::ButtonsSettingConfiguration]
7
7
  def self.load(setting_path: )
8
+ ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path = setting_path
9
+
8
10
  ProconBypassMan::ButtonsSettingConfiguration.switch_new_context(:validation) do |new_instance|
9
11
  yaml = YAML.load_file(setting_path) or raise "読み込みに失敗しました"
10
12
  new_instance.instance_eval(yaml["setting"])
@@ -12,17 +14,19 @@ module ProconBypassMan
12
14
  if validator.valid?
13
15
  next
14
16
  else
15
- raise ProconBypassMan::CouldNotLoadConfigError, validator.errors
17
+ raise ProconBypassMan::CouldNotLoadConfigError, validator.errors_to_s
16
18
  end
17
19
  rescue SyntaxError
20
+ fallback_setting_if_has_backup(current_setting_path: setting_path)
18
21
  raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトのシンタックスエラーです"
19
22
  rescue NoMethodError
23
+ fallback_setting_if_has_backup(current_setting_path: setting_path)
20
24
  raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトに未定義の定数・変数があります"
21
25
  rescue Psych::SyntaxError
26
+ fallback_setting_if_has_backup(current_setting_path: setting_path)
22
27
  raise ProconBypassMan::CouldNotLoadConfigError, "yamlのシンタックスエラーです"
23
28
  end
24
29
 
25
- ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path = setting_path
26
30
  ProconBypassMan::ButtonsSettingConfiguration.instance.reset!
27
31
  ProconBypassMan.reset!
28
32
 
@@ -38,12 +42,27 @@ module ProconBypassMan
38
42
 
39
43
  File.write(ProconBypassMan.digest_path, Digest::MD5.hexdigest(yaml["setting"]))
40
44
 
45
+ if File.exist?(ProconBypassMan.fallback_setting_path)
46
+ FileUtils.rm_rf(ProconBypassMan.fallback_setting_path)
47
+ end
48
+
41
49
  ProconBypassMan::ButtonsSettingConfiguration.instance
42
50
  end
43
51
 
44
52
  def self.reload_setting
45
53
  self.load(setting_path: ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path)
46
54
  end
55
+
56
+ def self.fallback_setting_if_has_backup(current_setting_path: )
57
+ return unless File.exist?(ProconBypassMan.fallback_setting_path)
58
+ return if current_setting_path.nil?
59
+
60
+ FileUtils.copy(
61
+ ProconBypassMan.fallback_setting_path,
62
+ current_setting_path,
63
+ )
64
+ FileUtils.rm_rf(ProconBypassMan.fallback_setting_path)
65
+ end
47
66
  end
48
67
  end
49
68
  end
@@ -32,6 +32,16 @@ module ProconBypassMan
32
32
  @errors ||= Hash.new {|h,k| h[k] = [] }
33
33
  end
34
34
 
35
+ # @return [Array<String>]
36
+ def errors_to_s
37
+ errors.map { |_x, message|
38
+ value = <<~EOH
39
+ #{message.map { |m| "layer #{m}" }.join("\n")}
40
+ EOH
41
+ value.chomp
42
+ }.join("\n")
43
+ end
44
+
35
45
  private
36
46
 
37
47
  def validate_config_of_button_lonely
@@ -100,7 +110,7 @@ module ProconBypassMan
100
110
  end
101
111
 
102
112
  if(const = Module.const_get(key.to_s))
103
- if not const.respond_to?(:binaries) && mode.call
113
+ if not (const.respond_to?(:binaries) && mode.call)
104
114
  @errors[:mode] << "モード #{key}を読み込めませんでした。"
105
115
  end
106
116
  end
@@ -116,7 +126,7 @@ module ProconBypassMan
116
126
  end
117
127
 
118
128
  if(const = Module.const_get(key.to_s))
119
- if not const.respond_to?(:steps) && macro.call
129
+ if not (const.respond_to?(:steps) && macro.call)
120
130
  @errors[:macro] << "マクロ #{key}を読み込めませんでした。"
121
131
  end
122
132
  end