//=============================================================================
// FontLoad.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2019/09/15 パラメータの型指定機能に対応
// 1.1.0 2017/03/11 本体v1.3.5(コミュニティ版)で機能しなくなる問題を修正
// 1.0.0 2016/06/02 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Font Load
 * @author triacontane
 *
 * @param FontName1
 * @desc Font name
 * @default
 *
 * @param FontUrl1
 * @desc Font file path. ex：fonts/XXX.ttf
 * @default
 *
 * @param FontName2
 * @desc Font name
 * @default
 *
 * @param FontUrl2
 * @desc Font file path. ex：fonts/XXX.ttf
 * @default
 *
 * @param FontName3
 * @desc Font name
 * @default
 *
 * @param FontUrl3
 * @desc Font file path. ex：fonts/XXX.ttf
 * @default
 *
 * @param WaitLoadComplete
 * @desc Wait until load complete
 * @default false
 * @type boolean
 *
 * @help Loading font file at the start of the game.
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc フォントロードプラグイン
 * @author トリアコンタン
 *
 * @param フォント名1
 * @desc 任意のフォント名
 * @default
 *
 * @param フォントURL1
 * @desc フォントファイルパスです。例：fonts/XXX.ttf
 * @default
 *
 * @param フォント名2
 * @desc 任意のフォント名
 * @default
 *
 * @param フォントURL2
 * @desc フォントファイルパスです。例：fonts/XXX.ttf
 * @default
 *
 * @param フォント名3
 * @desc 任意のフォント名
 * @default
 *
 * @param フォントURL3
 * @desc フォントファイルパスです。例：fonts/XXX.ttf
 * @default
 *
 * @param ロード完了まで待機
 * @desc フォントのロードが完了してからゲームを開始します。
 * @default false
 * @type boolean
 *
 * @help 指定したURLのフォントを指定した名前でロードします。
 * ロードするだけなので、基本的には他のプラグインやスクリプトと
 * 組み合わせて使用します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var pluginName = "FontLoad";

  var getParamOther = function (paramNames) {
    if (!Array.isArray(paramNames)) paramNames = [paramNames];
    for (var i = 0; i < paramNames.length; i++) {
      var name = PluginManager.parameters(pluginName)[paramNames[i]];
      if (name) return name;
    }
    return null;
  };

  var getParamString = function (paramNames) {
    var value = getParamOther(paramNames);
    return value === null ? "" : value;
  };

  var getParamBoolean = function (paramNames) {
    var value = (getParamOther(paramNames) || "").toUpperCase();
    return value === "ON" || value === "TRUE";
  };

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var paramFonts = [],
    idString;
  for (var i = 1; i <= 3; i++) {
    idString = String(i);
    paramFonts[i] = {};
    paramFonts[i].url = getParamString([
      "FontUrl" + idString,
      "フォントURL" + idString,
    ]);
    paramFonts[i].name = getParamString([
      "FontName" + idString,
      "フォント名" + idString,
    ]);
  }
  var paramWaitLoadComplete = getParamBoolean([
    "WaitLoadComplete",
    "ロード完了まで待機",
  ]);

  //=============================================================================
  // Scene_Boot
  //  必要なフォントをロードします。
  //=============================================================================
  var _Scene_Boot_isGameFontLoaded = Scene_Boot.prototype.isGameFontLoaded;
  Scene_Boot.prototype.isGameFontLoaded = function () {
    if (!_Scene_Boot_isGameFontLoaded.apply(this)) {
      return false;
    }
    if (!this._customFontLoading) {
      this.loadCustomFonts();
    }
    return this.isCustomFontLoaded();
  };

  Scene_Boot.prototype.loadCustomFonts = function () {
    paramFonts.forEach(
      function (fontInfo) {
        if (fontInfo.name && fontInfo.url) {
          Graphics.loadFont(fontInfo.name, fontInfo.url);
        }
      }.bind(this)
    );
    this._customFontLoading = true;
  };

  Scene_Boot.prototype.isCustomFontLoaded = function () {
    return (
      !paramWaitLoadComplete ||
      paramFonts.every(
        function (fontInfo) {
          return (
            !fontInfo.name ||
            !fontInfo.url ||
            Graphics.isFontLoaded(fontInfo.name)
          );
        }.bind(this)
      )
    );
  };
})();
