public void Cast() { int targetLayerMask = targets; int wallLayerMask = Entity.wallLayerMask; tickCount = ticksAlive; if (CalculatePierce() <= 0) { RaycastHit2D hit = Physics2D.Raycast(startPos, direction, Mathf.Infinity, targetLayerMask | wallLayerMask); if (hit && !ignoredColliders.Contains(hit.collider) && canHit) { Enemy e = hit.transform.GetComponent <Enemy>(); if (e != null) { e.TakeDamage(CalculateDamage(), direction); } PlayerSegmentHealth p = hit.transform.GetComponent <PlayerSegmentHealth>(); if (p != null) { p.TakeDamage(CalculateDamage()); } // create effect lineRenderer.SetPosition(0, startPos); lineRenderer.SetPosition(1, hit.point); } } else { RaycastHit2D wallHit = Physics2D.Raycast(startPos, direction, Mathf.Infinity, wallLayerMask); ContactFilter2D targetFilter = new ContactFilter2D(); targetFilter.layerMask = targetLayerMask; RaycastHit2D[] hits = new RaycastHit2D[CalculatePierce()]; int numHit = Physics2D.Raycast(startPos, direction, targetFilter, hits, wallHit.distance); for (int i = 0; i < numHit; i++) { if (hits[i] && !ignoredColliders.Contains(hits[i].collider) && canHit) { Enemy e = hits[i].transform.GetComponent <Enemy>(); if (e != null) { e.TakeDamage(CalculateDamage(), direction); } // create effect PlayerSegmentHealth p = hits[i].transform.GetComponent <PlayerSegmentHealth>(); if (p != null) { p.TakeDamage(CalculateDamage()); } } } lineRenderer.SetPosition(0, startPos); lineRenderer.SetPosition(1, wallHit.point); } }
private void Attack(GameObject seg) { PlayerSegmentHealth h = seg.GetComponent <PlayerSegmentHealth>(); if (h != null) { h.TakeDamage(damage); } }
private void Attack(GameObject seg) { AudioManager.Play("slime_attack");// + Random.Range(1, 3)); PlayerSegmentHealth h = seg.GetComponent <PlayerSegmentHealth>(); if (h != null) { h.TakeDamage(damage); } }
protected override void OnTriggerEnter2D(Collider2D other) { if (ignoredColliders.Contains(other)) { return; } // check if it is not in targets if ((targets & (1 << other.gameObject.layer)) == 0) { return; } if (other.tag == "Enemy" && !hitEnemyThisTile) { Enemy e = other.gameObject.GetComponent <Enemy>(); e.TakeDamage(CalculateDamage(), direction); basePierce -= 1; if (explode > 0) { GameObject egg = Instantiate(eggsplosionPrefab, transform.position, Quaternion.identity, transform.parent); egg.GetComponent <Eggsplosion>().Init(explode); } if (CalculatePierce() < 0) { ProjectileManager.RemoveProjectile(gameObject); } hitEnemyThisTile = true; } if (other.tag == "Player" && !hitEnemyThisTile) { PlayerSegmentHealth p = other.gameObject.GetComponent <PlayerSegmentHealth>(); p.TakeDamage(CalculateDamage()); basePierce -= 1; if (CalculatePierce() < 0) { ProjectileManager.RemoveProjectile(gameObject); } hitEnemyThisTile = true; } if (other.tag == "Wall") { /*if (explode > 0) * { * GameObject egg = Instantiate(eggsplosionPrefab, transform.position, Quaternion.identity, transform.parent); * egg.GetComponent<Eggsplosion>().Init(explode); * }*/ ProjectileManager.RemoveProjectile(gameObject); } }
protected virtual void OnTriggerEnter2D(Collider2D other) { if (ignoredColliders.Contains(other)) { return; } // check if it is not in targets if ((targets & (1 << other.gameObject.layer)) == 0) { return; } if (other.tag == "Enemy" && !hitEnemyThisTile) { Enemy e = other.gameObject.GetComponent <Enemy>(); e.TakeDamage(CalculateDamage(), direction); basePierce -= 1; if (CalculatePierce() < 0) { ProjectileManager.RemoveProjectile(gameObject); } hitEnemyThisTile = true; } if (other.tag == "Player" && !hitEnemyThisTile) { PlayerSegmentHealth p = other.gameObject.GetComponent <PlayerSegmentHealth>(); p.TakeDamage(baseDamage); // CalculateDamage()); basePierce -= 1; if (basePierce < 0) //CalculatePierce() < 0) { ProjectileManager.RemoveProjectile(gameObject); } hitEnemyThisTile = true; } if (other.tag == "Wall") { ProjectileManager.RemoveProjectile(gameObject); } }
private IEnumerator ExplodeHelper(LayerMask target, int damage) { AudioManager.Play("misc_explosion"); CameraShake.Shake(.75f, 1.25f); explosionFX.SetActive(true); //spriteRenderer.enabled = false; //hitbox.enabled = false; //ContactFilter2D targetFilter = new ContactFilter2D(); //targetFilter.layerMask = fullHeightEntitiesMask; //RaycastHit2D[] hits = new RaycastHit2D[99]; //int numHit = Physics2D.Raycast(startPos, direction, targetFilter, hits, wallHit.distance); Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, 2f, target); for (int i = 0; i < hits.Length; i++) { //Debug.Log("Explosion hit " + hits[i].name + " at " + hits[i].transform.position); Enemy e = hits[i].transform.GetComponent <Enemy>(); if (e != null) { e.TakeDamage(damage, (e.transform.position - transform.position).normalized); } // create effect PlayerSegmentHealth p = hits[i].transform.GetComponent <PlayerSegmentHealth>(); if (p != null) { p.TakeDamage(damage); } } yield return(new WaitForSeconds(2)); //Die(); }