106 lines
3.6 KiB
JavaScript
106 lines
3.6 KiB
JavaScript
//=============================================================================
|
|
// RPG Maker MZ - FontDictionary
|
|
//
|
|
// Copyright 2024 Panzer-IV. All rights reserved.
|
|
// This source code or any portion thereof must not be
|
|
// reproduced or used without licensed in any manner whatsoever.
|
|
//=============================================================================
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc フォント保持クラス
|
|
* @author 四号戦車
|
|
* @base PluginCommonBase
|
|
* @orderAfter PluginCommonBase
|
|
*
|
|
* @param fontName
|
|
* @text フォントのファイル名
|
|
* @desc ロードするフォント名
|
|
* @type string[]
|
|
* @default []
|
|
*
|
|
* @help FontDictionary.js
|
|
*
|
|
* Version: 0.0.2
|
|
*
|
|
* 各プラグインでフォントを扱うための拡張クラスです。
|
|
*
|
|
*/
|
|
(() => {
|
|
"use strict";
|
|
|
|
const pluginName = "FontDictionary";
|
|
const script = document.currentScript;
|
|
const param = PluginManagerEx.createParameter(script);
|
|
|
|
/********************************************************************************************************
|
|
* 共有基盤
|
|
********************************************************************************************************/
|
|
// デバッグ判定
|
|
const log = (text) => {
|
|
if (DebugSwitch.isEnable()) {
|
|
console.log(text);
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// Fontのロード
|
|
//========================================================================
|
|
const _Game_System_initialize = Game_System.prototype.initialize;
|
|
Game_System.prototype.initialize = function() {
|
|
_Game_System_initialize.apply(this, arguments);
|
|
this.fontDictionary = new FontDictionary();
|
|
};
|
|
|
|
//========================================================================
|
|
// FontManager拡張
|
|
//========================================================================
|
|
const load = async (family, filename, callback) => {
|
|
const url = FontManager.makeUrl(filename);
|
|
const source = "url(" + url + ")";
|
|
const font = new FontFace(family, source);
|
|
FontManager._urls[family] = url;
|
|
FontManager._states[family] = "loading";
|
|
font.load()
|
|
.then(() => {
|
|
document.fonts.add(font);
|
|
FontManager._states[family] = "loaded";
|
|
!!callback && callback();
|
|
return 0;
|
|
})
|
|
.catch(() => {
|
|
FontManager._states[family] = "error";
|
|
});
|
|
};
|
|
|
|
const extractExtension = (path) => {
|
|
const fileName = Utils.extractFileName(path) ;
|
|
const segments = fileName.split('.');
|
|
if (segments.length > 3) {
|
|
return segments.slice(segments.length - 1).join('.');
|
|
} else {
|
|
return segments[0];
|
|
}
|
|
}
|
|
|
|
class FontDictionary {
|
|
constructor() {
|
|
this.isReady = false;
|
|
param.fontName.forEach(file => {
|
|
const family = extractExtension(file);
|
|
|
|
if (FontManager._states[family] !== "loaded") {
|
|
load(family, file, () => {
|
|
log(`Font Loaded: ${family}`);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
getFonts() {
|
|
return Object.keys(FontManager._states).filter(family => {
|
|
return FontManager._states[family] === 'loaded';
|
|
});
|
|
}
|
|
};
|
|
window.FontDictionary = FontDictionary;
|
|
})();
|