using UnityEngine;

//////////////////////////////////////////////////////////////////
//【プレイヤーが操作する女の子の移動と射撃に使用するクラス】
// キー操作で女の子を上下へ移動、銃とビームガンの変更と射撃
//////////////////////////////////////////////////////////////////
public class PlayerController : MonoBehaviour
{
    /////////////////////////////////
    // 【変数の設定】
    /////////////////////////////////

    //【Unity Editorから設定する変数】
    [SerializeField] SpriteRenderer sRenderer;  // SpriteRendererコンポーネント
    [SerializeField] Sprite[] girlImage;  // 女の子の画像(配列)

    [SerializeField] GameObject[] bullet_L;  // 左向きの弾丸とビーム(配列)
    [SerializeField] GameObject[] bullet_R;  // 右向きの弾丸とビーム(配列)

    //【このプログラム内で使用するPrivate変数】
    int gunMode = 1;  // ガンモード(1:銃、2:ビームガン)


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

    //【ゲーム開始時・ゲームオブジェクト生成時に１回だけ動く関数】
    //（Unityの標準関数）
    void Start()
    {
        // 本ゲームは移動にUpdate関数内でTranslateを使用するため
        // 操作性が変わらない様にフレームレートを固定させる
        Application.targetFrameRate = 100;
    }


    //【毎フレームに１度動く関数】
    //（Unityの標準関数）
    void Update()
    {
        // 上矢印キーが押された場合
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            // 女の子の位置が画面上端より下の場合、女の子を上に移動
            if (transform.position.y < 3) transform.Translate(0, 1, 0);
        }
        // 下矢印キーが押された場合
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            // 女の子の位置が画面下端より上の場合、女の子を下に移動
            if (transform.position.y > -3) transform.Translate(0, -1, 0);
        }

        // 左矢印キーが押された場合
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            // 女の子の画像を左に向ける（元画像が左向き）
            transform.localScale = new Vector3(0.17f, 0.17f, 0);
        }
        // 右矢印キーが押された場合
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            // 女の子の画像を右に向ける（元画像が左向き）
            transform.localScale = new Vector3(-0.17f, 0.17f, 0);
        }

        // Zキーが押された場合
        if (Input.GetKeyDown(KeyCode.Z))
        {
            // ガンモードが1の場合、gunModeを2に
            if (gunMode == 1) gunMode = 2;
            // ガンモードが2の場合、gunModeを1に
            else if (gunMode == 2) gunMode = 1;

            // 女の子の画像をガンモードと合した画像に変更
            sRenderer.sprite = girlImage[gunMode - 1];
        }

        // スペースキーが押された場合
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 女の子の位置を取得
            Vector3 pos = transform.position;

            // 女の子の画像が左を向いている場合
            if (transform.localScale.x > 0)
            {
                // 女の子の画像の左側にガンモードに合わせて弾丸かビームを生成
                Instantiate(bullet_L[gunMode - 1],
                    new Vector3(pos.x - 1f, pos.y + 0.4f, 0), Quaternion.identity);
            }
            // 女の子の画像が右を向いている場合
            else
            {
                // 女の子の画像の右側にガンモードに合わせて弾丸かビームを生成
                Instantiate(bullet_R[gunMode - 1],
                    new Vector3(pos.x + 1f, pos.y + 0.4f, 0), Quaternion.identity);
            }
        }
    }
}
