generated from nhcarrigan/template
chore: smaller commits
This commit is contained in:
116
js/plugins/TextPicture.js
Normal file
116
js/plugins/TextPicture.js
Normal file
@ -0,0 +1,116 @@
|
||||
//=============================================================================
|
||||
// RPG Maker MZ - Text Picture
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Displays text as a picture.
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help TextPicture.js
|
||||
*
|
||||
* This plugin provides a command to show text as a picture.
|
||||
*
|
||||
* Use it in the following procedure.
|
||||
* 1. Call the plugin command "Set Text Picture".
|
||||
* 2. Execute "Show Picture" without specifying an image.
|
||||
*
|
||||
* @command set
|
||||
* @text Set Text Picture
|
||||
* @desc Sets text to display as a picture.
|
||||
* After this, execute "Show Picture" without specifying an image.
|
||||
*
|
||||
* @arg text
|
||||
* @type multiline_string
|
||||
* @text Text
|
||||
* @desc Text to display as a picture.
|
||||
* Control characters are allowed.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc テキストをピクチャとして表示します。
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help TextPicture.js
|
||||
*
|
||||
* このプラグインは、テキストをピクチャとして表示するコマンドを提供します。
|
||||
*
|
||||
* 次の手順で使用してください。
|
||||
* 1. プラグインコマンド「テキストピクチャの設定」を呼び出します。
|
||||
* 2. 画像を指定せずに「ピクチャの表示」を実行します。
|
||||
*
|
||||
* @command set
|
||||
* @text テキストピクチャの設定
|
||||
* @desc ピクチャとして表示するテキストを設定します。
|
||||
* この後、画像を指定せずに「ピクチャの表示」を実行してください。
|
||||
*
|
||||
* @arg text
|
||||
* @type multiline_string
|
||||
* @text テキスト
|
||||
* @desc ピクチャとして表示するテキストです。
|
||||
* 制御文字が使用可能です。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
const pluginName = "TextPicture";
|
||||
let textPictureText = "";
|
||||
|
||||
PluginManager.registerCommand(pluginName, "set", args => {
|
||||
textPictureText = String(args.text);
|
||||
});
|
||||
|
||||
const _Game_Picture_show = Game_Picture.prototype.show;
|
||||
Game_Picture.prototype.show = function() {
|
||||
_Game_Picture_show.apply(this, arguments);
|
||||
if (this._name === "" && textPictureText) {
|
||||
this.mzkp_text = textPictureText;
|
||||
this.mzkp_textChanged = true;
|
||||
textPictureText = "";
|
||||
}
|
||||
};
|
||||
|
||||
const _Sprite_Picture_destroy = Sprite_Picture.prototype.destroy;
|
||||
Sprite_Picture.prototype.destroy = function() {
|
||||
destroyTextPictureBitmap(this.bitmap);
|
||||
_Sprite_Picture_destroy.apply(this, arguments);
|
||||
};
|
||||
|
||||
const _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
|
||||
Sprite_Picture.prototype.updateBitmap = function() {
|
||||
_Sprite_Picture_updateBitmap.apply(this, arguments);
|
||||
if (this.visible && this._pictureName === "") {
|
||||
const picture = this.picture();
|
||||
const text = picture ? picture.mzkp_text || "" : "";
|
||||
const textChanged = picture && picture.mzkp_textChanged;
|
||||
if (this.mzkp_text !== text || textChanged) {
|
||||
this.mzkp_text = text;
|
||||
destroyTextPictureBitmap(this.bitmap);
|
||||
this.bitmap = createTextPictureBitmap(text);
|
||||
picture.mzkp_textChanged = false;
|
||||
}
|
||||
} else {
|
||||
this.mzkp_text = "";
|
||||
}
|
||||
};
|
||||
|
||||
function createTextPictureBitmap(text) {
|
||||
const tempWindow = new Window_Base(new Rectangle());
|
||||
const size = tempWindow.textSizeEx(text);
|
||||
tempWindow.padding = 0;
|
||||
tempWindow.move(0, 0, size.width, size.height);
|
||||
tempWindow.createContents();
|
||||
tempWindow.drawTextEx(text, 0, 0, 0);
|
||||
const bitmap = tempWindow.contents;
|
||||
tempWindow.contents = null;
|
||||
tempWindow.destroy();
|
||||
bitmap.mzkp_isTextPicture = true;
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
function destroyTextPictureBitmap(bitmap) {
|
||||
if (bitmap && bitmap.mzkp_isTextPicture) {
|
||||
bitmap.destroy();
|
||||
}
|
||||
}
|
||||
})();
|
Reference in New Issue
Block a user