procon_bypass_man 0.1.17 → 0.1.20

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +85 -11
  3. data/.rubocop.yml +2 -0
  4. data/CHANGELOG.md +22 -1
  5. data/Gemfile.lock +4 -3
  6. data/README.md +19 -20
  7. data/docs/getting_started.md +88 -0
  8. data/docs/setting/splatoon2_macro_sokuwari_bubble.md +52 -0
  9. data/docs/setting/splatoon2_recommended_setting.md +127 -0
  10. data/docs/upgrade_pbm.md +56 -0
  11. data/lib/ext/module.rb +16 -0
  12. data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +11 -0
  13. data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +10 -0
  14. data/lib/procon_bypass_man/background.rb +2 -0
  15. data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +24 -3
  16. data/lib/procon_bypass_man/buttons_setting_configuration/validator.rb +12 -2
  17. data/lib/procon_bypass_man/buttons_setting_configuration.rb +9 -9
  18. data/lib/procon_bypass_man/bypass.rb +9 -8
  19. data/lib/procon_bypass_man/commands/bypass_command.rb +4 -11
  20. data/lib/procon_bypass_man/commands/connect_device_command.rb +23 -11
  21. data/lib/procon_bypass_man/configuration.rb +15 -1
  22. data/lib/procon_bypass_man/device_connector.rb +6 -33
  23. data/lib/procon_bypass_man/device_procon_finder.rb +65 -0
  24. data/lib/procon_bypass_man/never_exit_accidentally.rb +12 -0
  25. data/lib/procon_bypass_man/plugin/splatoon2/macro/sokuwari_for_splash_bomb.rb +22 -0
  26. data/lib/procon_bypass_man/plugins.rb +1 -0
  27. data/lib/procon_bypass_man/procon/button.rb +1 -1
  28. data/lib/procon_bypass_man/procon/macro.rb +89 -0
  29. data/lib/procon_bypass_man/procon/macro_builder.rb +123 -0
  30. data/lib/procon_bypass_man/procon/macro_registry.rb +2 -23
  31. data/lib/procon_bypass_man/procon/user_operation.rb +16 -2
  32. data/lib/procon_bypass_man/procon.rb +2 -0
  33. data/lib/procon_bypass_man/remote_pbm_action/reboot_os_action.rb +1 -0
  34. data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +9 -2
  35. data/lib/procon_bypass_man/runner.rb +7 -7
  36. data/lib/procon_bypass_man/support/yaml_writer.rb +16 -0
  37. data/lib/procon_bypass_man/version.rb +1 -1
  38. data/lib/procon_bypass_man.rb +25 -24
  39. data/procon_bypass_man.gemspec +1 -1
  40. data/project_template/app.rb +5 -2
  41. data/project_template/setting.yml +6 -22
  42. data/sig/main.rbs +5 -0
  43. metadata +17 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93bbba4d48bc92fc4f9882a5708d5947fde2e52fc9dbba3df2db6fe7530c52ec
4
- data.tar.gz: d963b6553736bdf606f63588c4664ec19153e0c9824dc52293c4f0bf99bbaeb6
3
+ metadata.gz: 1ce5a36623cb9c5ec02d78df78f1c50d8b6f23f54cedf4297bfe76d122def428
4
+ data.tar.gz: 6d459721f4dcbf4bde02c62e1ffb0aba296a39718e95d7cb5bbbbc6d27c845a3
5
5
  SHA512:
6
- metadata.gz: f36218eabf2625618182d45969cb5dd796fa3a9284d1921ab7a923062315f5302e422b7fe49a8d67fbef2e25de4fbd7b6ee378a29fa7f9eb2738de1b406a8c72
7
- data.tar.gz: fe700aa1c024c3ae45ed57698dcdf35d898032c5a11954ffcf9b70fdcd2e5254bd947f2cb5b5e62d495bfad5e338337c109dafe5dd5bf7f1a1e543bc96ff54f2
6
+ metadata.gz: 3a15285db88ece865db72a73d94f8f5dceff3958bc1fccd6422e5b63441e9c9f6238d080883220b934b14bd5d7a25ce0509cce00ca2995e7385dce90c8297584
7
+ data.tar.gz: f4cbd2665d0733016eb2311b95578360a6f111f847f32bf79a798b215d0e0a59d914fe743b4fd9c3fdeedb8e2d4fefdd3fc442de4c9c285fad7cf56f6a708b5a
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/.rubocop.yml CHANGED
@@ -24,3 +24,5 @@ Lint/EmptyBlock:
24
24
  Enabled: false
25
25
  Lint/ReturnInVoidContext:
26
26
  Enabled: false
27
+ Lint/AssignmentInCondition:
28
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,4 +1,25 @@
1
- ## [0.1.17] - 2022-01
1
+ ## [0.1.20] - 2022-02-13
2
+ - pbm-cloudから再起動・設定ファイルの適用指示があったときにackイベントを返すようになりました
3
+ - 起動オプションにnever_exit_accidentallyを追加しました。これを有効にすると想定外のエラーが起きたときにプロセスが停止しなくなります。デフォルトで無効です。
4
+ - pbm-cloudから設定ファイルの適用に失敗したときにファイルへの書き込みをしないようになりました
5
+ - まだadd_procon_gadget.shを実行していないときに、接続処理をする前に処理を停止するようにしました
6
+ - ラズパイの複数のUSBデバイスが刺さっていてもプロコンのデバイスを選択できるようにしました
7
+ - Switchからプロコンへ送信するバイパスを動かし続けるようにしました(切断対策)
8
+
9
+ ## [0.1.19.1] - 2022-02-09
10
+ - 設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました
11
+
12
+ ## [0.1.19] - 2022-02-09
13
+ - 設定ファイルを再読み込みするときに構文がエラーがあると、接続が切れる不具合を修正しました
14
+ - ~設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました~
15
+
16
+ ## [0.1.18] - 2022-02-05
17
+ - macroでできることが増えました
18
+ - 1ステップで複数のボタン入力と継続時間を指定ができるようになりました
19
+ - スプラトゥーン2用のバブル即割マクロ(SokuwariForSplashBomb)が使えるようになりました
20
+ - https://github.com/splaplapla/procon_bypass_man-splatoon2
21
+
22
+ ## [0.1.17] - 2022-01-26
2
23
  - procon_bypass_man_cloudに組み込むために、内部のデータ構造を変更しました
3
24
  - 設定ファイルにmacroを直接打ち込めるようになりました
4
25
  - ex) `open_macro :special_command, steps: [:x, :y, :up], if_pressed: [:y]`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- procon_bypass_man (0.1.17)
4
+ procon_bypass_man (0.1.20)
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)
@@ -121,6 +121,7 @@ PLATFORMS
121
121
  arm64-darwin-20
122
122
  arm64-darwin-21
123
123
  armv7l-linux
124
+ ruby
124
125
  x86_64-linux
125
126
 
126
127
  DEPENDENCIES
data/README.md CHANGED
@@ -1,18 +1,25 @@
1
1
  # ProconBypassMan
2
+ <img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
3
+
2
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)
3
5
 
4
- * Switchに繋いだプロコンを連射機にしたり、キーのリマップをしたり、マクロを実行できるツールです
6
+ * Switchに繋いだプロコンを連射機にしたり、ボタンのリマップをしたり、マクロを実行できる、Raspberry Pi上で動かすツールです
5
7
  * 設定ファイルはrubyスクリプトで記述します
6
8
  * 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
9
+ * ドキュメントは [getting_started.md](docs/getting_started.md) にまとめています
10
+ * https://pbm-cloud.herokuapp.com を使うと、webだけで運用が可能です
7
11
 
8
12
  ![image](https://user-images.githubusercontent.com/1664497/123414210-942f6980-d5ee-11eb-8192-955bd9e37e0b.png)
9
13
 
14
+
15
+ <!--
10
16
  ```
11
17
  @startuml
12
- ProController --> (PBM): ZR押しっぱなし
18
+ ProController \-\-> (PBM): ZR押しっぱなし
13
19
  Switch <-- (PBM): ZR連打
14
20
  @enduml
15
21
  ```
22
+ -->
16
23
 
17
24
  ## 使うハードウェア
18
25
  * プロコン
@@ -33,7 +40,7 @@ Switch <-- (PBM): ZR連打
33
40
  * sudo apt-get install rbenv
34
41
  * git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
35
42
  * rbenv install 3.0.1
36
- * sudo gem install pbmenv
43
+ * gem install pbmenv
37
44
  * sudo [pbmenv](https://github.com/splaplapla/pbmenv) install latest
38
45
  * Raspberry Pi4 でprocon_bypass_manを実行する
39
46
  * cd /usr/share/pbm/current
@@ -44,14 +51,6 @@ Switch <-- (PBM): ZR連打
44
51
  ## Plugins
45
52
  * https://github.com/splaplapla/procon_bypass_man-splatoon2
46
53
 
47
- ## 関連ソフトウェア
48
- * サーバソフトウェア(WIP)
49
- * https://github.com/splaplapla/procon_bypass_man_cloud
50
- * このサーバからOS自体の再起動、設定ファイルの変更、PBMのバージョンアップができます
51
- * 自分でホストティングしてください
52
- * pbmenv
53
- * バージョンマネージャー
54
-
55
54
  ## FAQ
56
55
  * どうやって動かすの?
57
56
  * このツールはRaspberry Pi4をUSBガジェットモードで起動して有線でプロコンとSwitchに接続して使います
@@ -60,10 +59,11 @@ Switch <-- (PBM): ZR連打
60
59
  * ラズベリーパイ4のセットアップ方法は?
61
60
  * https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
62
61
  * モード, マクロの違いは?
63
- * modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続ける
64
- * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了する
62
+ * modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
63
+ * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
65
64
  * レイヤーとは?
66
- * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれる
65
+ * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
66
+ * レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
67
67
  * レイヤーを切り替える方法は?
68
68
  * 設定ファイルに記述している `prefix_keys_for_changing_layer`の後ろにあるキーを同時押しながら、十字キーのどれかを押すことで任意のレイヤーに切り替わります
69
69
  * このツールでできることは?
@@ -71,17 +71,15 @@ Switch <-- (PBM): ZR連打
71
71
  * リマップは1つのキーを別のキーに割り当てます
72
72
  * 連射中には特定のキーの入力を無視したり、複数のキーをトリガーに連射することができます
73
73
  * どうしてsudoが必要なの?
74
- * 操作するdeviceファイルの所有者がrootだから
74
+ * 操作するdeviceファイルの所有者がrootだからです
75
75
  * 市販されているサードパーティ製連射機との違いは?
76
- * サードパーティ製のコントローラーは、設定方法や形状が特殊で買い換えるたびに学習・設定コストが発生します。本ツールを使えば、設定内容はテキストで管理することができ、使い慣れたプロコンで同等のことができます。
76
+ * サードパーティ製のコントローラーは、設定方法や形状が特殊で買い換えるたびに学習・設定コストが発生します。本ツールを使えば、設定内容はテキストで管理することができ、使い慣れたプロコンで同等のことができます
77
77
  * sshなしで運用は可能ですか?
78
- * 後述するWEBアプリケーションを使えば、sshを使わずに運用が可能です
79
- * https://github.com/splaplapla/procon_bypass_man_cloud
80
- * 機能開発中ですが、使ってくれる人を探しているのでdiscordからお問合せください
78
+ * https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
81
79
 
82
80
  ## TODO
83
81
  * レコーディング機能(プロコンの入力をマクロとして登録ができる)
84
- * マクロにdelayを入れれるようにする
82
+ * ドキュメントを書く(doing)
85
83
 
86
84
  ## 開発系
87
85
  ### プロコンとの接続を維持したまま、現在の設定ファイルをPBMに反映する
@@ -101,6 +99,7 @@ sudo kill -USR2 `cat ./pbm_pid`
101
99
  * project_template/web.rb, project_template/app.rb, lib/procon_bypass_man/version.rb のバージョンをあげる
102
100
  * CHANGELOG.md に日付を書く
103
101
  * be rake release
102
+ * githubのreleaseを作成する
104
103
 
105
104
  ## License
106
105
 
@@ -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,52 @@
1
+ # スプラトゥーン2: バブル即割(スプラッシュボム)マクロの設定方法
2
+ https://user-images.githubusercontent.com/1664497/152633205-ab44896b-9fa4-402c-b9aa-667e00676032.mp4
3
+
4
+ * procon_bypass_man: 0.1.18以上が必要です
5
+ * このマクロは、バブルの1個目のみを即割します
6
+
7
+ ## 1. install_macro_pluginで即割マクロを有効化します
8
+ * `setting.yml` に`install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb` と書きます
9
+ * これを記述することで、layer内で呼び出せるようになります
10
+
11
+ ## 2. どのlayerで発動するかを宣言します
12
+ * `setting.yml` のlayer内に`macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]` と書きます
13
+ * `if_pressed` がどのボタンを押したときにこのマクロが発動するかの設定です
14
+ * ここのオプションは、自由に変更可能です
15
+ * この場合は、ZLと十字キーの左を同時すると、このマクロが発動します
16
+
17
+ ## 3. 設定を反映させる
18
+ * 上記の記述を加えたsetting.ymlを起動中のprocon_bypass_manプロセスで読み込むには、プロセスにその旨を伝える必要があります
19
+ * ラズベリーパイを再起動して、プロセスを立ち上げ直す、でも目的は達成できますが、もっと簡単にsetting.ymlを再読み込みする必要があります
20
+ * 書き換えたsetting.ymlを、起動中のprocon_bypass_manプロセスへ即時反映するには、procon_bypass_manプロセスを動かしたまま、別のshellから 以下をを実行してください
21
+ * setting.ymlのシンタックスが正しければ、switchとの接続が継続したままsetting.ymlの内容を読み込んでいるはずです
22
+
23
+ ## まとめ
24
+ * 次の2行の追加が必要です。
25
+ * `install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb`
26
+ * `macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]`
27
+
28
+ ## 設定例1
29
+ ```yaml
30
+ version: 1.0
31
+ setting: |-
32
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
33
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb
34
+
35
+ layer :up do
36
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]
37
+ end
38
+ ```
39
+
40
+ ## 設定例2
41
+ * `open_macro` キーワードを使っても同じことが実行可能です。
42
+ * この場合は、 `install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb` が不要です。
43
+
44
+ ```yaml
45
+ version: 1.0
46
+ setting: |-
47
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
48
+
49
+ layer :up do
50
+ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec, :toggle_thumbr_and_toggle_zr_for_0_34sec, :toggle_r_for_1sec], if_pressed: [:zl, :right]
51
+ end
52
+ ```
@@ -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
+ ```
@@ -0,0 +1,56 @@
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を使わない方法
26
+ * rbファイル内にある `gem 'procon_bypass_man', ` の後ろの番号を変更することで、procon_bypass_manのバージョンを変更できます
27
+ * 最新バージョンは https://rubygems.org/gems/procon_bypass_man を参照してください
28
+ * 変更後は、プログラムを起動し直してください
29
+ * バージョンを変更後、エラーになる場合はサポートするので、discordやissueに報告をお願いします
30
+
31
+ ```ruby
32
+ #!/usr/bin/env ruby
33
+
34
+ require 'bundler/inline'
35
+
36
+ gemfile do
37
+ source 'https://rubygems.org'
38
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
39
+ gem 'procon_bypass_man', '0.1.16.1'
40
+ end
41
+
42
+ ProconBypassMan.configure do |config|
43
+ config.root = File.expand_path(__dir__)
44
+ config.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
45
+ config.logger.level = :debug
46
+ # config.api_servers = ['https://...']
47
+ config.enable_critical_error_logging = true
48
+ end
49
+
50
+ ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
51
+ ```
52
+
53
+ ```diff
54
+ - gem 'procon_bypass_man', '0.1.16.1'
55
+ + gem 'procon_bypass_man', '0.1.17'
56
+ ```
data/lib/ext/module.rb ADDED
@@ -0,0 +1,16 @@
1
+ # pluginの定数未定義を握りつぶす
2
+ class Module
3
+ module ExtModule
4
+ def const_missing(id)
5
+ if self.name =~ /^ProconBypassMan::Plugin/
6
+ parent_const = Object.const_get("#{self.name}")
7
+ parent_const.const_set(id, Module.new)
8
+ Object.const_get("#{self.name}::#{id}")
9
+ else
10
+ super
11
+ end
12
+ end
13
+ end
14
+
15
+ prepend ExtModule
16
+ end
@@ -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