using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayerController: MonoBehaviour
{
    public float moveSpeed = 0f;//ǰٶ
    public float highSpeed = 2f;
    public float slowSpeed = 1f;


    //ƶΧ
    //ǵõȻַɻ˵bugʹ÷ɻλȷҿƶΧ
    public float XMax;
    public float XMin;
    public float YMax;
    public float YMin;

    //仯ӵ
    //Ȳʹ
    /*
    [Range(1, 3)]
    public int powerLevel = 1;
    public GameObject[] powerWeapon;
    */

    [Range(2, 7)]
    public int bombNumber = 2;
    public float bombRate = 3f;
    public GameObject bomb;

    public GameObject myHitDot;
    public GameObject explosionEff;
    public float explosionDelay = 1f;

    public KeyCode powerAdd = KeyCode.W;
    public KeyCode powerDown = KeyCode.Q;

    public KeyCode leftKey = KeyCode.LeftArrow;
    public KeyCode rightKey = KeyCode.RightArrow;
    public KeyCode upKey = KeyCode.UpArrow;
    public KeyCode downKey = KeyCode.DownArrow;
    public KeyCode slowKey = KeyCode.LeftShift;
    public KeyCode shootKey = KeyCode.Z;
    public KeyCode bombkey = KeyCode.X;
    public KeyCode returnkey = KeyCode.C;

    private GameObject currentWeapon;

    public GameObject Shield;
    public float invunerableTime = 0f;
    private float invunerableTimer = 0f;

    private float bombTimer;

    void Start()
    {
        bombTimer = bombRate;
        //myHitDot.gameObject.SetActive(false);
        moveSpeed = highSpeed;
        //currentWeapon = powerWeapon[powerLevel - 1];
        //PowerChange(powerLevel);
    }

    void Update()
    {
        //ıȲʹ
        //PowerControl();
        //PowerChange(powerLevel);
        Invunerable();
        PlayerMove();
        PlayerShoot();
        PlayerBomb();
        //PlayerData.Database.currentPlayerBomb = bombNumber;
    }

    void PlayerMove()
    {
        if (Input.GetKey(slowKey))//
        {
            moveSpeed = slowSpeed;
            //״Ƿʾܻ
            //myHitDot.gameObject.SetActive(true);
        }
        else
        {
            moveSpeed = highSpeed;
            //״Ƿʾܻ
            //myHitDot.gameObject.SetActive(false);
        }
        if (Input.GetKey(leftKey) && transform.position.x >= XMin)// && СĻԵxСֵ
        {
            transform.Translate(-moveSpeed * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(rightKey) && transform.position.x <= XMax)//
        {
            transform.Translate(moveSpeed * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(upKey) && transform.position.y <= YMax)//
        {
            transform.Translate(0, moveSpeed * Time.deltaTime, 0);
        }
        if (Input.GetKey(downKey) && transform.position.y >= YMin)//
        {
            transform.Translate(0, -moveSpeed * Time.deltaTime, 0);
        }
        //ʵӦдͬʱסҺ
    }

    void PlayerShoot()
    {
        if (Input.GetKey(shootKey))//
        {
            //currentWeapon.GetComponent<UbhShotCtrl>().StartShotRoutine();

        }
        else
        {
            //currentWeapon.GetComponent<UbhShotCtrl>().StopShotRoutine();
        }
    }

    void PlayerBomb()
    {
        if (Input.GetKey(bombkey) && bombNumber > 0 && bombTimer >= bombRate)//
        {
            //Instantiate(bomb);
            bombNumber -= 1;
            bombTimer = 0f;
        }
        if (bombTimer < bombRate)
        {
            bombTimer += Time.deltaTime;
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        string colTag = collision.gameObject.tag;
        if (colTag == "Enemy" || colTag == "EnemyBullet")
        {
            if (invunerableTimer <= 0)
            {
                OnDeath();
            }
        }
    }


    void PowerChange(int power)
    {
        /*
        if (power > powerWeapon.Length)
        {
            power = powerWeapon.Length;
        }
        if (power < 1)
        {
            power = 1;
        }
        currentWeapon = powerWeapon[power - 1];
        */
    }

    //
    void OnDeath()
    {
        PlayerData.Database.playerLife -= 1;
        GameObject eff = Instantiate(explosionEff, transform.position, Quaternion.identity);
        Destroy(eff, explosionDelay);
        Destroy(gameObject);
    }

    //޵
    //Ŀǰһ޵ݣݿײӵҽʧʱɾ
    void Invunerable()
    {
        /*
        if (invunerableTime > 0f)
        {
            GameObject bubble = Instantiate(Shield, transform.position, Quaternion.identity);
            bubble.GetComponent<BubbleShield>().myPlayer = gameObject;
            Destroy(bubble, invunerableTime);
            invunerableTimer = invunerableTime;
            invunerableTime = 0f;
        }
        if (invunerableTimer > 0f)
        {
            invunerableTimer -= Time.deltaTime;
        }
        */
    }

    //ıȲʹ
    /*
    void PowerControl()
    {
        if (Input.GetKeyDown(powerDown) == true)
        {
            powerLevel -= 1;
        }
        if (Input.GetKeyDown(powerAdd) == true)
        {
            powerLevel += 1;
        }
    }
    */
}
