using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class PlayerMove : MonoBehaviour

{

    CapsuleCollider2D capsule_pl;

    public GameManager gameManager;

    public float maxSpeed;

    public float jumpPower;

    Rigidbody2D rigid;

    SpriteRenderer spriteRenderer;

    Animator anim;

    

    int up_Value;

    int left_Value;

    int right_Value;


    bool up_Down;

    bool left_Down;

    bool right_Down;

    

    bool up_Up;

    bool left_Up;

    bool right_Up;

    void Awake()

    {

        rigid = GetComponent();

        spriteRenderer = GetComponent();

        anim = GetComponent();

        capsule_pl = GetComponent();


    }


    void Update()

    {

        //점프

        if (Input.GetButtonDown("Jump") && !anim.GetBool("isjumping") || up_Down&& !anim.GetBool("isjumping"))

        {

            rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);

            anim.SetBool("isjumping", true);

        }


        //멈추는 힘

        if (Input.GetButtonUp("Horizontal") )

        {   

            rigid.velocity = new Vector2(rigid.velocity.normalized.x*0.5f, rigid.velocity.y);


        }

        //방향 전환

        if (Input.GetButton("Horizontal") ||  left_Down || right_Down)

        {

            spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;

        }

    

            

        }

        if (Mathf.Abs ( rigid.velocity.x)

            anim.SetBool("iswalking", false);

        else

            anim.SetBool("iswalking", true);


        up_Down = false;

        up_Up = false;

        left_Down = false;

        left_Up = false;

        right_Down = false;

        right_Up = false;


    }

          

    void FixedUpdate()

    {    

        

        //가속도

        float h = Input.GetAxisRaw("Horizontal") + right_Value + left_Value;

       

        rigid.AddForce(Vector2.right * h*2, ForceMode2D.Impulse);


        if (rigid.velocity.x > maxSpeed)  //Right Max Speed

            rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);


        else if (rigid.velocity.x

            rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);


        //착지

        if (rigid.velocity.y

        {

            Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));


            RaycastHit2D rayhit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("plaform"));


            if (rayhit.collider != null)

            {

                if (rayhit.distance

                    anim.SetBool("isjumping", false);

            }

        }

    }

    

    private void OnCollisionEnter2D(Collision2D collision)

    {

        if(collision.gameObject.tag == "Enemy")

        {   //몬스터 떄리기

            if(rigid.velocity.y   collision.transform.position.y)

            {

                OnAttack(collision.transform);

            }

            else

            OnDamaged(collision.transform.position);

        }

    }


   

    void OnTriggerEnter2D(Collider2D collision)

    {

        if (collision.gameObject.tag == "Item")

        {

            bool isBronze = collision.gameObject.name.Contains("브론즈");

            bool isSilver = collision.gameObject.name.Contains("실버");

            bool isGold = collision.gameObject.name.Contains("골드");

            

            if(isBronze)

                  gameManager.stagePoint += 50;

            else if(isSilver)

                gameManager.stagePoint += 100;

            else if(isGold)

                gameManager.stagePoint += 300;

           

            collision.gameObject.SetActive(false);

        }

        else if (collision.gameObject.tag == "Finish")

        {

            gameManager.NextStage();

        }

    }

 

    void OnAttack(Transform enemy)

    {

        gameManager.stagePoint += 100;


        rigid.AddForce(Vector2.up * 10, ForceMode2D.Impulse);


        MonsterMove enemyMove = enemy.GetComponent();

        enemyMove.OnDamaged();



    }



    void OnDamaged(Vector2 targetPos)

    {   //피 깍임

        gameManager.HealthDown();

        //레이어 변경

        gameObject.layer = 11;

        //색 변경

        spriteRenderer.color = new Color(1, 1, 1, 0.4f);

        //튕겨나가기

        int dirc = transform.position.x - targetPos.x > 0 ? 1 : -1;

       

        rigid.AddForce(new Vector2(dirc, 2)*7, ForceMode2D.Impulse);


        //애니메이션

        anim.SetTrigger("Damaged");


        Invoke("offDamaged", 3);

    }


    void offDamaged()

    {

        gameObject.layer = 10;

        spriteRenderer.color = new Color(1, 1, 1, 1);


    }

    public void OnDie()

    {

        spriteRenderer.color = new Color(1, 1, 1, 0.4f);


        spriteRenderer.flipY = true;


        capsule_pl.enabled = false;


        rigid.AddForce(Vector2.up * 30, ForceMode2D.Impulse);

    }

   public void VelocityZero()

    {

        rigid.velocity = Vector2.zero;

    }


   public void ButtonDown(string type)

    {

        switch (type)

        {   case "U":

                up_Value = 1;

                up_Down = true;

                break;

            case "R":

                right_Value = 1;

                right_Down = true;

                break;

            case "L":

                left_Value = -1;

                left_Down = true;

                break;


        }


    }


    public void ButtonUp(string type)

    {


        switch (type)

        {

            case "U":

                up_Value = 0;

                up_Up = true;

                break;

            case "R":

                right_Value = 0;

                right_Up = true;

                break;

            case "L":

                left_Value = 0;

                left_Up = true;

                break;

        }


    }


}

어디가 문제인걸까.. 갑자기 잘되다가 모든곳에 빨간줄이 다생거다라..