protected override void OnInitialize() { eAttacks[0] = new IceBallAttack(this, iceballPrefab); eAttacks[1] = new FireBallAttack(this); eAttacks[2] = new NetworkAttack(new TelegraphAttack(this, telegraph)); spriteFlip = new CompoundSpriteFlip(gameObject, defaultDirection); }
private void Update() { float empSpd = spd; if (hp <= 0) { hpFill.material.SetFloat("_Progress", 0); } else { hpFill.material.SetFloat("_Progress", hp / maxHP); } for (int i = 0; i < equipedItems.Count; i++) { switch (equipedItems[i]) { case ItemType.Mask1: empSpd = empSpd + empSpd * 0.2f; break; case ItemType.Mask2: empSpd = empSpd + empSpd * 0.5f; break; case ItemType.Mask3: empSpd = empSpd + empSpd * 1f; break; case ItemType.Heart1: healElap1 += Time.deltaTime; if (healElap1 >= 1 && maxHP > hp * 0.005f) { hp += hp * 0.005f; healElap1 = 0; } break; case ItemType.Heart2: healElap2 += Time.deltaTime; if (healElap2 >= 1 && maxHP > hp * 0.01f) { hp += hp * 0.01f; healElap2 = 0; } break; case ItemType.Heart3: healElap2 += Time.deltaTime; if (healElap2 >= 1 && maxHP > hp * 0.03f) { hp += hp * 0.03f; healElap3 = 0; } break; } } movementDir = new Vector2(jsMove.Direction.x, jsMove.Direction.z); // move anim if (Vector2.Distance(movementDir, Vector2.zero) > 0.01f) { if (Mathf.Abs(movementDir.x) > Mathf.Abs(movementDir.y)) { if (movementDir.x > 0) // 오른쪽 { preDir = movementDir; animator.SetBool("Idle", false); animator.SetBool("DownMove", false); animator.SetBool("LeftMove", false); animator.SetBool("RightMove", true); animator.SetBool("UpMove", false); } else if (movementDir.x <= 0) // 왼쪽 { preDir = movementDir; animator.SetBool("Idle", false); animator.SetBool("DownMove", false); animator.SetBool("LeftMove", true); animator.SetBool("RightMove", false); animator.SetBool("UpMove", false); } } else { if (movementDir.y > 0) // 위쪽 { preDir = movementDir; animator.SetBool("Idle", false); animator.SetBool("DownMove", false); animator.SetBool("LeftMove", false); animator.SetBool("RightMove", false); animator.SetBool("UpMove", true); } else if (movementDir.y <= 0) { preDir = movementDir; animator.SetBool("Idle", false); animator.SetBool("DownMove", true); animator.SetBool("LeftMove", false); animator.SetBool("RightMove", false); animator.SetBool("UpMove", false); } } } else { animator.SetBool("Idle", true); animator.SetBool("DownMove", false); animator.SetBool("LeftMove", false); animator.SetBool("RightMove", false); animator.SetBool("UpMove", false); } transform.Translate(movementDir.normalized * empSpd * Time.deltaTime); #region normalAttack // 기본공격 if (attackSkills[(int)AttackType.DefaulAttack].isActive) { NormalAttack normalAttack = attackSkills[(int)AttackType.DefaulAttack].skill as NormalAttack; normalAttack.elapsedTime += Time.deltaTime; if (normalAttack.elapsedTime > normalAttack.attackDelay) { //Actor target= Actor.FindActor((Actor actor) => //{ // if (Vector2.Distance(actor.transform.position, transform.position) < normalAttack.attackRange) // { // return true; // } // return false; //}); Actor target = null; float bestDist = 100; foreach (var act in allActors) { if (act.Value == this || act.Value.isActiveAndEnabled == false) { continue; } float dist = Vector2.Distance(transform.position, act.Value.transform.position); if (dist < bestDist) { target = act.Value; bestDist = dist; } } if (target != null && Vector2.Distance(target.transform.position, transform.position) < normalAttack.attackRange) { normalAttack.Attack(target, firePos.position); normalAttack.elapsedTime = 0; } } } #endregion if (attackSkills[(int)AttackType.FireBall].isActive) { FireBallAttack fireBallAttack = attackSkills[(int)AttackType.FireBall].skill as FireBallAttack; fireBallAttack.elapsedTime += Time.deltaTime; if (fireBallAttack.elapsedTime > fireBallAttack.AttackDelay) { fireBallAttack.Attack(firePos.position); fireBallAttack.elapsedTime = 0; } } if (attackSkills[(int)AttackType.MagicBall].isActive) { MagicBallAttack magicBallAttack = attackSkills[(int)AttackType.MagicBall].skill as MagicBallAttack; magicBallAttack.elapsedTime += Time.deltaTime; if (magicBallAttack.elapsedTime > magicBallAttack.AttackDelay) { Actor[] target = new Actor[magicBallAttack.attackCount]; float bestDist = 100; int foundCnt = 0; bool isAttacked = false; foreach (var act in allActors) { if (foundCnt >= magicBallAttack.attackCount) { break; } if (act.Value == this || act.Value.isActiveAndEnabled == false) { continue; } float dist = Vector2.Distance(transform.position, act.Value.transform.position); if (dist < magicBallAttack.attackDistance) { target[foundCnt++] = act.Value; } } for (int i = 0; i < target.Length; i++) { if (target[i] != null) { magicBallAttack.Attack(target[i], firePos.position); isAttacked = true; } } if (isAttacked) { magicBallAttack.elapsedTime = 0; } } } if (attackSkills[(int)AttackType.Cycle].isActive) { CycleMagic cycleMagic = attackSkills[(int)AttackType.Cycle].skill as CycleMagic; cycleMagic.Attack(); //fireFallAttack.elapsedTime += Time.deltaTime; //if (fireFallAttack.elapsedTime > fireFallAttack.attackDelay) //{ // for (int i = 0; i < fireFallAttack.attackCount; i++) // { // int randX = UnityEngine.Random.Range(-2, 2); // int randY = UnityEngine.Random.Range(-2, 2); // Vector3 distPos = new Vector3(transform.position.x + randX, transform.position.y + randY); // fireFallAttack.Attack(distPos); // } // fireFallAttack.elapsedTime = 0; //} } }