/*:
 * @target MZ
 * @plugindesc [v1.2] 戦闘中の立ち絵表情変更プラグイン（スプライト版）
 * @author ChatGPT
 *
 * @help BattleSpriteExpression.js
 *
 * 【機能】
 *  1. 戦闘開始時・ターン開始時に現在の表情スプライトを記録。
 *  2. 敵から攻撃を受けた瞬間、`battle00_common/face_02damage.png` に変更。
 *  3. 1秒後に元の表情（ターン開始時のスプライト）に戻す。
 *
 * 【使い方】
 *  - プラグインを有効化するだけで動作します。
 *  - 画像のファイル名を適宜変更してください。
 *
 * 【注意】
 *  - 立ち絵画像は `img/battle00_common/` フォルダに配置してください。
 *  - **スプライトを戦闘画面のレイヤーに追加する形に修正しました。**
 *  - 表示位置は **X = 584, Y = 0** に固定されています。
 */

(() => {
    "use strict";

    const SPRITE_X = 584; // ★ X座標
    const SPRITE_Y = 0;   // ★ Y座標
    let currentExpressionSprite = null; // 現在の表情スプライトを記録
    let damageSprite = null; // ダメージ時のスプライト

    /**
     * @function saveCurrentExpression
     * 現在の表情スプライトを記録
     */
    const saveCurrentExpression = () => {
        if (!SceneManager._scene._spriteset) return; // スプライトセットがない場合は中断

        // 以前のスプライトを削除
        if (currentExpressionSprite) {
            SceneManager._scene._spriteset.removeChild(currentExpressionSprite);
        }

        // 新しいスプライトを作成
        currentExpressionSprite = new Sprite();
        currentExpressionSprite.bitmap = ImageManager.loadBitmap("img/battle00_common/", "face_02normal"); // ★ 通常表情
        currentExpressionSprite.x = SPRITE_X;
        currentExpressionSprite.y = SPRITE_Y;
        SceneManager._scene._spriteset.addChild(currentExpressionSprite);
    };

    /**
     * @function changeExpressionOnDamage
     * ダメージを受けた瞬間に指定の表情スプライトへ変更
     */
    const changeExpressionOnDamage = () => {
        if (!SceneManager._scene._spriteset) return; // スプライトセットがない場合は中断

        // 以前のダメージスプライトを削除
        if (damageSprite) {
            SceneManager._scene._spriteset.removeChild(damageSprite);
        }

        // ダメージ時のスプライトを作成
        damageSprite = new Sprite();
        damageSprite.bitmap = ImageManager.loadBitmap("img/battle00_common/", "face_02damage"); // ★ ダメージ表情
        damageSprite.x = SPRITE_X;
        damageSprite.y = SPRITE_Y;
        SceneManager._scene._spriteset.addChild(damageSprite);

        // 1秒後に元の表情に戻す
        setTimeout(() => {
            if (!SceneManager._scene._spriteset) return;
            if (damageSprite) {
                SceneManager._scene._spriteset.removeChild(damageSprite);
                damageSprite = null;
            }
            if (currentExpressionSprite) {
                SceneManager._scene._spriteset.addChild(currentExpressionSprite);
            }
        }, 1000);
    };

    /**
     * @override BattleManager.startTurn
     * ターン開始時に現在の表情を記録
     */
    const _BattleManager_startTurn = BattleManager.startTurn;
    BattleManager.startTurn = function() {
        _BattleManager_startTurn.call(this);
        saveCurrentExpression();
    };

    /**
     * @override Game_Battler.prototype.performDamage
     * ダメージを受けた瞬間に表情を変更
     */
    const _Game_Battler_performDamage = Game_Battler.prototype.performDamage;
    Game_Battler.prototype.performDamage = function() {
        _Game_Battler_performDamage.call(this);
        changeExpressionOnDamage();
    };

})();
