magical-girls-runa-and-nanami/js/plugins/GradientOverlay.js
2026-02-28 12:33:13 -06:00

81 lines
3.3 KiB
JavaScript

/*:
* @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;
})();