using UnityEngine;

//////////////////////////////////////////////////////////////////
//【ビームの移動とゴーストとの当たり判定に使用するクラス】
// ビームを移動、ゴーストが影にいる場合の当たり判定処理、ビーム削除処理
//////////////////////////////////////////////////////////////////
public class BeamController : MonoBehaviour
{
    /////////////////////////////////
    // 【変数の設定】
    /////////////////////////////////

    //【Unity Editorから設定する変数】
    [SerializeField] float direction = -1;  // ビームの進行方向
    [SerializeField] SpriteRenderer sRenderer;  // SpriteRendererコンポーネント
    [SerializeField] GameObject pre_Impact;  // インパクト画像Prefab


    /////////////////////////////////
    // 【関数の設定】
    /////////////////////////////////

    //【毎フレームに１度動く関数】
    //（Unityの標準関数）
    void Update()
    {
        // ビームが画面外に出た場合、ビームのゲームオブジェクトを削除
        if (!sRenderer.isVisible) Destroy(gameObject);

        // ビームを横方向(左 or 右)に移動
        transform.Translate(direction * 0.05f, 0, 0);
    }


    //【ビームのコライダーが他のコライダーに当たった場合呼ばれるTrigger関数】
    //（Unityの標準関数）
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 当たった相手のタグが「Ghost」で、当たった相手のinShadowフラグがtrueの場合
        // (ゴースト以外に影とゾンビでTriggerが発生)
        if ((collision.gameObject.tag == "Ghost") &&
            collision.gameObject.GetComponent<EnemyController>().inShadow)
        {
            // ビームがゴーストと当たった位置にインパクトのPrefabを生成
            Instantiate(pre_Impact,
                collision.ClosestPoint(transform.position), Quaternion.identity);

            // 当たったゴーストを削除
            Destroy(collision.gameObject);
            // ビームのゲームオブジェクトを削除
            Destroy(gameObject);
        }
    }
}
