827 lines
37 KiB
JavaScript
827 lines
37 KiB
JavaScript
// (C) 2015 Triacontane
|
|
// http://opensource.org/licenses/mit-license.php
|
|
// 1.10.1 2018/05/30 アウトラインカラー取得で0およびその他の文字列を指定したときに正しく色が設定されない問題を修正(by奏ねこまさん)
|
|
// [Blog] : https://triacontane.blogspot.jp/
|
|
// [Twitter]: https://twitter.com/triacontane/
|
|
// [GitHub] : https://github.com/triacontane/
|
|
/*:
|
|
* @plugindesc
|
|
* @author トリアコンタン
|
|
*
|
|
* @param itemIconSwitchId
|
|
* @text アイテムアイコンスイッチID
|
|
* @desc 指定した番号のスイッチがONのとき\ITEM[n]でアイコンが表示されます。指定しない場合、常に表示されます。
|
|
* @default 0
|
|
* @type switch
|
|
*
|
|
* @help
|
|
*/
|
|
let DText_NRZureX = 0;
|
|
let DText_NRZureY = 0;
|
|
(function() {
|
|
'use strict';
|
|
var getCommandName = function(command) {
|
|
return (command || '').toUpperCase();
|
|
};
|
|
var getArgNumber = function(arg, min, max) {
|
|
if (arguments.length < 2) min = -Infinity;
|
|
if (arguments.length < 3) max = Infinity;
|
|
return (parseInt(convertEscapeCharacters(arg.toString())) || 0).clamp(min, max);
|
|
};
|
|
var getArgString = function(arg, upperFlg) {
|
|
arg = convertEscapeCharacters(arg);
|
|
return upperFlg ? arg.toUpperCase() : arg;
|
|
};
|
|
var getArgBoolean = function(arg) {
|
|
return (arg || '').toUpperCase() === 'ON';
|
|
};
|
|
var connectArgs = function(args, startIndex, endIndex) {
|
|
if (arguments.length < 2) startIndex = 0;
|
|
if (arguments.length < 3) endIndex = args.length;
|
|
var text = '';
|
|
for (var i = startIndex; i < endIndex; i++) {
|
|
text += args[i];
|
|
if (i < endIndex - 1) text += ' ';
|
|
}
|
|
return text;
|
|
};
|
|
var convertEscapeCharacters = function(text) {
|
|
if (text === undefined || text === null) text = '';
|
|
var window = SceneManager.getHiddenWindow();
|
|
return window ? window.convertEscapeCharacters(text) : text;
|
|
};
|
|
var getUsingVariables = function(text) {
|
|
var usingVariables = [];
|
|
text = text.replace(/\\/g, '\x1b');
|
|
text = text.replace(/\x1b\x1b/g, '\\');
|
|
text = text.replace(/\x1bV\[(\d+),\s*(\d+)]/gi, function() {
|
|
var number = parseInt(arguments[1], 10);
|
|
usingVariables.push(number);
|
|
return $gameVariables.value(number);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bV\[(\d+)]/gi, function() {
|
|
var number = parseInt(arguments[1], 10);
|
|
usingVariables.push(number);
|
|
return $gameVariables.value(number);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bV\[(\d+)]/gi, function() {
|
|
var number = parseInt(arguments[1], 10);
|
|
usingVariables.push(number);
|
|
return $gameVariables.value(number);
|
|
}.bind(this));
|
|
return usingVariables;
|
|
};
|
|
/**
|
|
* Create plugin parameter. param[paramName] ex. param.commandPrefix
|
|
* @param pluginName plugin name(EncounterSwitchConditions)
|
|
* @returns {Object} Created parameter
|
|
*/
|
|
var createPluginParameter = function(pluginName) {
|
|
var paramReplacer = function(key, value) {
|
|
if (value === 'null') {
|
|
return value;
|
|
}
|
|
if (value[0] === '"' && value[value.length - 1] === '"') {
|
|
return value;
|
|
}
|
|
try {
|
|
return JSON.parse(value);
|
|
} catch (e) {
|
|
return value;
|
|
}
|
|
};
|
|
var parameter = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
|
|
PluginManager.setParameters(pluginName, parameter);
|
|
return parameter;
|
|
};
|
|
var textDecParam = createPluginParameter('TextDecoration');
|
|
var param = createPluginParameter('JsScript22Set');
|
|
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
_Game_Interpreter_pluginCommand.apply(this, arguments);
|
|
this.pluginCommandDTextPicture(command, args);
|
|
};
|
|
Game_Interpreter.textAlignMapper = {
|
|
LEFT: 0, CENTER: 1, RIGHT: 2, 左: 0, 中央: 1, 右: 2
|
|
};
|
|
Game_Interpreter.prototype.pluginCommandDTextPicture = function(command, args) {
|
|
switch (getCommandName(command)) {
|
|
case 'D_TEXT' :
|
|
if (isNaN(args[args.length - 1]) || args.length === 1) args.push($gameScreen.dTextSize || 28);
|
|
var fontSize = getArgNumber(args.pop());
|
|
$gameScreen.setDTextPicture(connectArgs(args), fontSize);
|
|
break;
|
|
case 'D_TEXT_SETTING':
|
|
switch (getCommandName(args[0])) {
|
|
case 'ALIGN' :
|
|
$gameScreen.dTextAlign = isNaN(args[1]) ?
|
|
Game_Interpreter.textAlignMapper[getArgString(args[1], true)] : getArgNumber(args[1], 0, 2);
|
|
break;
|
|
case 'BG_COLOR' :
|
|
$gameScreen.dTextBackColor = getArgString(connectArgs(args, 1));
|
|
break;
|
|
case 'BG_GRADATION_LEFT' :
|
|
$gameScreen.dTextGradationLeft = getArgNumber(args[1], 0);
|
|
break;
|
|
case 'BG_GRADATION_RIGHT' :
|
|
$gameScreen.dTextGradationRight = getArgNumber(args[1], 0);
|
|
break;
|
|
case 'FONT':
|
|
args.shift();
|
|
$gameScreen.setDtextFont(getArgString(connectArgs(args)));
|
|
break;
|
|
case 'REAL_TIME' :
|
|
$gameScreen.dTextRealTime = getArgBoolean(args[1]);
|
|
break;
|
|
case 'WINDOW':
|
|
$gameScreen.dWindowFrame = getArgBoolean(args[1]);
|
|
break;
|
|
}
|
|
break;
|
|
case 'D_TEXT_WINDOW_CURSOR' :
|
|
var windowRect = null;
|
|
if (getArgBoolean(args[1])) {
|
|
windowRect = {
|
|
x : getArgNumber(args[3] || '', 0),
|
|
y : getArgNumber(args[4] || '', 0),
|
|
width : getArgNumber(args[5] || '', 0),
|
|
height: getArgNumber(args[6] || '', 0)
|
|
};
|
|
}
|
|
$gameScreen.setDTextWindowCursor(getArgNumber(args[0], 0), windowRect);
|
|
break;
|
|
case 'D_TEXT_WINDOW_CURSOR_ACTIVE' :
|
|
$gameScreen.setDTextWindowCursorActive(getArgNumber(args[0], 0), getArgBoolean(args[1]));
|
|
break;
|
|
}
|
|
};
|
|
var _Game_Variables_setValue = Game_Variables.prototype.setValue;
|
|
Game_Variables.prototype.setValue = function(variableId, value) {
|
|
variableId = parseInt(variableId);
|
|
if (this.value(variableId) !== value) {
|
|
this._changedVariables = this.getChangedVariables();
|
|
if (!this._changedVariables.contains(variableId)) {
|
|
this._changedVariables.push(variableId);
|
|
}
|
|
}
|
|
_Game_Variables_setValue.apply(this, arguments);
|
|
};
|
|
Game_Variables.prototype.getChangedVariables = function() {
|
|
return this._changedVariables || [];
|
|
};
|
|
Game_Variables.prototype.clearChangedVariables = function() {
|
|
return this._changedVariables = [];
|
|
};
|
|
var _Game_Screen_clear = Game_Screen.prototype.clear;
|
|
Game_Screen.prototype.clear = function() {
|
|
_Game_Screen_clear.call(this);
|
|
this.clearDTextPicture();
|
|
};
|
|
Game_Screen.prototype.clearDTextPicture = function() {
|
|
this.dTextValue = null;
|
|
this.dTextOriginal = null;
|
|
this.dTextRealTime = null;
|
|
this.dTextSize = 0;
|
|
this.dTextAlign = 0;
|
|
this.dTextBackColor = null;
|
|
this.dTextFont = null;
|
|
this.dUsingVariables = null;
|
|
this.dWindowFrame = null;
|
|
this.dTextGradationRight = 0;
|
|
this.dTextGradationLeft = 0;
|
|
};
|
|
Game_Screen.prototype.setDTextPicture = function(value, size) {
|
|
if (typeof TranslationManager !== 'undefined') {
|
|
TranslationManager.translateIfNeed(value, function(translatedText) {
|
|
value = translatedText;
|
|
});
|
|
}
|
|
this.dUsingVariables = (this.dUsingVariables || []).concat(getUsingVariables(value));
|
|
this.dTextValue = (this.dTextValue || '') + getArgString(value, false) + '\n';
|
|
this.dTextOriginal = (this.dTextOriginal || '') + value + '\n';
|
|
this.dTextSize = size;
|
|
this.DText_NRZureX = DText_NRZureX;
|
|
this.DText_NRZureY = DText_NRZureY;
|
|
};
|
|
Game_Screen.prototype.setDTextWindowCursor = function(pictureId, rect) {
|
|
var picture = this.picture(pictureId);
|
|
if (picture) {
|
|
picture.setWindowCursor(rect);
|
|
picture.setWindowCursorActive(true);
|
|
}
|
|
};
|
|
Game_Screen.prototype.setDTextWindowCursorActive = function(pictureId, value) {
|
|
var picture = this.picture(pictureId);
|
|
if (picture) {
|
|
picture.setWindowCursorActive(value);
|
|
}
|
|
};
|
|
Game_Screen.prototype.getDTextPictureInfo = function() {
|
|
return {
|
|
value : this.dTextValue,
|
|
size : this.dTextSize || 0,
|
|
align : this.dTextAlign || 0,
|
|
color : this.dTextBackColor,
|
|
font : this.dTextFont,
|
|
usingVariables: this.dUsingVariables,
|
|
realTime : this.dTextRealTime,
|
|
originalValue : this.dTextOriginal,
|
|
windowFrame : this.dWindowFrame,
|
|
gradationLeft : this.dTextGradationLeft,
|
|
gradationRight: this.dTextGradationRight,
|
|
DText_NRZureX: this.DText_NRZureX,
|
|
DText_NRZureY: this.DText_NRZureY,
|
|
};
|
|
};
|
|
Game_Screen.prototype.isSettingDText = function() {
|
|
return !!this.dTextValue;
|
|
};
|
|
Game_Screen.prototype.setDtextFont = function(name) {
|
|
this.dTextFont = name;
|
|
};
|
|
var _Game_Screen_updatePictures = Game_Screen.prototype.updatePictures;
|
|
Game_Screen.prototype.updatePictures = function() {
|
|
_Game_Screen_updatePictures.apply(this, arguments);
|
|
$gameVariables.clearChangedVariables();
|
|
};
|
|
var _Game_Picture_initBasic = Game_Picture.prototype.initBasic;
|
|
Game_Picture.prototype.initBasic = function() {
|
|
_Game_Picture_initBasic.call(this);
|
|
this.dTextValue = null;
|
|
this.dTextInfo = null;
|
|
};
|
|
var _Game_Picture_show = Game_Picture.prototype.show;
|
|
Game_Picture.prototype.show = function(name, origin, x, y, scaleX,
|
|
scaleY, opacity, blendMode) {
|
|
if ($gameScreen.isSettingDText() && !name) {
|
|
arguments[0] = "DTextPicture::" + Date.now().toString();
|
|
this.dTextInfo = $gameScreen.getDTextPictureInfo();
|
|
$gameScreen.clearDTextPicture();
|
|
} else {
|
|
this.dTextInfo = null;
|
|
}
|
|
_Game_Picture_show.apply(this, arguments);
|
|
};
|
|
var _Game_Picture_update = Game_Picture.prototype.update;
|
|
Game_Picture.prototype.update = function() {
|
|
_Game_Picture_update.apply(this, arguments);
|
|
if (this.dTextInfo && this.dTextInfo.realTime) {
|
|
this.updateDTextVariable();
|
|
}
|
|
};
|
|
Game_Picture.prototype.updateDTextVariable = function() {
|
|
$gameVariables.getChangedVariables().forEach(function(variableId) {
|
|
if (this.dTextInfo.usingVariables.contains(variableId)) {
|
|
this._name = "DTextPicture::" + Date.now().toString();
|
|
this.dTextInfo.value = getArgString(this.dTextInfo.originalValue, false);
|
|
}
|
|
}, this);
|
|
};
|
|
Game_Picture.prototype.setWindowCursor = function(rect) {
|
|
this._windowCursor = rect;
|
|
};
|
|
Game_Picture.prototype.getWindowCursor = function() {
|
|
return this._windowCursor;
|
|
};
|
|
Game_Picture.prototype.setWindowCursorActive = function(value) {
|
|
this._windowCursorActive = value;
|
|
};
|
|
Game_Picture.prototype.getWindowCursorActive = function() {
|
|
return this._windowCursorActive;
|
|
};
|
|
SceneManager.getHiddenWindow = function() {
|
|
if (!this._hiddenWindow) {
|
|
this._hiddenWindow = new Window_Hidden(1, 1, 1, 1);
|
|
}
|
|
return this._hiddenWindow;
|
|
};
|
|
SceneManager.getSpriteset = function() {
|
|
return this._scene._spriteset;
|
|
};
|
|
var _Window_Base_convertEscapeCharacters = Window_Base.prototype.convertEscapeCharacters;
|
|
Window_Base.prototype.convertEscapeCharacters = function(text) {
|
|
text = _Window_Base_convertEscapeCharacters.call(this, text);
|
|
text = text.replace(/\x1bV\[(\d+),\s*(\d+)]/gi, function() {
|
|
return this.getVariablePadZero($gameVariables.value(parseInt(arguments[1], 10)), arguments[2]);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bITEM\[(\d+)]/gi, function() {
|
|
var item = $dataItems[getArgNumber(arguments[1], 1, $dataItems.length)];
|
|
return this.getItemInfoText(item);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bWEAPON\[(\d+)]/gi, function() {
|
|
var item = $dataWeapons[getArgNumber(arguments[1], 1, $dataWeapons.length)];
|
|
return this.getItemInfoText(item);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bJOB\[(\d+)]/gi, function() {
|
|
var item = $dataClasses[getArgNumber(arguments[1], 1, $dataClasses.length)];
|
|
return item.name;
|
|
}.bind(this));
|
|
text = text.replace(/\x1bARMOR\[(\d+)]/gi, function() {
|
|
var item = $dataArmors[getArgNumber(arguments[1], 1, $dataArmors.length)];
|
|
return this.getItemInfoText(item);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bSKILL\[(\d+)]/gi, function() {
|
|
var item = $dataSkills[getArgNumber(arguments[1], 1, $dataSkills.length)];
|
|
return this.getItemInfoText(item);
|
|
}.bind(this));
|
|
text = text.replace(/\x1bSTATE\[(\d+)]/gi, function() {
|
|
var item = $dataStates[getArgNumber(arguments[1], 1, $dataStates.length)];
|
|
return this.getItemInfoText(item);
|
|
}.bind(this));
|
|
return text;
|
|
};
|
|
Window_Base.prototype.getItemInfoText = function(item) {
|
|
if (!item) {
|
|
return '';
|
|
}
|
|
return (this.isValidDTextIconSwitch() ? '\x1bi[' + item.iconIndex + ']' : '') + item.name;
|
|
};
|
|
Window_Base.prototype.isValidDTextIconSwitch = function() {
|
|
return !param.itemIconSwitchId || $gameSwitches.value(param.itemIconSwitchId);
|
|
};
|
|
Window_Base.prototype.getVariablePadZero = function(value, digit) {
|
|
return (value < 0 ? '-' : '') + Math.abs(value).padZero(digit);
|
|
};
|
|
var _Sprite_Picture_update = Sprite_Picture.prototype.update;
|
|
Sprite_Picture.prototype.update = function() {
|
|
_Sprite_Picture_update.apply(this, arguments);
|
|
if (this._frameWindow) {
|
|
this.updateFrameWindow();
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.updateFrameWindow = function() {
|
|
var padding = this._frameWindow.standardPadding();
|
|
this._frameWindow.x = this.x - (this.anchor.x * this.width * this.scale.x) - padding;
|
|
this._frameWindow.y = this.y - (this.anchor.y * this.height * this.scale.y) - padding;
|
|
this._frameWindow.opacity = this.opacity;
|
|
if (!this.visible) {
|
|
this.removeFrameWindow();
|
|
return;
|
|
}
|
|
if (!this._addFrameWindow) {
|
|
this.addFrameWindow();
|
|
}
|
|
if (Graphics.frameCount % 2 === 0) {
|
|
this.adjustScaleFrameWindow();
|
|
}
|
|
this.updateFrameWindowCursor();
|
|
};
|
|
Sprite_Picture.prototype.updateFrameWindowCursor = function() {
|
|
var picture = this.picture();
|
|
if (!picture) {
|
|
return;
|
|
}
|
|
var rect = picture.getWindowCursor();
|
|
if (rect) {
|
|
var width = rect.width || this._frameWindow.contentsWidth();
|
|
var height = rect.width || this._frameWindow.contentsHeight();
|
|
this._frameWindow.setCursorRect(0, 0, width, height);
|
|
this._frameWindow.active = picture.getWindowCursorActive();
|
|
} else {
|
|
this._frameWindow.setCursorRect(0, 0, 0, 0);
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.adjustScaleFrameWindow = function() {
|
|
var padding = this._frameWindow.standardPadding();
|
|
var newFrameWidth = Math.floor(this.width * this.scale.x + padding * 2);
|
|
var newFrameHeight = Math.floor(this.height * this.scale.x + padding * 2);
|
|
if (this._frameWindow.width !== newFrameWidth || this._frameWindow.height !== newFrameHeight) {
|
|
this._frameWindow.move(this._frameWindow.x, this._frameWindow.y, newFrameWidth, newFrameHeight);
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.addFrameWindow = function() {
|
|
var parent = this.parent;
|
|
if (parent) {
|
|
var index = parent.getChildIndex(this);
|
|
parent.addChildAt(this._frameWindow, index);
|
|
this._addFrameWindow = true;
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.removeFrameWindow = function() {
|
|
var parent = this.parent;
|
|
if (parent) {
|
|
parent.removeChild(this._frameWindow);
|
|
this._frameWindow = null;
|
|
this._addFrameWindow = false;
|
|
}
|
|
};
|
|
var _Sprite_Picture_loadBitmap = Sprite_Picture.prototype.loadBitmap;
|
|
Sprite_Picture.prototype.loadBitmap = function() {
|
|
this.dTextInfo = this.picture().dTextInfo;
|
|
if (this.dTextInfo) {
|
|
this.makeDynamicBitmap();
|
|
} else {
|
|
_Sprite_Picture_loadBitmap.apply(this, arguments);
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.makeDynamicBitmap = function() {
|
|
this.textWidths = [];
|
|
this.hiddenWindow = SceneManager.getHiddenWindow();
|
|
this.hiddenWindow.resetFontSettings(this.dTextInfo);
|
|
var bitmapVirtual = new Bitmap_Virtual();
|
|
this._processText(bitmapVirtual);
|
|
this.hiddenWindow.resetFontSettings(this.dTextInfo);
|
|
this.bitmap = new Bitmap(bitmapVirtual.width, bitmapVirtual.height);
|
|
this.applyTextDecoration();
|
|
this.bitmap.fontFace = this.hiddenWindow.contents.fontFace;
|
|
if (this.dTextInfo.color) {
|
|
this.bitmap.fillAll(this.dTextInfo.color);
|
|
var h = this.bitmap.height;
|
|
var w = this.bitmap.width;
|
|
var gradationLeft = this.dTextInfo.gradationLeft;
|
|
if (gradationLeft > 0) {
|
|
this.bitmap.clearRect(0, 0, gradationLeft, h);
|
|
this.bitmap.gradientFillRect(0, 0, gradationLeft, h, 'rgba(0, 0, 0, 0)', this.dTextInfo.color, false);
|
|
}
|
|
var gradationRight = this.dTextInfo.gradationRight;
|
|
if (gradationRight > 0) {
|
|
this.bitmap.clearRect(w - gradationRight, 0, gradationRight, h);
|
|
this.bitmap.gradientFillRect(w - gradationRight, 0, gradationRight, h, this.dTextInfo.color, 'rgba(0, 0, 0, 0)', false);
|
|
}
|
|
}
|
|
this._processText(this.bitmap);
|
|
this._colorTone = [0, 0, 0, 0];
|
|
if (this._frameWindow) {
|
|
this.removeFrameWindow();
|
|
}
|
|
if (this.dTextInfo.windowFrame) {
|
|
var scaleX = this.picture().scaleX() / 100;
|
|
var scaleY = this.picture().scaleY() / 100;
|
|
this.makeFrameWindow(bitmapVirtual.width * scaleX, bitmapVirtual.height * scaleY);
|
|
}
|
|
this.hiddenWindow = null;
|
|
};
|
|
Sprite_Picture.prototype.applyTextDecoration = function() {
|
|
if (textDecParam.Mode >= 0) {
|
|
this.bitmap.outlineColor =
|
|
'rgba(%1,%2,%3,%4)'.format(textDecParam.Red, textDecParam.Green, textDecParam.Blue, textDecParam.Alpha / 255);
|
|
this.bitmap.decorationMode = textDecParam.Mode;
|
|
}
|
|
};
|
|
Sprite_Picture.prototype.makeFrameWindow = function(width, height) {
|
|
var padding = this.hiddenWindow.standardPadding();
|
|
this._frameWindow = new Window_Base(0, 0, width + padding * 2, height + padding * 2);
|
|
};
|
|
Sprite_Picture.prototype._processText = function(bitmap) {
|
|
var textState = {index: 0, x: 0, y: 0, text: this.dTextInfo.value, left: 0, line: -1, height: 0};
|
|
this._processNewLine(textState, bitmap);
|
|
textState.height = this.hiddenWindow.calcTextHeight(textState, false);
|
|
textState.index = 0;
|
|
while (textState.text[textState.index]) {
|
|
this._processCharacter(textState, bitmap);
|
|
}
|
|
};
|
|
Sprite_Picture.prototype._processCharacter = function(textState, bitmap) {
|
|
if (textState.text[textState.index] === '\x1b') {
|
|
var code = this.hiddenWindow.obtainEscapeCode(textState);
|
|
switch (code) {
|
|
case 'C':
|
|
bitmap.textColor = this.hiddenWindow.textColor(this.hiddenWindow.obtainEscapeParam(textState));
|
|
break;
|
|
case 'I':
|
|
this._processDrawIcon(this.hiddenWindow.obtainEscapeParam(textState), textState, bitmap , this.dTextInfo.DText_NRZureX);
|
|
break;
|
|
case '{':
|
|
this.hiddenWindow.makeFontBigger();
|
|
break;
|
|
case '}':
|
|
this.hiddenWindow.makeFontSmaller();
|
|
break;
|
|
case 'F':
|
|
switch (this.hiddenWindow.obtainEscapeParamString(textState).toUpperCase()) {
|
|
case 'I':
|
|
bitmap.fontItalic = true;
|
|
break;
|
|
case 'B':
|
|
bitmap.fontBoldFotDtext = true;
|
|
break;
|
|
case '/':
|
|
case 'N':
|
|
bitmap.fontItalic = false;
|
|
bitmap.fontBoldFotDtext = false;
|
|
break;
|
|
}
|
|
break;
|
|
case 'OC':
|
|
var colorCode = this.hiddenWindow.obtainEscapeParamString(textState);
|
|
var colorIndex = Number(colorCode);
|
|
if (!isNaN(colorIndex)) {
|
|
bitmap.outlineColor = this.hiddenWindow.textColor(colorIndex);
|
|
} else {
|
|
bitmap.outlineColor = colorCode;
|
|
}
|
|
break;
|
|
case 'OW':
|
|
bitmap.outlineWidth = this.hiddenWindow.obtainEscapeParam(textState);
|
|
break;
|
|
}
|
|
} else if (textState.text[textState.index] === '\n') {
|
|
this._processNewLine(textState, bitmap);
|
|
} else {
|
|
var c = textState.text[textState.index++];
|
|
var w = this.hiddenWindow.textWidth(c);
|
|
bitmap.fontSize = this.hiddenWindow.contents.fontSize;
|
|
if(textState.x == 0) {
|
|
if(this.dTextInfo != null) {
|
|
textState.height += (this.dTextInfo.DText_NRZureY);
|
|
}
|
|
}
|
|
bitmap.drawText(c, textState.x, textState.y, w * 2, textState.height, 'left');
|
|
if(this.dTextInfo != null) {
|
|
textState.x += this.dTextInfo.DText_NRZureX;
|
|
}
|
|
textState.x += w;
|
|
}
|
|
};
|
|
Sprite_Picture.prototype._processNewLine = function(textState, bitmap) {
|
|
if (bitmap instanceof Bitmap_Virtual)
|
|
this.textWidths[textState.line] = textState.x;
|
|
this.hiddenWindow.processNewLine(textState);
|
|
textState.line++;
|
|
if (bitmap instanceof Bitmap)
|
|
textState.x = (bitmap.width - this.textWidths[textState.line]) / 2 * this.dTextInfo.align;
|
|
};
|
|
Sprite_Picture.prototype._processDrawIcon = function(iconIndex, textState, bitmap , _ZureX) {
|
|
var iconBitmap = ImageManager.loadSystem('IconSet');
|
|
var pw = Window_Base._iconWidth;
|
|
var ph = Window_Base._iconHeight;
|
|
var sx = iconIndex % 16 * pw;
|
|
var sy = Math.floor(iconIndex / 16) * ph;
|
|
bitmap.blt(iconBitmap, sx, sy, pw, ph, textState.x + 2, textState.y + (textState.height - ph) / 2);
|
|
textState.x += Window_Base._iconWidth + 4 + _ZureX;
|
|
};
|
|
function Bitmap_Virtual() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Bitmap_Virtual.prototype.initialize = function() {
|
|
this.window = SceneManager.getHiddenWindow();
|
|
this.width = 0;
|
|
this.height = 0;
|
|
};
|
|
Bitmap_Virtual.prototype.drawText = function(text, x, y) {
|
|
var baseWidth = this.window.textWidth(text);
|
|
var fontSize = this.window.contents.fontSize;
|
|
if (this.fontItalic) {
|
|
baseWidth += Math.floor(fontSize / 6);
|
|
}
|
|
if (this.fontBoldFotDtext) {
|
|
baseWidth += 2;
|
|
}
|
|
this.width = Math.max(x + baseWidth, this.width);
|
|
this.height = Math.max(y + fontSize + 8, this.height);
|
|
};
|
|
Bitmap_Virtual.prototype.blt = function(source, sx, sy, sw, sh, dx, dy, dw, dh) {
|
|
this.width = Math.max(dx + (dw || sw), this.width);
|
|
this.height = Math.max(dy + (dh || sh), this.height);
|
|
};
|
|
function Window_Hidden() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Window_Hidden.prototype.backOpacity = null;
|
|
Window_Hidden.prototype = Object.create(Window_Base.prototype);
|
|
Window_Hidden.prototype.constructor = Window_Hidden;
|
|
Window_Hidden.prototype._createAllParts = function() {
|
|
this._windowBackSprite = {};
|
|
this._windowSpriteContainer = {};
|
|
this._windowContentsSprite = new Sprite();
|
|
this.addChild(this._windowContentsSprite);
|
|
};
|
|
Window_Hidden.prototype._refreshAllParts = function() {};
|
|
Window_Hidden.prototype._refreshBack = function() {};
|
|
Window_Hidden.prototype._refreshFrame = function() {};
|
|
Window_Hidden.prototype._refreshCursor = function() {};
|
|
Window_Hidden.prototype._refreshArrows = function() {};
|
|
Window_Hidden.prototype._refreshPauseSign = function() {};
|
|
Window_Hidden.prototype.updateTransform = function() {};
|
|
Window_Hidden.prototype.resetFontSettings = function(dTextInfo) {
|
|
if (dTextInfo) {
|
|
var customFont = dTextInfo.font ? dTextInfo.font + ',' : '';
|
|
this.contents.fontFace = customFont + this.standardFontFace();
|
|
this.contents.fontSize = dTextInfo.size || this.standardFontSize();
|
|
} else {
|
|
Window_Base.prototype.resetFontSettings.apply(this, arguments);
|
|
}
|
|
};
|
|
Window_Hidden.prototype.obtainEscapeParamString = function(textState) {
|
|
var arr = /^\[.+?]/.exec(textState.text.slice(textState.index));
|
|
if (arr) {
|
|
textState.index += arr[0].length;
|
|
return arr[0].substring(1, arr[0].length - 1);
|
|
} else {
|
|
return '';
|
|
}
|
|
};
|
|
var _Bitmap__makeFontNameText = Bitmap.prototype._makeFontNameText;
|
|
Bitmap.prototype._makeFontNameText = function() {
|
|
return (this.fontBoldFotDtext ? 'bold ' : '') + _Bitmap__makeFontNameText.apply(this, arguments);
|
|
};
|
|
var _NSprite_update = NSprite.prototype.update;
|
|
NSprite.prototype.update = function() {
|
|
_NSprite_update.apply(this, arguments);
|
|
if (this._frameWindow) {
|
|
this.updateFrameWindow();
|
|
}
|
|
};
|
|
NSprite.prototype.updateFrameWindow = function() {
|
|
var padding = this._frameWindow.standardPadding();
|
|
this._frameWindow.x = this.x - (this.anchor.x * this.width * this.scale.x) - padding;
|
|
this._frameWindow.y = this.y - (this.anchor.y * this.height * this.scale.y) - padding;
|
|
this._frameWindow.opacity = this.opacity;
|
|
if (!this.visible) {
|
|
this.removeFrameWindow();
|
|
return;
|
|
}
|
|
if (!this._addFrameWindow) {
|
|
this.addFrameWindow();
|
|
}
|
|
if (Graphics.frameCount % 2 === 0) {
|
|
this.adjustScaleFrameWindow();
|
|
}
|
|
this.updateFrameWindowCursor();
|
|
};
|
|
NSprite.prototype.updateFrameWindowCursor = function() {
|
|
var picture = this.picture();
|
|
if (!picture) {
|
|
return;
|
|
}
|
|
var rect = picture.getWindowCursor();
|
|
if (rect) {
|
|
var width = rect.width || this._frameWindow.contentsWidth();
|
|
var height = rect.width || this._frameWindow.contentsHeight();
|
|
this._frameWindow.setCursorRect(0, 0, width, height);
|
|
this._frameWindow.active = picture.getWindowCursorActive();
|
|
} else {
|
|
this._frameWindow.setCursorRect(0, 0, 0, 0);
|
|
}
|
|
};
|
|
NSprite.prototype.adjustScaleFrameWindow = function() {
|
|
var padding = this._frameWindow.standardPadding();
|
|
var newFrameWidth = Math.floor(this.width * this.scale.x + padding * 2);
|
|
var newFrameHeight = Math.floor(this.height * this.scale.x + padding * 2);
|
|
if (this._frameWindow.width !== newFrameWidth || this._frameWindow.height !== newFrameHeight) {
|
|
this._frameWindow.move(this._frameWindow.x, this._frameWindow.y, newFrameWidth, newFrameHeight);
|
|
}
|
|
};
|
|
NSprite.prototype.addFrameWindow = function() {
|
|
var parent = this.parent;
|
|
if (parent) {
|
|
var index = parent.getChildIndex(this);
|
|
parent.addChildAt(this._frameWindow, index);
|
|
this._addFrameWindow = true;
|
|
}
|
|
};
|
|
NSprite.prototype.removeFrameWindow = function() {
|
|
var parent = this.parent;
|
|
if (parent) {
|
|
parent.removeChild(this._frameWindow);
|
|
this._frameWindow = null;
|
|
this._addFrameWindow = false;
|
|
}
|
|
};
|
|
var _NSprite_loadBitmap = NSprite.prototype.loadBitmap;
|
|
NSprite.prototype.loadBitmap = function() {
|
|
if (_SetdTextInfo) {
|
|
this.makeDynamicBitmap();
|
|
} else {
|
|
_NSprite_loadBitmap.apply(this, arguments);
|
|
}
|
|
};
|
|
NSprite.prototype.makeDynamicBitmap = function() {
|
|
this.DText_NRZureX = DText_NRZureX;
|
|
this.DText_NRZureY = DText_NRZureY;
|
|
this.textWidths = [];
|
|
this.hiddenWindow = SceneManager.getHiddenWindow();
|
|
this.hiddenWindow.resetFontSettings(_SetdTextInfo);
|
|
var bitmapVirtual = new Bitmap_Virtual();
|
|
this._processText(bitmapVirtual);
|
|
this.hiddenWindow.resetFontSettings(_SetdTextInfo);
|
|
this.bitmap = new Bitmap(bitmapVirtual.width, bitmapVirtual.height);
|
|
this.applyTextDecoration();
|
|
this.bitmap.fontFace = this.hiddenWindow.contents.fontFace;
|
|
if (_SetdTextInfo.color) {
|
|
this.bitmap.fillAll(_SetdTextInfo.color);
|
|
var h = this.bitmap.height;
|
|
var w = this.bitmap.width;
|
|
var gradationLeft = _SetdTextInfo.gradationLeft;
|
|
if (gradationLeft > 0) {
|
|
this.bitmap.clearRect(0, 0, gradationLeft, h);
|
|
this.bitmap.gradientFillRect(0, 0, gradationLeft, h, 'rgba(0, 0, 0, 0)', _SetdTextInfo.color, false);
|
|
}
|
|
var gradationRight = _SetdTextInfo.gradationRight;
|
|
if (gradationRight > 0) {
|
|
this.bitmap.clearRect(w - gradationRight, 0, gradationRight, h);
|
|
this.bitmap.gradientFillRect(w - gradationRight, 0, gradationRight, h, _SetdTextInfo.color, 'rgba(0, 0, 0, 0)', false);
|
|
}
|
|
}
|
|
this._processText(this.bitmap);
|
|
this._colorTone = [0, 0, 0, 0];
|
|
if (this._frameWindow) {
|
|
this.removeFrameWindow();
|
|
}
|
|
if (_SetdTextInfo.windowFrame) {
|
|
var scaleX = this.picture().scaleX() / 100;
|
|
var scaleY = this.picture().scaleY() / 100;
|
|
this.makeFrameWindow(bitmapVirtual.width * scaleX, bitmapVirtual.height * scaleY);
|
|
}
|
|
this.hiddenWindow = null;
|
|
};
|
|
NSprite.prototype.applyTextDecoration = function() {
|
|
if (textDecParam.Mode >= 0) {
|
|
this.bitmap.outlineColor =
|
|
'rgba(%1,%2,%3,%4)'.format(textDecParam.Red, textDecParam.Green, textDecParam.Blue, textDecParam.Alpha / 255);
|
|
this.bitmap.decorationMode = textDecParam.Mode;
|
|
}
|
|
};
|
|
NSprite.prototype.makeFrameWindow = function(width, height) {
|
|
var padding = this.hiddenWindow.standardPadding();
|
|
this._frameWindow = new Window_Base(0, 0, width + padding * 2, height + padding * 2);
|
|
};
|
|
NSprite.prototype._processText = function(bitmap) {
|
|
var textState = {index: 0, x: 0, y: 0, text: _SetdTextInfo.value, left: 0, line: -1, height: 0};
|
|
this._processNewLine(textState, bitmap);
|
|
textState.height = this.hiddenWindow.calcTextHeight(textState, false);
|
|
textState.index = 0;
|
|
while (textState.text[textState.index]) {
|
|
this._processCharacter(textState, bitmap);
|
|
}
|
|
};
|
|
NSprite.prototype._processCharacter = function(textState, bitmap) {
|
|
if (textState.text[textState.index] === '\x1b') {
|
|
var code = this.hiddenWindow.obtainEscapeCode(textState);
|
|
switch (code) {
|
|
case 'C':
|
|
bitmap.textColor = this.hiddenWindow.textColor(this.hiddenWindow.obtainEscapeParam(textState));
|
|
break;
|
|
case 'I':
|
|
this._processDrawIcon(this.hiddenWindow.obtainEscapeParam(textState), textState, bitmap);
|
|
break;
|
|
case '{':
|
|
this.hiddenWindow.makeFontBigger();
|
|
break;
|
|
case '}':
|
|
this.hiddenWindow.makeFontSmaller();
|
|
break;
|
|
case 'F':
|
|
switch (this.hiddenWindow.obtainEscapeParamString(textState).toUpperCase()) {
|
|
case 'I':
|
|
bitmap.fontItalic = true;
|
|
break;
|
|
case 'B':
|
|
bitmap.fontBoldFotDtext = true;
|
|
break;
|
|
case '/':
|
|
case 'N':
|
|
bitmap.fontItalic = false;
|
|
bitmap.fontBoldFotDtext = false;
|
|
break;
|
|
}
|
|
break;
|
|
case 'OC':
|
|
var colorCode = this.hiddenWindow.obtainEscapeParamString(textState);
|
|
var colorIndex = Number(colorCode);
|
|
if (!isNaN(colorIndex)) {
|
|
bitmap.outlineColor = this.hiddenWindow.textColor(colorIndex);
|
|
} else {
|
|
bitmap.outlineColor = colorCode;
|
|
}
|
|
break;
|
|
case 'OW':
|
|
bitmap.outlineWidth = this.hiddenWindow.obtainEscapeParam(textState);
|
|
break;
|
|
}
|
|
} else if (textState.text[textState.index] === '\n') {
|
|
this._processNewLine(textState, bitmap);
|
|
} else {
|
|
var c = textState.text[textState.index++];
|
|
var w = this.hiddenWindow.textWidth(c);
|
|
if(textState.x == 0) {
|
|
if(this.DText_NRZureY != undefined) {
|
|
textState.height += (this.DText_NRZureY * textState.line);
|
|
}
|
|
}
|
|
bitmap.fontSize = this.hiddenWindow.contents.fontSize;
|
|
bitmap.drawText(c, textState.x, textState.y, w * 2, textState.height, 'left');
|
|
if(this.DText_NRZureX != undefined) {
|
|
textState.x += this.DText_NRZureX;
|
|
}
|
|
textState.x += w;
|
|
}
|
|
};
|
|
NSprite.prototype._processNewLine = function(textState, bitmap) {
|
|
if (bitmap instanceof Bitmap_Virtual)
|
|
this.textWidths[textState.line] = textState.x;
|
|
this.hiddenWindow.processNewLine(textState);
|
|
textState.line++;
|
|
if (bitmap instanceof Bitmap)
|
|
textState.x = (bitmap.width - this.textWidths[textState.line]) / 2 * _SetdTextInfo.align;
|
|
};
|
|
NSprite.prototype._processDrawIcon = function(iconIndex, textState, bitmap) {
|
|
var iconBitmap = ImageManager.loadSystem('IconSet');
|
|
var pw = Window_Base._iconWidth;
|
|
var ph = Window_Base._iconHeight;
|
|
var sx = iconIndex % 16 * pw;
|
|
var sy = Math.floor(iconIndex / 16) * ph;
|
|
bitmap.blt(iconBitmap, sx, sy, pw, ph, textState.x + 2, textState.y + (textState.height - ph) / 2);
|
|
textState.x += Window_Base._iconWidth + 4;
|
|
};
|
|
})();
|