protected void OnTriggerEnter(Collider other) { TargetProjectile targetProj = other.GetComponentInChildren <TargetProjectile>(); if (targetProj != null) { Vector3 dir = targetProj.transform.position - Player.Instance.transform.position; dir.y = 0.0f; dir = dir.normalized; targetProj.Hit(Player.Instance.gameObject, dir * Knockback); return; } if (!enemiesHit.Contains(other.gameObject)) { Enemy enemy = other.GetComponentInChildren <Enemy>(); if (enemy == null) { enemy = other.GetComponentInParent <Enemy>(); } if (enemy != null) { enemiesHit.Add(other.gameObject); float damage = enemy.health.TakeDamage(this.Type, this.Damage); bool isDead = enemy.health.IsDead(); if (damage > 0) { if (isDead) { Vector3 forward = Player.Instance.camera.transform.forward; //forward = forward.normalized; enemy.Explode(forward * RigidbodyKnockback, Player.Instance.camera.transform.position); } else { Vector3 forward = Player.Instance.camera.transform.forward; forward.y = 0.0f; forward = forward.normalized; enemy.Knockback(forward * Knockback, KnockbackDuration); } } } else { Rigidbody rb = other.GetComponentInChildren <Rigidbody>(); if (rb == null) { rb = other.GetComponentInParent <Rigidbody>(); } if (rb != null) { Vector3 forward = Player.Instance.camera.transform.forward; //forward = forward.normalized; rb.AddForce(forward * RigidbodyKnockback, ForceMode.Impulse); } } } }
public void CreateArrow(Vector3 targetPos, float moveTime) { if (this != null) { //화살이 부족한 경우에만 풀링을 돌림 if (arrow.Count < 1) { GameObject arrowObj; for (int i = 0; i < 5; ++i) { arrowObj = Instantiate(arrowPrefab, new Vector3(0, 0, 0), Quaternion.identity, transform.parent); arrowObj.SetActive(false); this.arrow.Add(arrowObj); } } GameObject frontArrow = arrow[0]; arrow.RemoveAt(0); arrow.Add(frontArrow); frontArrow.SetActive(true); frontArrow.transform.position = transform.position; frontArrow.transform.LookAt(targetPos); frontArrow.transform.DOMove(targetPos, moveTime, false).OnKill(() => { frontArrow.SetActive(false); }); TargetProjectile projectile = frontArrow.GetComponent <TargetProjectile>(); if (projectile != null) { projectile.ActiveFalse(moveTime); } } }
public void ArrowCreate(Vector3 targetPos, float moveTime) { if (this != null) { if (arrow.Count < 1) { GameObject a; for (int i = 0; i < 5; ++i) { a = Instantiate(arrowPrefab, new Vector3(0, 0, 0), Quaternion.identity, transform.parent); a.SetActive(false); arrow.Add(a); } } GameObject Arrow = arrow[0]; arrow.RemoveAt(0); arrow.Add(Arrow); Arrow.SetActive(true); Arrow.transform.position = transform.position; Arrow.transform.LookAt(targetPos); Arrow.transform.DOMove(targetPos, moveTime, true).OnKill(() => { Arrow.SetActive(false); }); TargetProjectile tp = Arrow.GetComponent <TargetProjectile>(); if (tp != null) { tp.ActiveFalse(moveTime); } } }
private void MissSnowball(TargetProjectile projectile) { //print("Missed"); Snowball snowball = projectile.GetComponent <Snowball>(); snowballs.Remove(snowball); Destroy(projectile.gameObject); }
private void HitSnowball(TargetProjectile projectile, GameObject hitObj) { //print("Hit"); Snowball snowball = projectile.GetComponent <Snowball>(); snowballs.Remove(snowball); Destroy(snowball.gameObject); }
private void MissTarget(TargetProjectile projectile) { if (currProjectile != null) { print("Missed"); Destroy(projectile.gameObject); currProjectile = null; StartCoroutine(SpawnProjectileDelay()); } }
private void HitTarget(TargetProjectile projectile, GameObject hitObj) { if (currProjectile != null) { print("Hit"); Destroy(projectile.gameObject); currProjectile = null; StartCoroutine(SpawnProjectileDelay()); } }
private void ReceiveTarget(TargetReceiver receiver, GameObject meteor) { if (currProjectile == null) { return; } print("Received " + meteor.name); if (ReceiveCount == 0) { currProjectile.OnHit -= HitTarget; currProjectile.OnMiss -= MissTarget; currProjectile = null; GameObject shield = Shields[0]; Shields.RemoveAt(0); Destroy(shield.gameObject); Destroy(meteor.gameObject); if (Shields.Count == 0) { Aura.SetActive(false); stateMachine.ChangeState("Boss4_MeteorShower"); } else { StartCoroutine(SpawnProjectileDelay()); } } else { ReceiveCount--; Vector3 dir = Vector3.up; dir *= ProjectileImpulse; //currProjectile.SpeedOverTime -= .01f; currProjectile.Hit(this.gameObject, dir); } }
public void SpawnProjectile() { if (currProjectile != null) { return; } TargetProjectile meteor = Instantiate(TrackingMeteorPrefab, ProjectileSpawnpoint.position, ProjectileSpawnpoint.rotation, this.transform); Vector3 dir = Vector3.up; dir *= ProjectileImpulse; meteor.OnHit += HitTarget; meteor.OnMiss += MissTarget; currProjectile = meteor; ReceiveCount = 3 - Shields.Count; switch (Shields.Count) { case 3: meteor.SpeedOverTime = .1f; break; case 2: meteor.SpeedOverTime = .05f; break; case 1: meteor.SpeedOverTime = .03f; break; default: meteor.SpeedOverTime = .2f; break; } meteor.Fire(this.gameObject, Player.Instance.camera.gameObject, dir); }
private void Fire(TargetProjectile proj) { HitEffect.Play(); }
private void SlamAttack() { Player.Instance.CanWalk = true; Player.Instance.velocity.y = PlayerJump; DustEffect.Play(); AudioManager.Instance.PlaySoundWithParent("hammer", ESoundChannel.SFX, gameObject); int layermask = PhysicsCollisionMatrix.Instance.MaskForLayer(this.gameObject.layer); Collider[] colliders = Physics.OverlapSphere(Player.Instance.transform.position, SlamRadius, layermask); //Collider[] colliders = Physics.OverlapSphere(SlamCenter.position, SlamRadius, layermask); foreach (Collider c in colliders) { TargetProjectile targetProj = c.GetComponentInChildren <TargetProjectile>(); if (targetProj != null) { Vector3 dir = targetProj.transform.position - Player.Instance.transform.position; dir.y = 0.0f; dir = dir.normalized; targetProj.Hit(Player.Instance.gameObject, dir * Knockback); continue; } Enemy enemy = c.GetComponentInChildren <Enemy>(); if (enemy == null) { enemy = c.GetComponentInParent <Enemy>(); } if (enemy != null) { // Damage float damage = enemy.health.TakeDamage(this.Type, this.Damage); bool isDead = enemy.health.IsDead(); // Knockback if (damage > 0) { if (isDead) { //Vector3 dir = c.transform.position - SlamCenter.position; Vector3 dir = c.transform.position - Player.Instance.transform.position; //dir.y = 0.0f; dir = dir.normalized; enemy.Explode(dir * RigidbodyKnockback, SlamCenter.position); } else { //Vector3 dir = c.transform.position - SlamCenter.position; Vector3 dir = c.transform.position - Player.Instance.transform.position; dir.y = 0.0f; dir = dir.normalized; enemy.Knockback(dir * Knockback, KnockbackDuration); } } } else { Rigidbody rb = c.GetComponentInChildren <Rigidbody>(); if (rb == null) { rb = c.GetComponentInParent <Rigidbody>(); } if (rb != null) { //Vector3 dir = c.transform.position - SlamCenter.position; Vector3 dir = c.transform.position - Player.Instance.transform.position; //dir.y = 0.0f; dir = dir.normalized; rb.AddForceAtPosition(dir * RigidbodyKnockback, SlamCenter.position, ForceMode.Impulse); } } } }
private void Fire(TargetProjectile proj) { direction = this.transform.forward; HitEffect.Play(); }