예제 #1
0
    IEnumerator AttackCoru()
    {
        int Dash_Count = 3;

        Attach_Wall = false;
        //FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y / 2 + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(1.5f));

        Destroy(Ready);
        GetComponent <Animator>().SetBool("Attack", true);
        yield return(new WaitForSeconds(0.3f));

        while (Dash_Count > 0)
        {
            direction = PlayerPosition - transform.position;
            direction.Normalize();
            Vector2 PPosition = transform.position;
            float   PrevTime  = Time.time;

            if (PlayerPosition.x > transform.position.x)
            {
                Vector2 diff;
                diff = PlayerPosition - transform.position;

                diff.Normalize();

                float rot_z = (Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg);
                transform.localRotation = Quaternion.Euler(0f, 0, rot_z);
                Front = 1;
            }
            else if (PlayerPosition.x <= transform.position.x)
            {
                Vector2 diff;
                diff = (PlayerPosition + (new Vector3(transform.position.x - PlayerPosition.x, 0, 0) * 2)) - transform.position;

                diff.Normalize();

                float rot_z = (Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg);
                transform.localRotation = Quaternion.Euler(0f, 180, rot_z);
                Front = -1;
            }

            _ATTACK = false;
            FX.EffectPlay(FX.ENEMYS.HAWK_RUSH);
            while ((PPosition - new Vector2(transform.position.x, transform.position.y)).magnitude <= AttackDistance && !_ATTACK)
            {
                Move(6);
                if (Attach_Wall)
                {
                    Attach_Wall = false;
                    break;
                }
                yield return(null);
            }

            Dash_Count--;
            _ATTACK = true;
            yield return(new WaitForSeconds(0.2f));

            PlayerPosition = _Player.transform.position;
        }

        GetComponent <Animator>().SetBool("Attack", false);

        if (PlayerPosition.x > transform.position.x)
        {
            transform.localRotation = Quaternion.Euler(0, 0, 0);
            Front = 1;
        }
        else if (PlayerPosition.x <= transform.position.x)
        {
            transform.localRotation = Quaternion.Euler(0f, 180, 0);
            Front = -1;
        }
        yield return(new WaitForSeconds(2));

        AttackTime = Time.time;
        attack     = false;
        This_State = MON_STATE.IDLE;
        PrevTime   = Time.time;


        yield return(null);
    }
예제 #2
0
    IEnumerator Attack_O1_Coru()
    {
        yield return(null);

        ////FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(0.5f));

        Destroy(Ready);
        FX.EffectPlay(FX.ENEMYS.MAGE_ATTACK_01);
        Attack_01();
        AttackTime = Time.time;
        This_State = MON_STATE.TRACKING;
    }
예제 #3
0
    IEnumerator DashAttack()
    {
        isDashAttack = true;
        isJumpAttack = true;
        //FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y / 2 + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(0.5f));

        Destroy(Ready);

        Anim.SetBool("Move", true);
        yield return(null);

        float ThisTime = Time.time;

        while (Time.time - ThisTime <= 4)
        {
            direction = _Player.transform.position - transform.position;
            if (direction.magnitude >= 0.5f)
            {
                direction.Normalize();

                Ray2D        ray = new Ray2D(transform.position, direction);
                RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, MS * Time.deltaTime, 9);

                Ray2D        ray1 = new Ray2D(transform.position + Vector3.up * GetComponent <SpriteRenderer>().size.y, direction);
                RaycastHit2D hit1 = Physics2D.Raycast(ray.origin, ray.direction, MS * Time.deltaTime, 9);

                Ray2D        ray2 = new Ray2D(transform.position - Vector3.up * GetComponent <SpriteRenderer>().size.y, direction);
                RaycastHit2D hit2 = Physics2D.Raycast(ray.origin, ray.direction, MS * Time.deltaTime, 9);

                if (hit.collider == null || hit.collider.tag != "Obstacle")
                {
                    if (hit1.collider == null || hit1.collider.tag != "Obstacle")
                    {
                        if (hit2.collider == null || hit2.collider.tag != "Obstacle")
                        {
                            Move(1);
                        }
                    }
                }
            }
            yield return(null);
        }
        Anim.SetBool("Move", false);
        isJumpAttack = false;

        yield return(new WaitForSeconds(0.2f));
    }
예제 #4
0
    IEnumerator Attack_02()
    {
        if (PlayerPosition.x > transform.position.x)
        {
            Vector2 diff;
            diff = PlayerPosition - transform.position;

            diff.Normalize();

            float rot_z = (Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg);
            transform.localRotation = Quaternion.Euler(0f, 0, rot_z);
            Front = 1;
        }
        else if (PlayerPosition.x <= transform.position.x)
        {
            Vector2 diff;
            diff = (PlayerPosition + (new Vector3(transform.position.x - PlayerPosition.x, 0, 0) * 2)) - transform.position;

            diff.Normalize();

            float rot_z = (Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg);
            transform.localRotation = Quaternion.Euler(0f, 180, rot_z);
            Front = -1;
        }

        //FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y / 2 + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(1));

        Destroy(Ready);
        GetComponent <Animator>().SetBool("Attack", true);
        //음표 발사
        FX.EffectPlay(FX.ENEMYS.CUCKOO_SONG);
        direction = PlayerPosition - transform.position;
        direction.Normalize();


        Song a = Instantiate(_SONG, transform.position, transform.rotation).GetComponent <Song>();

        a.direction = direction;
        a.ATK       = a.ATK * (100 + ATK) / 100;

        if (Curse.Song_Level >= 1 || Plus >= 1)
        {
            a            = Instantiate(_SONG, transform.position, transform.rotation * Quaternion.Euler(0, 0, 20)).GetComponent <Song>();
            a.direction  = direction;
            a.moveSpeed += 1;
            a.ATK        = a.ATK * (100 + ATK) / 100;

            a            = Instantiate(_SONG, transform.position, transform.rotation * Quaternion.Euler(0, 0, -20)).GetComponent <Song>();
            a.direction  = direction;
            a.moveSpeed += 1;
            a.ATK        = a.ATK * (100 + ATK) / 100;
        }

        if (Curse.Song_Level >= 2 || Plus >= 2)
        {
            a            = Instantiate(_SONG, transform.position, transform.rotation * Quaternion.Euler(0, 0, 40)).GetComponent <Song>();
            a.direction  = direction;
            a.moveSpeed += 2;
            a.ATK        = a.ATK * (100 + ATK) / 100;


            a            = Instantiate(_SONG, transform.position, transform.rotation * Quaternion.Euler(0, 0, -40)).GetComponent <Song>();
            a.direction  = direction;
            a.moveSpeed += 2;
            a.ATK        = a.ATK * (100 + ATK) / 100;
        }

        yield return(new WaitForSeconds(0.3f));

        if (PlayerPosition.x > transform.position.x)
        {
            transform.localRotation = Quaternion.Euler(0, 0, 0);
            Front = 1;
        }
        else if (PlayerPosition.x <= transform.position.x)
        {
            transform.localRotation = Quaternion.Euler(0f, 180, 0);
            Front = -1;
        }

        AttackTime = Time.time;
        attack     = false;
        attacking  = false;
        This_State = MON_STATE.IDLE;
        PrevTime   = Time.time;
        GetComponent <Animator>().SetBool("Attack", false);
    }
예제 #5
0
    IEnumerator Attack_02_Coru()
    {
        //FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y / 2 + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(0.5f));

        Destroy(Ready);
        FX.EffectPlay(FX.ENEMYS.DOLLS_GUN);
        MyWeapon.GetComponent <Doll_Attack_BowGun>().Fire();
        AttackTime = Time.time;
        This_State = MON_STATE.IDLE;
    }
예제 #6
0
    //-------------------------------------------------------------------------
    // Use those for Attack
    IEnumerator Attack_01_Coru()
    {
        //FX.EffectPlay(FX.SYSTEMS.ENEMY_READY);
        GameObject Ready = Instantiate(WaitAttack, transform.position + (Vector3.up * (GetComponent <SpriteRenderer>().size.y / 2 + WaitAttack.GetComponent <SpriteRenderer>().size.y / 2)), Quaternion.identity);

        Ready.transform.parent = transform;
        yield return(new WaitForSeconds(0.5f));

        Destroy(Ready);
        float ThisTime = Time.time;

        FX.EffectPlay(FX.ENEMYS.DOLLS_SPEAR);
        MyWeapon.GetComponent <Animator>().SetBool("Attack", true);

        while (Time.time - ThisTime <= 0.1f)
        {
            Move(2.5f);
            yield return(null);
        }

        yield return(new WaitForSeconds(0.1f));

        AttackTime = Time.time;
        This_State = MON_STATE.IDLE;
    }
예제 #7
0
 public MoveToFinalPoint(MovementStateMachine movementStateMachine) :
     base(movementStateMachine, movementStateMachine.FinalPoint)
 {
     _waitAttack = new WaitAttack(MovementStateMachine, this);
 }