/*
Title: Images During Message
Author: DKPlugins
Site: https://dk-plugins.ru
E-mail: kuznetsovdenis96@gmail.com
Version: 1.0.0
Release: 22.03.2023
First release: 22.03.2023
*/

/*ru
Название: Изображения во Время Сообщения
Автор: DKPlugins
Сайт: https://dk-plugins.ru
E-mail: kuznetsovdenis96@gmail.com
Версия: 1.0.0
Релиз: 22.03.2023
Первый релиз: 22.03.2023
*/

/*:
 * @plugindesc v.1.0.0 [MV|MZ] Allows you to display images during dialogs using special characters.
 * @author DKPlugins
 * @url https://dk-plugins.ru
 * @target MZ
 * @help

 ### Info about plugin ###
 Title: DK_Images_During_Message
 Author: DKPlugins
 Site: https://dk-plugins.ru
 Version: 1.0.0
 Release: 22.03.2023
 First release: 22.03.2023

 ###=========================================================================
 ## Compatibility
 ###=========================================================================
 RPG Maker MV: 1.5+
 RPG Maker MZ: 1.0+

 ###===========================================================================
 ## Instructions
 ###===========================================================================
 To display an image during a dialog, use the following command:
 \img[id,picture_name,x,y]
 id - Sequence number of the image
 picture_name - File name
 x - X coordinate
 y - Y coordinate
 Example: \img[1,Actor1_2,50,50]

 To hide an image, use the following command:
 \himg[id]
 id - Sequence number of the image
 Example: \himg[1]

 At the end of the dialog (closing the window), all images
 called with the \img command are automatically hidden!

 ###=========================================================================
 ## See also
 ###=========================================================================
 1. Events Glow (https://dk-plugins.ru/events-glow/)
 Allows highlighting events on mouse hover.

 2. Picture Choices (https://dk-plugins.ru/picture-choices/)
 Allows to use a graphic buttons instead of the choice window.

 3. Switches In Menu (https://dk-plugins.ru/switches-in-menu/)
 Allows you to add switches to the game menu.

 4. Balloons GIF Graphics (https://dk-plugins.ru/balloons-gif-graphics/)
 Allows you to use GIF as graphics for Balloons.

 ###===========================================================================
 ## License and terms of use
 ###===========================================================================
 You can:
 -To use the plugin for your non-commercial projects
 -Change code of the plugin

 You cannot:
 -Delete or change any information about the plugin
 -Distribute the plugin and its modifications

 ## Commercial license ##
 Visit the page: https://dk-plugins.ru/commercial-license/

 ###===========================================================================
 ## Support
 ###===========================================================================
 Become a subscriber: https://boosty.to/dkplugins

*/

/*:ru
 * @plugindesc v.1.0.0 [MV|MZ] Позволяет отображать изображения во время диалогов с помощью специальных символов.
 * @author DKPlugins
 * @url https://dk-plugins.ru
 * @target MZ
 * @help

 ### Информация о плагине ###
 Название: DK_Images_During_Message
 Автор: DKPlugins
 Сайт: https://dk-plugins.ru
 Версия: 1.0.0
 Релиз: 22.03.2023
 Первый релиз: 22.03.2023

 ###=========================================================================
 ## Совместимость
 ###=========================================================================
 RPG Maker MV: 1.5+
 RPG Maker MZ: 1.0+

 ###===========================================================================
 ## Инструкции
 ###===========================================================================
 Для отображения изображения во время диалога используйте следующую команду:
 \img[id,picture_name,x,y]
 id - Порядковый номер изображения
 picture_name - Название файла
 x - Координата X
 y - Координата Y
 Пример: \img[1,Actor1_2,50,50]

 Для скрытия изображения используйте следующую команду:
 \himg[id]
 id - Порядковый номер изображения
 Пример: \himg[1]

 При завершении диалога (закрытии окна) все изображения,
 вызванные с помощью команды \img,автоматически скрываются!

 ###=========================================================================
 ## Смотрите также
 ###=========================================================================
 1. Свечение Событий (https://dk-plugins.ru/events-glow/)
 Позволяет подсвечивать события при наведении мыши.

 2. Выбор С Изображениями (https://dk-plugins.ru/picture-choices/)
 Позволяет использовать графические кнопки вместо окна выбора.

 3. Переключатели в Меню (https://dk-plugins.ru/switches-in-menu/)
 Позволяет добавить переключатели в игровое меню.

 4. GIF Графика Balloons (https://dk-plugins.ru/balloons-gif-graphics/)
 Позволяет использовать GIF в качестве графики для Balloons.

 ###===========================================================================
 ## Лицензия и правила использования плагина
 ###===========================================================================
 Вы можете:
 -Использовать плагин в некоммерческих проектах
 -Изменять код плагина

 Вы не можете:
 -Удалять или изменять любую информацию о плагине
 -Распространять плагин и его модификации

 ## Коммерческая лицензия ##
 Посетите страницу: https://dk-plugins.ru/commercial-license/

 ###=========================================================================
 ## Поддержка
 ###=========================================================================
 Стать подписчиком: https://boosty.to/dkplugins

*/

'use strict';

var Imported = Imported || {};
Imported['DK_Images_During_Message'] = '1.0.0';

//===========================================================================
// Window_Message
//===========================================================================

const ImagesDuringMessage_Window_Message_initialize =
    Window_Message.prototype.initialize;
Window_Message.prototype.initialize = function() {
    ImagesDuringMessage_Window_Message_initialize.apply(this, arguments);
    this._requestedImages = [];
};

const ImagesDuringMessage_Window_Message_processEscapeCharacter =
    Window_Message.prototype.processEscapeCharacter;
Window_Message.prototype.processEscapeCharacter = function(code, textState) {
    switch (code) {
        case 'IMG':
            this.processShowImage(textState);
            break;
        case 'HIMG':
            this.processHideImage(this.obtainEscapeParam(textState));
            break;
        default:
            ImagesDuringMessage_Window_Message_processEscapeCharacter.apply(this, arguments);
            break;
    }
};

Window_Message.prototype.processShowImage = function(textState) {
    const match = /\[(\d+),(\w+),(\d+),(\d+)\]/.exec(textState.text.slice(textState.index));

    if (match) {
        const pictureId = parseInt(match[1], 10);
        const name = match[2];
        const x = parseInt(match[3], 10);
        const y = parseInt(match[4], 10);

        this._requestedImages.push(pictureId);
        $gameScreen.showPicture(pictureId, name, 0, x, y, 100, 100, 255, 0);
        textState.index += match[0].length;
    }
};

Window_Message.prototype.processHideImage = function(pictureId) {
    $gameScreen.erasePicture(pictureId);
};

const ImagesDuringMessage_Window_Message_terminateMessage =
    Window_Message.prototype.terminateMessage;
Window_Message.prototype.terminateMessage = function() {
    ImagesDuringMessage_Window_Message_terminateMessage.apply(this, arguments);

    while (this._requestedImages.length > 0) {
        $gameScreen.erasePicture(this._requestedImages.pop());
    }
};
