/*:
 * @plugindesc 中央の明度を上げ、彩度を少し低めにしたグラデーション背景プラグイン
 * @target MZ
 * @help
 * このプラグインは中央に卵子を象るグラデーションと、全体的に彩度を調整した背景を描画します。
 *
 * イベントの「スクリプト」コマンドで以下を使用してください。
 * グラデーションを表示: GradientOverlay.show();
 * グラデーションを削除: GradientOverlay.hide();
 */

(() => {
    const GradientOverlay = {};

    GradientOverlay.show = function() {
        // 既にグラデーションが存在する場合は何もしない
        if (SceneManager._gradientSprite) return;

        // スプライト作成
        const gradientSprite = new Sprite();
        const width = Graphics.width;
        const height = Graphics.height;

        // ビットマップ作成
        const bitmap = new Bitmap(width, height);
        const context = bitmap._context;

        // 内側から外側に徐々に暗くなりつつ、彩度を低めに調整
        const radialGradient = context.createRadialGradient(
            width / 2, height / 2, width / 4, // 中心と開始半径
            width / 2, height / 2, width // 外側の半径
        );
        radialGradient.addColorStop(0, '#9A3C64'); // 中央のやや明るい紫（彩度控えめ）
        radialGradient.addColorStop(1, '#4D2033'); // 外側の暗い紫（彩度控えめ）
        context.fillStyle = radialGradient;
        context.fillRect(0, 0, width, height);

        // 卵子を象る楕円形のグラデーション
        const eggGradient = context.createRadialGradient(
            width / 2, height / 2, 0, // 楕円の中心（中央部から開始）
            width / 2, height / 2, 150 // 楕円の最大半径
        );
        eggGradient.addColorStop(0, 'rgba(255, 220, 220, 1)'); // 明るい桃色
        eggGradient.addColorStop(0.5, 'rgba(200, 150, 180, 0.6)'); // 少し暗い桃色
        eggGradient.addColorStop(1, 'rgba(100, 50, 80, 0)'); // 外側（透明な紫）
        context.fillStyle = eggGradient;
        context.save();

        // 楕円を描画するためにスケーリング
        context.translate(width / 2, height / 2); // 中心を移動
        context.scale(1.5, 1); // 横に広げて楕円形に
        context.beginPath();
        context.arc(0, 0, 150, 0, Math.PI * 2); // 楕円形を描画
        context.closePath();
        context.fill();
        context.restore();

        // ビットマップを再描画
        bitmap.baseTexture.update();

        // スプライトにビットマップを設定
        gradientSprite.bitmap = bitmap;

        // 現在のシーンにスプライトを追加
        SceneManager._scene.addChild(gradientSprite);

        // スプライトを保持
        SceneManager._gradientSprite = gradientSprite;
    };

    GradientOverlay.hide = function() {
        // グラデーションが存在する場合は削除
        if (SceneManager._gradientSprite) {
            SceneManager._scene.removeChild(SceneManager._gradientSprite);
            SceneManager._gradientSprite = null;
        }
    };

    // グローバルに登録
    window.GradientOverlay = GradientOverlay;
})();
