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); }
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; }
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)); }
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); }
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; }
//------------------------------------------------------------------------- // 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; }
public MoveToFinalPoint(MovementStateMachine movementStateMachine) : base(movementStateMachine, movementStateMachine.FinalPoint) { _waitAttack = new WaitAttack(MovementStateMachine, this); }