Town Starの攻略ツールのカスタマイズ【JSON保存・自動ロード】

Town Starの攻略ツールのカスタマイズ【JSON保存・自動ロード】 ツール

「Town Starをもっと効率的にプレイしたい」
「Town Starのシミュレーションツールの利便性をUPしたい」
「TownStarVisualizerでJSONの保存が毎回面倒くさい・・・」

このような場合には、この記事の内容が参考となります。
この記事では、TownStarVisualizerを機能UPさせる方法を解説しています。

本記事の内容

  • JSONを保存・自動ロードする仕様の確認
  • JSONの保存
  • JSONの自動ロード
  • 動作確認

それでは、上記に沿って解説していきます。

JSONを保存・自動ロードする仕様の確認

この記事では、TownStarVisualizerについての理解が前提となります。
TownStarVisualizerは、Town Starの攻略ツールと言われています。
詳細については、次の記事で解説しています。

仕様を考えていく上では、現状分析からです。
既にあるモノは、最大限に利用します。

次の表示は、画面の一部です。

現状でも、町の状態を保存することは可能です。
「Copy」ボタンでJSON文字列をクリップボードにコピーします。

次のような文字列がコピーされます。

このJSON文字列をメモ帳などのコピペで保存しておきます。
ツール使用の再開時には、このJSON文字列をテキストボックスに貼り付けます。

その状態で「Load」ボタンをクリック。
そうすると、町の状態を再現することが可能です。

不特定多数が利用するWebツールとしては、ここまであるだけでも十分と言えます。
開発者には、本当に感謝です。

しかし、コードを改変できるならもっと便利にすることができます。
そこで、まずはコピペによる保存をやめましょうということです。

保存と言っても、いろいろな方法があります。

  • データベースへの保存
  • ファイルへの保存
  • クッキーへの保存
  • ローカルストレージへの保存

なるべく多くの人が参考にできる方法がベターです。
そうなると、ローカルストレージになりますね。
クッキーは、セッション情報の保持にのみ使う方が無難です。

再開時は、最初にローカルストレージの確認です。
ローカルストレージにデータがあれば、それを自動的にロードします。

データを保存・利用するための仕様が、決まりました。

  • 「Save」ボタンを押すと、JSON文字列がローカルストレージに保存される
  • 再開時(初回ロード時)にローカルストレージにおける保存データの有無を確認する
  • 保存データがあれば、自動ロード(自動コピペ & 「Load」ボタンクリック)を行う

大きく分けると、次の2つに処理を分けられます。

  • JSONの保存
  • JSONの自動ロード

以下で、それぞれを説明します。

JSONの保存

JSONの保存を既存の仕組みに追加します。
形式的に分けると、次のように分けることができます。

  • ボタンの追加
  • 関数の追加

ボタンの追加

visualizer.htmlに修正を加えます。

visualizer.html

この後に、以下のタグを追加。

<input type="button" value="Save" onclick="saveGrid()" />

画面上でボタンが追加されます。

UI的には、少し残念な状況です。
気になる人は、各自でスタイルを適用しましょう。

関数の追加

関数は、新規に作成するjsファイルに書きましょう。
add.jsというファイルを新規で作成します。

add.js

function saveGrid() {
    
    // JSON文字列
    var saveText = $("#importexport").val();
    
    // ローカルストレージに保存
    localStorage.setItem("ts_save", saveText);
}

たったこれだけです。
なお、TownStarVisualizerはjQueryを利用しています。

jQueryが大好きな私には、これはラッキーでした。
そのため、存分にjQueryを利用します。

あと、新規に作成add.jsはvisualizer.htmlで読み込む必要があります。

JSONの自動ロード

自動ロードのコードは、簡単です。

add.js

function autoLoad() {
    // ローカルストレージを確認
    var saveText = localStorage.getItem("ts_save");
    if (saveText) {
        // 保存データがあれば自動ロード
        $("#importexport").val(saveText);
        importGrid();
    }
}

ただ、この関数をどのタイミングで実行するのかがポイントになります。
visualizer.htmlには、次のような記述があります。

そして、main.js上には関数が定義されています。

この関数の最後に作成した関数を追記すれば、タイミング的にはOKです。

しかし!!
main.jsは触らないと決めた以上、触りたくありません。

そのため、工夫をしないといけません。
add.jsに次のようなコードを追加します。

var ts_check_timer;

window.addEventListener('load', function() {
    
    ts_check_timer = setInterval(function() {
        var biomesHtml = $("#biomes").html();
        if(biomesHtml){
            clearInterval(ts_check_timer);
            autoLoad();
        }
    },100);

});

renderBiomeOptions()の処理が終わったことを確認する処理をタイマーにセット。
その確認が取れれば、autoLoad()を起動させます。
その際にタイマーもクリアします。

動作確認

動作確認を行います。
その前に、add.jsの内容をまとめておきます。

add.js

var ts_check_timer;

window.addEventListener('load', function() {
    
    ts_check_timer = setInterval(function() {
        var biomesHtml = $("#biomes").html();
        if(biomesHtml){
            clearInterval(ts_check_timer);
            autoLoad();
        }
    },100);

});

function saveGrid() {
    
    // JSON文字列
    var saveText = $("#importexport").val();
    
    // ローカルストレージに保存
    localStorage.setItem("ts_save", saveText);
}

function autoLoad() {
    // ローカルストレージを確認
    var saveText = localStorage.getItem("ts_save");
    if (saveText) {
        // 保存データがあれば自動ロード
        $("#importexport").val(saveText);
        importGrid();
    }
}

このadd.jsをvisualizer.htmlで読み込みます。
では、実際の動作を確認していきます。

まずは、適当にTownStarVisualizerで町を作ります。

そして、「Save」ボタンをクリック。
ここで、ローカルストレージを確認します。

「ts_save」というキーでJSON(町情報)が確認できます。
このデータがある限り、ブラウザを閉じても町を再現できます。

なお、データの初期化をしたい場合はローカルストレージから値を削除します。
もしくは、次の機能によりマップを切り替えて保存し直すだけです。

今回の機能追加により、Town Starをより効率よくプレイできるでしょう。
ただ、「Save」ボタンを毎回押すのは面倒に感じるかもしれません。
忘れたりする可能性もありますからね。

もちろん、自動Saveは可能です。
自動Saveに関しては、この記事に需要があれば別記事にして公開します。

タイトルとURLをコピーしました