void OnTriggerEnter(Collider other) { /////////////////DEALING DAMAGE TO AN ENEMY///////////////////////////////////////////////////////////////////////////////////// if (other.gameObject.CompareTag("Enemy")) { GameObject enemy = other.transform.parent.gameObject; while (enemy.GetComponent <IsEnemyCentral>() == null) { enemy = enemy.transform.parent.gameObject; } if (GameModeHandler.gamemode == GameModeHandler.GameMode.Battle) { float damage = GetDamageToEnemy(); DamageTaker damageTaker = enemy.GetComponent <DamageTaker>(); damageTaker.TakeDamage(damage); } else { BattleInfo battleInfo = enemy.GetComponent <BattleInfo>(); battleController.InitiateBattle(enemy, battleInfo); } } /////////////////DEALING DAMAGE TO A PUNCHING BAG///////////////////////////////////////////////////////////////////////////////////// if (other.gameObject.CompareTag("PunchingBag")) { GameObject enemy = other.transform.parent.gameObject; while (enemy.GetComponent <DamageTaker>() == null) { enemy = enemy.transform.parent.gameObject; } //todo change how a punching bag takes damage? float damage = GetDamageToEnemy(); DamageTaker damageTaker = enemy.GetComponent <DamageTaker>(); damageTaker.TakeDamage(damage); } /////////////////TAKING DAMAGE FROM A HAZARD (TRIGGER) ///////////////////////////////////////////////////////////////////////////////////// HazardData hazardInfo = other.gameObject.GetComponent <HazardData>(); //GETTING HIT BY A HAZARD if (hazardInfo != null && hazardInfo.enabled) { playerDamageTaker.TakeDamage(hazardInfo.damageToPlayer); } }
private IEnumerator FireCoroutine(Transform target) { if (target != null) { if (anim != null && anim.runtimeAnimatorController != null) { foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips) { if (clip.name == "Attack") { anim.SetTrigger("attack"); break; } } } yield return(new WaitForSeconds(fireDelay)); if (target != null) { DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } if (sfx != null && AudioManager.instance != null) { AudioManager.instance.PlayAttack(sfx); } } } }
/// <summary> /// Raises the destroy event. /// </summary> void OnDestroy() { // If scene is in progress if (isQuitting == false) { // Find all colliders in specified radius Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius); foreach (Collider2D col in cols) { // If collision allowed by scene if (LevelManager.IsCollisionValid(gameObject.tag, col.gameObject.tag) == true) { // If target can receive damage DamageTaker damageTaker = col.gameObject.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } } if (explosion != null) { // Create explosion visual effect Destroy(Instantiate <GameObject>(explosion, transform.position, transform.rotation), explosionDuration); } } }
/// <summary> /// Raises the destroy event. /// </summary> void OnDestroy() { // If scene is in progress if (isQuitting == false) { // Find all colliders in specified radius Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius); foreach (Collider2D col in cols) { if (IsTagAllowed(col.tag) == true) { // If target can receive damage DamageTaker damageTaker = col.gameObject.GetComponent <DamageTaker>(); if (damageTaker != null) { // Target takes damage equal bullet damage * AOE Damage Rate damageTaker.TakeDamage((int)(Mathf.Ceil(aoeDamageRate * (float)bullet.GetDamage()))); } } } if (explosion != null) { // Create explosion visual effect Destroy(Instantiate <GameObject>(explosion, transform.position, transform.rotation), explosionDuration); } if (sfx != null && AudioManager.instance != null) { // Play sfx AudioManager.instance.PlaySound(sfx); } } }
/// <summary> /// Start this instance. /// </summary> void Start() { DefendersSpawner defendersSpawner = tower.GetComponent <DefendersSpawner>(); if (defendersSpawner != null) { // Get all active defenders foreach (GameObject defender in defendersSpawner.defPoint.GetDefenderList()) { DamageTaker damageTaker = defender.GetComponent <DamageTaker>(); // Heal it damageTaker.TakeDamage(-damageTaker.hitpoints); if (healFxPrefab != null) { // Create heal visual effect Destroy(Instantiate(healFxPrefab, defender.transform), fxDuration); } } } else { Debug.Log("This tower can not use heal skills"); } Destroy(gameObject); }
/// <summary> /// Heal all targets in radius. /// </summary> private bool Heal() { bool res = false; // Searching for units Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, radius.radius * transform.localScale.x); foreach (Collider2D col in cols) { if (IsTagAllowed(col.tag) == true) { // If it has Damege Taker component DamageTaker target = col.gameObject.GetComponent <DamageTaker>(); if (target != null) { // If target injured if (target.currentHitpoints < target.hitpoints) { res = true; target.TakeDamage(-healAmount); if (healVisualPrefab != null) { // Create visual healing effect on target GameObject effect = Instantiate(healVisualPrefab, target.transform); // And destroy it after specified timeout Destroy(effect, healVisualDuration); } } } } } return(res); }
/// <summary> /// Make damage specified by delays and amount. /// </summary> /// <returns>The coroutine.</returns> private IEnumerator DamageCoroutine() { foreach (float delay in delaysBeforeDamage) { yield return(new WaitForSeconds(delay)); // Search for targets Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, radius); foreach (Collider2D col in hits) { if (col.CompareTag("Enemy") == true || col.CompareTag("FlyingEnemy") == true) { DamageTaker damageTaker = col.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } } if (sfx != null && AudioManager.instance != null) { // Play sound effect AudioManager.instance.PlaySound(sfx); } } Destroy(gameObject); }
public void DamageTo(DamageTaker tar) { tar.TakeDamage(this, damage, tr.position); if (OnGiveDamage != null) { OnGiveDamage(tar, damage, tr.position); } }
//穿过物体造成伤害 void OnTriggerEnter2D(Collider2D other) { DamageTaker damageTaker = other.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } }
private void OnTriggerEnter2D(Collider2D collision) { DamageTaker damageTaker = collision.gameObject.GetComponent <DamageTaker>(); if (damageTaker) { damageTaker.TakeDamage(damage); } }
/// <summary> /// Damage targets on trigger enter /// </summary> /// <param name="other">Other.</param> void OnTriggerEnter2D(Collider2D other) { // If target can receive damage DamageTaker damageTaker = other.GetComponent <DamageTaker> (); if (damageTaker != null) { damageTaker.TakeDamage(damage); } }
/// <summary> /// Damage targets on trigger enter /// </summary> /// <param name="other">Other.</param> void OnTriggerEnter2D(Collider2D other) { if (IsTagAllowed(other.tag) == true) { // If target can receive damage DamageTaker damageTaker = other.GetComponent <DamageTaker> (); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } }
private void ApplyAllDamageAB() { Collider closestCol = null; float minDist = float.PositiveInfinity; float dist; int id = Random.Range(int.MinValue, int.MaxValue); // find the closest collider (and the extraDamage ones) foreach (KeyValuePair <Collider, Vector3> pair in encounteredCols) { if (pair.Key != null) { // Extra damage: deal damage DamageTaker dt = pair.Key.GetComponent <DamageTaker>(); if (dt != null && dt.extraDmg) { ApplyDamageAB(pair.Key, pair.Value, id); } else { dist = (pair.Key.ClosestPoint(pair.Value) - pair.Value).magnitude; if (dist < minDist) { minDist = dist; closestCol = pair.Key; } } } } if (closestCol != null) { DamageTaker dt = closestCol.GetComponent <DamageTaker>(); if (dt.bouncing) { // Stun character playerMotor.psm.ApplyCrowdControl( new CrowdControl(CrowdControlType.Stun, DamageType.Self, DamageElement.None), STUN_DURATION ); // effect dt.TakeDamage(new Damage(DAMAGE_AB, DamageType.Melee, DamageElement.Light, playerMotor.transform.position), playerMotor, playerMotor.transform.position, id); } else { ApplyDamageAB(closestCol, encounteredCols[closestCol], id); } } }
//尝试治愈 private void TryToHeal(DamageTaker target) { if (coolDownCounter >= coolDown) { coolDownCounter = 0f; target.TakeDamage(-healAmount); if (healVisual != null) { GameObject effect = Instantiate(healVisual, target.transform); Destroy(effect, healVisualDuration); } } }
void OnTriggerEnter2D(Collider2D collid) { if (collid.gameObject.layer == LayerMask.NameToLayer("ground")) { Destroy(gameObject); } else if (collid.gameObject.tag != gameObject.tag) { DamageTaker dt = collid.GetComponentInParent <DamageTaker>(); dt.TakeDamage(2, 50); Destroy(gameObject); } }
/// <summary> /// Damage targets on trigger enter /// </summary> /// <param name="other">Other.</param> void OnTriggerEnter2D(Collider2D other) { // If collision allowed by scene if (LevelManager.IsCollisionValid(gameObject.tag, other.gameObject.tag) == true) { // If target can receive damage DamageTaker damageTaker = other.GetComponent <DamageTaker> (); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } }
void DoDamage(GameObject other) { DamageTaker damaged = other.GetComponent <DamageTaker>(); if (damaged && damaged.alignment != alignment) { damaged.TakeDamage(damage, gameObject); } if (destroyOnImpact) { Destroy(gameObject); } }
private void Hack(Transform target) { if (target != null) { DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } if (_animator != null) { _animator.SetTrigger("attackMelee"); } } }
private void OnTriggerStay2D(Collider2D collision) { DamageTaker damageTaker = collision.gameObject.GetComponent <DamageTaker>(); if (damageTaker) { currentDamageFrame++; if (currentDamageFrame >= touchDamageFrame) { damageTaker.TakeDamage(damage); currentDamageFrame = 0; } } }
/// <summary> /// Heal specified target if cooldown expired. /// </summary> /// <param name="target">Target.</param> private void TryToHeal(DamageTaker target) { // If cooldown expired if (cooldownCounter >= cooldown) { cooldownCounter = 0f; target.TakeDamage(-healAmount); if (healVisualPrefab != null) { // Create visual healing effect on target GameObject effect = Instantiate(healVisualPrefab, target.transform); // And destroy it after specified timeout Destroy(effect, healVisualDuration); } } }
protected virtual void PerformHit(DamageTaker objHit) { if (objHit) { this.OnDamageHit.Invoke(this, objHit); objHit.TakeDamage(this, this.ignoreInvulnerability); if (this.disableDamageAfterHit) { this.CanDealDamage = false; } } else { this.OnNoDamageHit.Invoke(this); } }
/// <summary> /// Make melee attack /// </summary> /// <param name="target">Target.</param> private void Smash(Transform target) { if (target != null) { // If target can receive damage DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } if (anim != null) { anim.Play("AttackMelee"); } } }
void OnTriggerEnter2D(Collider2D collid) { //Debug.Log ("giverAttack - collid.gameObjectTag: " + collid.gameObject.tag + ", myTag: " + gameObject.tag); if (collid.gameObject.tag != gameObject.tag) { //Debug.Log("giver's attack is doing damage to : "+collid.name); DamageTaker d = collid.GetComponentInChildren <DamageTaker> (); //Debug.Log ("giverAttack: is doing damage to - d " + d.ToString ()); if (d != null) { d.TakeDamage(5f, 100); } else { Debug.Log("Giver's damagee is null"); } } }
void OnTriggerEnter2D(Collider2D collid) { //Debug.Log ("treeAttack - collid: " + collid.ToString()); //Debug.Log ("treeAttack - collid.gameObjectTag: " + collid.gameObject.tag + ", myTag: " + gameObject.tag); if (collid.gameObject.tag != gameObject.tag) { DamageTaker d = collid.GetComponentInChildren <DamageTaker> (); //Debug.Log("tree's attack is doing damage to : "+d.ToString()); if (d != null) { d.TakeDamage(5f, 50); } else { Debug.Log("oops treeAttack's damagee is null"); } } }
void OnTriggerEnter2D(Collider2D collid) { if (collid.gameObject.layer == LayerMask.NameToLayer("ground")) { Debug.Log("grounded"); } else if (collid.gameObject.tag != gameObject.tag) { DamageTaker d = collid.GetComponentInParent <DamageTaker>(); if (d != null) { d.TakeDamage(1f, 50); } else { Debug.Log("What the heck"); } } }
/// <summary> /// Update this instance. /// </summary> void FixedUpdate() { counter += Time.fixedDeltaTime; // Add acceleration speed += Time.fixedDeltaTime * speedUpOverTime; if (target != null) { aimPoint = target.position; } // Calculate distance from firepoint to aim Vector2 originDistance = aimPoint - originPoint; // Calculate remaining distance Vector2 distanceToAim = aimPoint - (Vector2)myVirtualPosition; // Move towards aim myVirtualPosition = Vector2.Lerp(originPoint, aimPoint, counter * speed / originDistance.magnitude); // Add ballistic offset to trajectory transform.position = AddBallisticOffset(originDistance.magnitude, distanceToAim.magnitude); // Rotate bullet towards trajectory LookAtDirection2D((Vector2)transform.position - myPreviousPosition); myPreviousPosition = transform.position; sprite.enabled = true; // Close enough to hit if (distanceToAim.magnitude <= hitDistance) { if (target != null) { // If bullet must deal damage to single target if (aoeDamageOnly == false) { // If target can receive damage DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } } // Destroy bullet Destroy(gameObject); } }
private IEnumerator DamageCoroutine() { foreach (float delay in delayDamage) { yield return(new WaitForSeconds(delay)); Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, radius); foreach (Collider2D hit in hits) { if (hit.CompareTag("Enemy") == true) { DamageTaker damageTaker = hit.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } } } Destroy(gameObject); }
//治愈半径内全部目标 private bool AOEHeal() { bool res = false; Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, healRadius); foreach (Collider2D col in cols) { if (IsTagAllowed(col.tag) == true) { //判断对象是否需要治疗 DamageTaker target = col.gameObject.GetComponent <DamageTaker>(); if (target.currentHitPoint < target.hitPoint) { res = true; //进行治愈 target.TakeDamage(-healAmount); ShowHealVisual(target); } } } return(res); }
void FixedUpdate() { counter += Time.fixedDeltaTime; speed += Time.fixedDeltaTime * acceleration; if (target != null) { targetPosition = target.position; } //记录初始距离 Vector2 targetDistance = targetPosition - firePosition; //计算剩余距离 Vector2 remainingDistance = targetPosition - (Vector2)currentPosition; //向目标移动 currentPosition = Vector2.Lerp(firePosition, targetPosition, counter * speed / targetDistance.magnitude); //添加偏移 transform.position = AddBallisticOffset(targetDistance.magnitude, remainingDistance.magnitude); //子弹旋转 DirectionRotation((Vector2)transform.position - previousPosition); previousPosition = transform.position; sprite.enabled = true; if (remainingDistance.magnitude <= hitDistance) { if (target != null) { if (onlyAOEDamage == false) { DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } } } Destroy(gameObject); } }
private IEnumerator FireCoroutine(Transform target) { if (target != null) { // If unit has animator if (anim != null && anim.runtimeAnimatorController != null) { // Search for clip foreach (AnimationClip clip in anim.runtimeAnimatorController.animationClips) { if (clip.name == "Attack") { // Play animation anim.SetTrigger("attack"); break; } } } // Delay to synchronize with animation yield return(new WaitForSeconds(fireDelay)); if (target != null) { // If target can receive damage DamageTaker damageTaker = target.GetComponent <DamageTaker>(); if (damageTaker != null) { damageTaker.TakeDamage(damage); } // Play sound effect if (sfx != null && AudioManager.instance != null) { AudioManager.instance.PlayAttack(sfx); } } } }