//=============================================================================
// MUR Big Avatar v2.0
// Copyright (C) 2018,2019 MUR (https://github.com/murlab)
// BSD 3-Clause "New" or "Revised" License
// Free for use with both free and commercial RPG Maker games
//=============================================================================

var Imported = Imported || {};
Imported.MUR_BigAvatar = true;

var MUR = MUR || {};				// MUR's main object
MUR.AVATAR = MUR.AVATAR || {};		// Plugins's stuff

/*:
 * @plugindesc v2.0 Big Avatar
 * @author MUR
 * @help Показывает большую аватарку в текстовых сообщениях
 *
 * @param msgWindow
 * @text Настройки окна сообщений
 *
 * @param pauseSymbPosX
 * @parent msgWindow
 * @type number
 * @text Позиция символа паузы X (px)
 * @desc X положение внутри окна сообщения
 * @default 0
 * @min -1024
 * @max 1024
 *
 * @param pauseSymbAlignH
 * @parent pauseSymbPosX
 * @text Выравнивание символа паузы (гор.)
 * @desc X выравнивание положения внутри окна сообщения
 * @default center
 * @type select
 * @option Слева
 * @value left
 * @option Центр
 * @value center
 * @option Справа
 * @value right
 *
 * @param pauseSymbPosY
 * @parent msgWindow
 * @type number
 * @text Позиция символа паузы Y (px)
 * @desc Y положение внутри окна сообщения
 * @default 0
 * @min -1024
 * @max 1024
 *
 * @param pauseSymbAlignV
 * @parent pauseSymbPosY
 * @text Выравнивание символа паузы (верт.)
 * @desc Y выравнивание положения внутри окна сообщения
 * @default center
 * @type select
 * @option Верх
 * @value top
 * @option Центр
 * @value center
 * @option Низ
 * @value bottom
 *
 * @param msgNameParams
 * @text Рассположение имени актёра
 *
 * @param nameWidth
 * @parent msgNameParams
 * @type number
 * @text Ширина области (px)
 * @desc Ограничение ширины имени атёра (0 = ширина всего окна)
 * @default 0
 *
 * @param nameHeight
 * @parent msgNameParams
 * @type number
 * @text Высота области (px)
 * @desc Ограничение высоты имени атёра (0 = ширина всего окна)
 * @default 0
 *
 * @param namePosX
 * @parent msgNameParams
 * @type number
 * @text Позиция области имени X (px)
 * @desc X положение внутри окна сообщения
 * @default 0
 * @min -1024
 * @max 1024
 *
 * @param nameAlignH
 * @parent namePosX
 * @text Выравнивание области имени (гор.)
 * @desc X выравнивание положения внутри окна сообщения
 * @default center
 * @type select
 * @option Слева
 * @value left
 * @option Центр
 * @value center
 * @option Справа
 * @value right
 *
 * @param namePosY
 * @parent msgNameParams
 * @type number
 * @text Позиция области имени Y (px)
 * @desc Y положение внутри окна сообщения
 * @default 0
 * @min -1024
 * @max 1024
 *
 * @param nameAlignV
 * @parent namePosY
 * @text Выравнивание области имени (верт.)
 * @desc Y выравнивание положения внутри окна сообщения
 * @default center
 * @type select
 * @option Верх
 * @value top
 * @option Центр
 * @value center
 * @option Низ
 * @value bottom
 *
 * @param nameBgColor
 * @parent msgNameParams
 * @type color
 * @text Цвет фона заливки
 * @desc Цвет фона для заливки (очистки) области вывода имени
 * @default #103300
 *
 * @param msgParams
 * @text Рассположение текста сообщения
 *
 * @param msgPosX
 * @parent msgParams
 * @type number
 * @text Позиция текста X (px)
 * @desc X положение внутри окна сообщения
 * @default 0
 *
 * @param msgPosY
 * @parent msgParams
 * @type number
 * @text Позиция текста Y (px)
 * @desc Y положение внутри окна сообщения
 * @default 0
 *
 */

var params = PluginManager.parameters('MUR_BigAvatar');

MUR.AVATAR.pauseSymbPosX = Number(params['pauseSymbPosX']);
MUR.AVATAR.pauseSymbAlignH = params['pauseSymbAlignH'];
MUR.AVATAR.pauseSymbPosY = Number(params['pauseSymbPosY']);
MUR.AVATAR.pauseSymbAlignV = params['pauseSymbAlignV'];
MUR.AVATAR.msgPosX = Number(params['msgPosX']);
MUR.AVATAR.msgPosY = Number(params['msgPosY']);

MUR.AVATAR.nameWidth = Number(params['nameWidth']);
MUR.AVATAR.nameHeight = Number(params['nameHeight']);
MUR.AVATAR.namePosX = Number(params['namePosX']);
MUR.AVATAR.nameAlignH = params['nameAlignH'];
MUR.AVATAR.namePosY = Number(params['namePosY']);
MUR.AVATAR.nameAlignV = params['nameAlignV'];
MUR.AVATAR.nameBgColor = params['nameBgColor'];

MUR.AVATAR.sprite = new Sprite();
MUR.AVATAR.bitmap = new Bitmap();

// Загрузка данных для подсказок из файла
DataManager._databaseFiles.push(
    {name: "$bigAvatarNames", src: "bigAvatarNames.json"}
);

var _MurAvatar_Window_refreshPauseSign = Window.prototype._refreshPauseSign;
Window.prototype._refreshPauseSign = function() {
	_MurAvatar_Window_refreshPauseSign.call(this);

	var sX = MUR.AVATAR.pauseSymbPosX;
	var sY = MUR.AVATAR.pauseSymbPosY;

	switch(MUR.AVATAR.pauseSymbAlignH) {
		case 'center':
			sX += this._width / 2;
			break;
		case 'right':
			sX += this._width;
			break;
	}
	switch(MUR.AVATAR.pauseSymbAlignV) {
		case 'center':
			sY += this._height / 2;
			break;
		case 'bottom':
			sY += this._height;
			break;
	}

	this._windowPauseSignSprite.move(sX, sY);
}

Window_Message.prototype.newLineX = function() {
	return MUR.AVATAR.msgPosX;
};

var _MurAvatar_Window_Message_newPage = Window_Message.prototype.newPage;    
Window_Message.prototype.newPage = function(textState) {
	_MurAvatar_Window_Message_newPage.call(this, textState);
	textState.y = MUR.AVATAR.msgPosY;
}

var _MurAvatar_Window_Message_loadMessageFace = Window_Message.prototype.loadMessageFace;
Window_Message.prototype.loadMessageFace = function() {
	_MurAvatar_Window_Message_loadMessageFace.call(this);
	var faceName = $gameMessage.faceName();
	var faceIndex = $gameMessage.faceIndex();

	if (faceName == '') {
		faceName = "Default";
		faceIndex = 0;
	}

	MUR.AVATAR.sprite.bitmap = new Bitmap();
	MUR.AVATAR.bitmap = ImageManager.loadBitmap('img/bigfaces/' + faceName + '/', faceIndex+1, null, true);

	var avatarName = faceName;
	if ($bigAvatarNames != null && $bigAvatarNames[faceName] != undefined) {
		avatarName = $bigAvatarNames[faceName];
	}	

	var sX = MUR.AVATAR.namePosX;
	var sY = MUR.AVATAR.namePosY;

	var txtWidth = this._windowFrameSprite.bitmap.width;
	var txtHeight = this._windowFrameSprite.bitmap.height;
	if (MUR.AVATAR.nameWidth != 0) {
		txtWidth = MUR.AVATAR.nameWidth;
	}
	if (MUR.AVATAR.nameHeight != 0) {
		txtHeight = MUR.AVATAR.nameHeight;
	}

	switch(MUR.AVATAR.nameAlignH) {
		case 'center':
			sX += (this._width - txtWidth) / 2;
			break;
		case 'right':
			sX += this._width - txtWidth;
			break;
	}
	switch(MUR.AVATAR.nameAlignV) {
		case 'center':
			sY += (this._height - txtHeight) / 2;
			break;
		case 'bottom':
			sY += this._height - txtHeight;
			break;
	}

	MUR.setfont(this._windowFrameSprite.bitmap, 'n', 'white');
	this._windowFrameSprite.bitmap.fillRect(sX, sY + this.textPadding(), txtWidth, txtHeight, MUR.AVATAR.nameBgColor)
	this._windowFrameSprite.bitmap.drawText(avatarName, sX, sY, txtWidth, 48, 'center');
}

Window_Message.prototype.drawMessageFace = function() {

	MUR.AVATAR.sprite.x = 0;

	MUR.AVATAR.bitmap.addLoadListener(function() {
		var w = MUR.AVATAR.bitmap.width;
		var h = MUR.AVATAR.bitmap.height;
		MUR.AVATAR.sprite.bitmap = new Bitmap(w, h);
		MUR.AVATAR.sprite.bitmap.blt(MUR.AVATAR.bitmap, 0, 0, w, h, 0, 0);
		MUR.AVATAR.sprite.y = -(h - this.height);
	}.bind(this));

	this.addChildToBack(MUR.AVATAR.sprite);
}
