もしかしたら、このプラグイン自体が(function() {で全部をくくっているため
起動時に$gameSwitches.valueこれをスクリプトで定義する前に動いていたりするのかなぁ~など
無名関数でくくっているから、というわけではありません。
が、 $gameSwitches に Game_Switches インスタンスを代入する前に初期化が走るので、その部分は認識通りかと思います。
まず、 OnlineAvatar.js は firebase.database を利用した非同期型イベント駆動のプログラムを主としています。
このあたりは firebase の公式ドキュメントに詳しく書かれていますが、アレを読むにも多少の知識が必要なので、ざっくり噛み砕いてみます。
公式ドキュメント:
https://firebase.google.com/docs/databa ... data?hl=ja
例えば、 OnlineAvatar.js 内の以下の記述から見ていきましょう。
コード: 全て選択
this.switchRef = firebase.database().ref('switches')
これは firebase のデータベース上の switches という名前のデータへの参照です。
firebase.database.Reference 型には、 on メソッド等でイベントを登録し、登録された内容のイベントが発生した際に、対応して登録した処理を実行させる仕組みがあります。
コード: 全て選択
this.switchRef.on('child_added', function(data) {
$gameSwitches.setValue(data.key, data.val(), true);
});
on の第一引数はイベントの種類です。これは先程の公式ドキュメントにどんなイベントか書かれているので詳細はそちらを参照してください。
child_added は参照しているデータに子要素が追加された時に発生するイベントです。
firebaseのデータベース上に登録されたスイッチリストの子要素、つまり、スイッチそのものですね。
他のプレイヤーがオンラインでfirebaseデータベース上にスイッチを追加した時に、それを検知して実行する処理を書いています。
イベント発生時の処理として書かれているのは、 $gameSwitches.setValue なので、このコードは firebaseデータベース上に誰かがスイッチを追加したら、自分のゲームのスイッチも同期する、というコードです。
正確には、スイッチが追加されたイベントと、イベントを検知した時に実行する処理(長いので以後イベントハンドラと呼びます)を登録するだけであって、 on メソッド実行時にその場でゲーム自体の処理を止めて誰かがスイッチを追加したかな?と待ち続けることはありません。
長くなりましたが、つまるところ、これらのイベントハンドラ登録処理だけを条件分岐で切り替えようとする、というアプローチは接続状態を変えたいという要求にはそぐわないのです。
接続状態を変えたい場合どうすればよいか、については次の書き込みに書きます。