2015年01月12日
去年の秋ごろLogicoolのG300というゲーミングマウスを(安かったので)購入したんですが、スクリプト機能が付いてあり、そこそこ便利な機能を二つ作って今まで使っていまして、せっかくなのでここに書き残しておこうと思います。
スクリプトについて
Luaスクリプト言語で、OnEvent(event, arg)という関数をエディタ内で定義すればイベントが発生する度に適宜呼んでくれる仕組みのようです。
G300にはプロファイルというキーや挙動のカスタマイズの設定を分離し必要に応じて変えて使うような物があり、プロファイルに一つづつLuaのスクリプトを保存する場所があります。(オンボードメモリモードでは使えません)
モードを二つにする
モードボタン(初期設定ではG9ボタン)を押すとモードが0,1,2と回転するんですが、二つがよかったので二つにします。
仕掛けは、まずモードごとのライディングの色を以下のように二種類にして、見分けられないようにします。(上が1で左下が3、右下が2のようです)
それでモードボタンを押される度に、モードがあるモードだったら違うモードへと強制的に変えるようにします。
モードは1,2,3,1,2,3,,,という風に変わっていくので、3を1に誘導すればモードは実質1と2のみになり、モードボタンでの移動も出来ます。なお、ライティングを同じにするのは、イベントの発生が、モードボタンでのモードサイクル処理より前なので、モードサイクルを瞬時に変えられず、ボタンを押し込んだ時にモード3になって、離した瞬間にモード1に誘導するという風になるので、モード3が現れることが止められないので、ライティングを同じにして見分けられなくなくします。
関数の説明は以下の通り。
GetMKeyState("mouse")で現在のモードを取得します。
SetMKeyState(<数値>,"mouse")で数値にモードを変更します。
ここまで来たら作れそうですよね?以下の様な物をスクリプトにすれば実装完了です。
マウスを押しっぱなしにすると指が疲れるので、トグルを作ります。
トグルの対象は左マウスボタンで、eventの内容が"MOUSE_BUTTON_PRESSED"の時argを参照し1の時、左マウスボタンです。なお、イベント関数の本体の直前でEnablePrimaryMouseButtonEvents(true)を実行しないとそれが発生しません(左マウスボタンはたくさん押されるので、スクリプトが沢山実行されることによる負荷の軽減のためらしいです。)。
トグルの実行ボタンはG5ボタンとしまして、eventの内容が"MOUSE_BUTTON_PRESSED"の時argを参照し5の時、G5ボタンです。
関数の説明です。
PressMouseButton(<数値>)で、数値のボタン(左マウスボタンは1)を押しこんだことにします。
ReleaseMouseButton(<数値>)で、数値のボタンの押しこみを開放したことにします。
現在マウスを押したことにしてるか、してないかを記憶することも必要です。イベント関数の本体の直前でなんたら=trueなどと記述すれば、そのなんたらがグローバル変数として扱えるようになり、なんたら=true、なんたら=false、というように値を設定することが出来ます。
それで、以下の様なスクリプトを作りました。
G5ボタンではなくG4ボタンをトグル実行に使いたいという場合などは、arg==5のところをarg==4などに変えてもらえればオッケーです。
上で説明しませんでしたが、実際に使った時、トグルを発生させた後左マウスボタンの方をクリックするとトグルが1回正常に働くなくなったので、左マウスボタンが押されたらトグルを切るような判定もつけています。
追加機能:特定のモードの時にだけ上記のマクロを使う
OnEventの内容を共有します。
本体を並列して記述しましょう。
参考にしたサイト
スクリプトの関数の仕様説明の邦訳を載せていらっしゃるサイト様
featherGuiz | G-series Lua API のメモ
あとがき
スクリプトの場所
Luaスクリプトは触ったことが無かったので、いい練習にもなれました。
スクリプトでイベントの中に無限ループを作ったらLogicoolアプリ全体が非常に重くなり、文字通り死んだ思い出があります。Logicoolアプリを終了してから起動しても、スクリプトエディタを開く度にテストで実行されるようなので、エディタを開いたら速攻で全部消してから保存することで事なきをえました。無限ループはやめましょう。
アクションゲームを作るやつのページの更新が止まってますが、私は元気です。現在はアクションゲームよりWeb系など、他のことをやってしまってるのでそのうちアクションゲームの制作も再開して更新も続けたいと思っています。
現在の自分のG300は、上記のクリックトグルと、クリック連打ボタンをモード2につけて、モード1にはブラウザ用に戻る/進むのボタンを作って使っています。いろんな場面で便利です。
スクリプトについて
Luaスクリプト言語で、OnEvent(event, arg)という関数をエディタ内で定義すればイベントが発生する度に適宜呼んでくれる仕組みのようです。
G300にはプロファイルというキーや挙動のカスタマイズの設定を分離し必要に応じて変えて使うような物があり、プロファイルに一つづつLuaのスクリプトを保存する場所があります。(オンボードメモリモードでは使えません)
モードを二つにする
モードボタン(初期設定ではG9ボタン)を押すとモードが0,1,2と回転するんですが、二つがよかったので二つにします。
仕掛けは、まずモードごとのライディングの色を以下のように二種類にして、見分けられないようにします。(上が1で左下が3、右下が2のようです)
それでモードボタンを押される度に、モードがあるモードだったら違うモードへと強制的に変えるようにします。
モードは1,2,3,1,2,3,,,という風に変わっていくので、3を1に誘導すればモードは実質1と2のみになり、モードボタンでの移動も出来ます。なお、ライティングを同じにするのは、イベントの発生が、モードボタンでのモードサイクル処理より前なので、モードサイクルを瞬時に変えられず、ボタンを押し込んだ時にモード3になって、離した瞬間にモード1に誘導するという風になるので、モード3が現れることが止められないので、ライティングを同じにして見分けられなくなくします。
関数の説明は以下の通り。
GetMKeyState("mouse")で現在のモードを取得します。
SetMKeyState(<数値>,"mouse")で数値にモードを変更します。
ここまで来たら作れそうですよね?以下の様な物をスクリプトにすれば実装完了です。
function OnEvent(event, arg)一度押すとクリックを固定し、もう一度押すとクリックを離すようなクリックのトグルを実装するボタンを作る
if GetMKeyState("mouse") ==3 then
SetMKeyState(1,"mouse")
end
end
マウスを押しっぱなしにすると指が疲れるので、トグルを作ります。
トグルの対象は左マウスボタンで、eventの内容が"MOUSE_BUTTON_PRESSED"の時argを参照し1の時、左マウスボタンです。なお、イベント関数の本体の直前でEnablePrimaryMouseButtonEvents(true)を実行しないとそれが発生しません(左マウスボタンはたくさん押されるので、スクリプトが沢山実行されることによる負荷の軽減のためらしいです。)。
トグルの実行ボタンはG5ボタンとしまして、eventの内容が"MOUSE_BUTTON_PRESSED"の時argを参照し5の時、G5ボタンです。
関数の説明です。
PressMouseButton(<数値>)で、数値のボタン(左マウスボタンは1)を押しこんだことにします。
ReleaseMouseButton(<数値>)で、数値のボタンの押しこみを開放したことにします。
現在マウスを押したことにしてるか、してないかを記憶することも必要です。イベント関数の本体の直前でなんたら=trueなどと記述すれば、そのなんたらがグローバル変数として扱えるようになり、なんたら=true、なんたら=false、というように値を設定することが出来ます。
それで、以下の様なスクリプトを作りました。
G5ボタンではなくG4ボタンをトグル実行に使いたいという場合などは、arg==5のところをarg==4などに変えてもらえればオッケーです。
g5 = trueこれでは、G7ボタンでの右マウスボタンのトグルもつけています。
g7 = true
EnablePrimaryMouseButtonEvents(true)
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" then
if arg==5 then
if g5 then
PressMouseButton(1)
g5=false
else
ReleaseMouseButton(1)
g5=true
end
end
if arg==7 then
if g7 then
PressMouseButton(3)
g7=false
else
ReleaseMouseButton(3)
g7=true
end
end
if arg==1 then
ReleaseMouseButton(1)
g5=true
end
if arg==2 then
ReleaseMouseButton(3)
g7=true
end
end
end
上で説明しませんでしたが、実際に使った時、トグルを発生させた後左マウスボタンの方をクリックするとトグルが1回正常に働くなくなったので、左マウスボタンが押されたらトグルを切るような判定もつけています。
追加機能:特定のモードの時にだけ上記のマクロを使う
function OnEvent(event, arg)TIP:上記二つを同時に使うスクリプト
if GetMKeyState("mouse") == <モードの数値 2など> then
--上記のマクロの本体部分(OnEventの中身)を挿入
else
--マウスボタンのトグルスクリプトの場合、開放処理を行う必要がある(そのほうが使いやすいので)。
--g5、g7変数がfalseなら対応するボタンをReleaseMouseButtonで解放して、trueにしよう!
end
end
OnEventの内容を共有します。
本体を並列して記述しましょう。
参考にしたサイト
スクリプトの関数の仕様説明の邦訳を載せていらっしゃるサイト様
featherGuiz | G-series Lua API のメモ
あとがき
スクリプトの場所
Luaスクリプトは触ったことが無かったので、いい練習にもなれました。
スクリプトでイベントの中に無限ループを作ったらLogicoolアプリ全体が非常に重くなり、文字通り死んだ思い出があります。Logicoolアプリを終了してから起動しても、スクリプトエディタを開く度にテストで実行されるようなので、エディタを開いたら速攻で全部消してから保存することで事なきをえました。無限ループはやめましょう。
アクションゲームを作るやつのページの更新が止まってますが、私は元気です。現在はアクションゲームよりWeb系など、他のことをやってしまってるのでそのうちアクションゲームの制作も再開して更新も続けたいと思っています。
現在の自分のG300は、上記のクリックトグルと、クリック連打ボタンをモード2につけて、モード1にはブラウザ用に戻る/進むのボタンを作って使っています。いろんな場面で便利です。
2014年08月04日
「Y=X以下の素数の数」となる関数は素数計数関数といいます。
X以下の素数の数
素数計数関数は素数定理にて近似関数が出ています。
X以下の素数の数、Y=X/Log(X)、Y=Li(X)
で、タイトルなんですが「X以下の素数の数」が近似関数が得られるようなグラフになる、ということは適当に「X以下の数の因数の数の合計」や「素因数の数の合計」もなにか秩序だったものになるかもしれない、と考えC#でプログラムを書きグラフを描画するライブラリを借りてグラフにしてみた次第です。無駄に時間がかかりましたが楽しかったのでいいとして、結果がこちら。
X以下の因数の数、素因数の数
2以上10000未満のX以下の数の因数の数の合計、素因数の合計
近似関数はあるのでしょうか?気になりますね。
ビルドした(だけの)上3つのグラフを見れるソフトをおいておきます。(クリックでダウンロード)
続きを読む
X以下の素数の数
素数計数関数は素数定理にて近似関数が出ています。
X以下の素数の数、Y=X/Log(X)、Y=Li(X)
で、タイトルなんですが「X以下の素数の数」が近似関数が得られるようなグラフになる、ということは適当に「X以下の数の因数の数の合計」や「素因数の数の合計」もなにか秩序だったものになるかもしれない、と考えC#でプログラムを書きグラフを描画するライブラリを借りてグラフにしてみた次第です。無駄に時間がかかりましたが楽しかったのでいいとして、結果がこちら。
X以下の因数の数、素因数の数
2以上10000未満のX以下の数の因数の数の合計、素因数の合計
近似関数はあるのでしょうか?気になりますね。
ビルドした(だけの)上3つのグラフを見れるソフトをおいておきます。(クリックでダウンロード)
続きを読む
2014年04月11日
概要
S式とはLispという言語に使われている式の表現の名前です。
ここでは文字列中のマクロとして使いやすいようにシンプル化されたオリジナルS式を作ります。
LeftParen({)とRightParen(})で囲み、中身をArgsPeriod(,)で区切って配列にしたものを引数配列とし、
その配列をプログラム側で用意した関数に通し、処理させるライブラリを作りました。
例
"{い,う}"は"@"に置き換える、という感じに定義されていれば
そして{{<引数>}<引数>}みたいな入れ子にも対応させてみました。
何が出来るの?
基本的にこれはユーザーに使わせるツールのマクロなんかに使う物になると思います。
このS式を使ったマクロは普通の一定の文字を変換するようなマクロとは違い、マクロ文字列中から関数に引数を渡せるので、ある数以下の乱数を発生させたり、ある文字列のセットの中からランダムで一つ選んで使う、文字列セットを順番に使う、等の事が出来るでしょう。
というわけで、BOTのマクロとしての利用が適しているんじゃないでしょうか。
ライブラリ
以下C#のソースコードです。
続きを読む
S式とはLispという言語に使われている式の表現の名前です。
ここでは文字列中のマクロとして使いやすいようにシンプル化されたオリジナルS式を作ります。
LeftParen({)とRightParen(})で囲み、中身をArgsPeriod(,)で区切って配列にしたものを引数配列とし、
その配列をプログラム側で用意した関数に通し、処理させるライブラリを作りました。
例
あ{い,う}から{い,う}という文字列配列を取得でき、置き換えられます。("{"、"}"で囲まれるのがこの場合のS式。)
"{い,う}"は"@"に置き換える、という感じに定義されていれば
あ{い,う}が
あ@に変換されます。
そして{{<引数>}<引数>}みたいな入れ子にも対応させてみました。
何が出来るの?
基本的にこれはユーザーに使わせるツールのマクロなんかに使う物になると思います。
このS式を使ったマクロは普通の一定の文字を変換するようなマクロとは違い、マクロ文字列中から関数に引数を渡せるので、ある数以下の乱数を発生させたり、ある文字列のセットの中からランダムで一つ選んで使う、文字列セットを順番に使う、等の事が出来るでしょう。
というわけで、BOTのマクロとしての利用が適しているんじゃないでしょうか。
ライブラリ
以下C#のソースコードです。
続きを読む
2014年04月01日
HTMLとCSS3のネタです。
斜めにしたい文字にこうします。
こうなります。
そしてページ全体を傾けたいときはbodyタグにこうします。
'14/04/08 グローバル変数を導入し、連続で押すと更に斜めになるようにしました!
'14/04/09 ブログの左カラムの下に同じボタンを設置してみました!
対応しているブラウザ:IE9+、Firefox3.5+、Chrome、Safari、Opera 10.5+
斜めにしたい文字にこうします。
<div style="transform: rotate(5deg);">ここに文字</div>
こうなります。
そしてページ全体を傾けたいときはbodyタグにこうします。
<body style="ココ">// ←タグのココに"transform: rotate(5deg);"を追加
'14/04/08 グローバル変数を導入し、連続で押すと更に斜めになるようにしました!
'14/04/09 ブログの左カラムの下に同じボタンを設置してみました!
対応しているブラウザ:IE9+、Firefox3.5+、Chrome、Safari、Opera 10.5+