using UnityEngine;

//////////////////////////////////////////////////////////////////
//【敵(ゾンビ、ゴースト)の移動と当たり判定に使用するクラス】
// 敵を左右へランダム速度で移動、影とゲームオーバーエリアの当たり判定
//////////////////////////////////////////////////////////////////
public class EnemyController : MonoBehaviour
{
    /////////////////////////////////
    // 【変数の設定】
    /////////////////////////////////

    //【他のクラスからアクセスするPublic変数】
    public bool inShadow;  // 敵が影内にいるフラグ

    //【Unity Editorから設定する変数】
    [SerializeField] float direction = -1;  // 敵の進行方向(左か右)

    //【このプログラム内で使用するPrivate変数】
    GameController gameController;  // GameControllerクラス
    float speed;  // 敵の進行スピード


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

    //【ゲーム開始時・ゲームオブジェクト生成時に１回だけ動く関数】
    //（Unityの標準関数）
    void Start()
    {
        // シーン上のゲームオブジェクトGameControllerのGameControllerクラスを取得
        gameController =
            GameObject.Find("GameController").GetComponent<GameController>();

        // 敵の進行スピードをランダムに決定
        speed = Random.Range(0.002f, 0.01f);
    }


    //【毎フレームに１度動く関数】
    //（Unityの標準関数）
    void Update()
    {
        // ゲームステイタスがゲーム中の場合
        if (gameController.gameStatus == 0)
            // 敵を進行方向(左か右)に移動
            transform.Translate(direction * speed, 0, 0);

        // ゲームステイタスがゲームクリアの場合
        else if (gameController.gameStatus == 2)
            // 敵を削除
            Destroy(gameObject);
    }


    //【敵が他のコライダーに当たった場合呼ばれるTrigger関数】
    //（Unityの標準関数）
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 当たった相手のタグが「GameController」の場合
        if (collision.gameObject.CompareTag("GameController"))
        {
            // GameControllerのGameOver関数を呼び出す
            gameController.GameOver();
        }
    }


    //【敵が他のコライダーと接触している際に呼ばれるTrigger関数】
    //（Unityの標準関数）
    private void OnTriggerStay2D(Collider2D collision)
    {
        // 接触している相手のタグが「Shadow」の場合
        if (collision.gameObject.CompareTag("Shadow"))
            // inShadowフラグをtureに
            inShadow = true;
    }


    //【敵が他のコライダーと離れた際に呼ばれるTrigger関数】
    //（Unityの標準関数）
    private void OnTriggerExit2D(Collider2D collision)
    {
        // 離れた相手のタグが「Shadow」の場合
        if (collision.gameObject.CompareTag("Shadow"))
            // inShadowフラグをfalseに
            inShadow = false;
    }
}
