/*:
 * @target MZ
 * @plugindesc [v1.0.0] TorigoyaMZ_EnemyHpBarで描画される敵HPバーをグレースケール(モノクロ)にするパッチプラグイン
 * @author
 *
 * @help
 * =============================================================================
 * ■ 概要
 * =============================================================================
 * - TorigoyaMZ_EnemyHpBar.js（以下「Torigoyaプラグイン」）が描画する
 *   「敵HPバー」部分をモノクロ化します。
 * - 具体的には、Sprite_EnemyHpGauge（Sprite_Gaugeを継承）の
 *   gaugeColor1()/gaugeColor2() をグレースケール変換して返すようにし、
 *   バーの色味を失わせる（＝白黒にする）手法です。
 * - 他のUI（アクター用HPバーなど）は影響を受けません。
 *
 * ■ 使い方
 * 1) このファイルを「IM_TorigoyaEnemyHpBar_GrayscalePatch.js」として
 *    js/plugins フォルダに置き、プラグイン管理でONにします。
 * 2) プラグイン管理リストでは TorigoyaMZ_EnemyHpBar.js の「あと」に読み込んでください。
 *    (そうしないとクラスが存在せずエラーになる可能性があります)
 * 3) 起動すると、敵HPバー（Torigoyaプラグインの表示部分）だけがモノクロ化されます。
 *
 * ■ 注意
 * - 本プラグインは gaugeColor1()/gaugeColor2() をパッチしているため、
 *   そこでさらに別の上書きがあれば競合する可能性があります。
 * - ゲージ以外の部分（敵名表示など）には影響しません。
 * - もしゲージのグラデーションが弱く感じる場合、下記の
 *   toGrayscalePair() の実装を改造して輝度差を強制する方法を
 *   取り入れてもいいでしょう。
 *
 * ■ バージョン
 * v1.0.0 (2025/xx/xx):
 *   - 初版
 */

(() => {
    "use strict";

    //------------------------------------------------------------
    // A) チェック：Torigoya.EnemyHpBar.Sprite_EnemyHpGaugeが存在するか
    //------------------------------------------------------------
    if (!window.Torigoya || !Torigoya.EnemyHpBar || !Torigoya.EnemyHpBar.Sprite_EnemyHpGauge) {
        console.warn("TorigoyaMZ_EnemyHpBar not found. This patch is aborted.");
        return;
    }

    //------------------------------------------------------------
    // B) グレースケール変換：RGB→輝度→#RRGGBB(モノクロ)
    //------------------------------------------------------------
    function toGrayscale(hexColor) {
        // 例: "#RRGGBB"
        const hex = hexColor.replace(/^#/, "");
        if (hex.length < 6) return hexColor;
        const r = parseInt(hex.slice(0, 2), 16);
        const g = parseInt(hex.slice(2, 4), 16);
        const b = parseInt(hex.slice(4, 6), 16);
        // 輝度
        const L = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
        const lum = Math.max(0, Math.min(255, L));
        const s = lum.toString(16).padStart(2, "0");
        return `#${s}${s}${s}`;
    }

    //------------------------------------------------------------
    // C) パッチ: Sprite_EnemyHpGauge の gaugeColor1, gaugeColor2を上書き
    //------------------------------------------------------------
    const Sprite_EnemyHpGaugeClass = Torigoya.EnemyHpBar.Sprite_EnemyHpGauge;

    // gaugeColor1
    const _gaugeColor1 = Sprite_EnemyHpGaugeClass.prototype.gaugeColor1;
    Sprite_EnemyHpGaugeClass.prototype.gaugeColor1 = function() {
        const c = _gaugeColor1.call(this);
        return toGrayscale(c);
    };

    // gaugeColor2
    const _gaugeColor2 = Sprite_EnemyHpGaugeClass.prototype.gaugeColor2;
    Sprite_EnemyHpGaugeClass.prototype.gaugeColor2 = function() {
        const c = _gaugeColor2.call(this);
        return toGrayscale(c);
    };

})();
